登录之后,页面搜索:
直接搜
定位到这里
打个断点,核心在l里面
研究一下l到底是什么?
是一个三元运算符
l = (a && void 0 !== window._webmsxyw ? window._webmsxyw : encrypt_sign)(c, i) || {};
再看下c和i
三元运算里面是两个方法:
window._webmsxyw 和 encrypt_sign
先看encrypt_sign ,把上面的c和i传入,感觉生成的结果长度不够
如果用这个方法,window._webmsxyw ,感觉长度是够的,说明这个是核心加密方法
然后去找这个方法,控制台输入,回车,双击得到方法
这个js文件长这样:
全部复制出来放到新的xhs.js文件中
在下方组织一下c和i,进行调用
调用之后,报错
然后开始补充环境,上代理:
function get_enviroment(proxyArray) {
for (let i = 0; i < proxyArray.length; i++) {
const objectName = proxyArray[i];
const target = window[objectName] || {}; // 获取全局对象,如果不存在则使用空对象
const handler = {
get: function (target, property, receiver) {
console.log(`方法: get 对象: ${objectName} 属性: ${property} 属性类型: ${typeof property} 属性值类型: ${typeof target[property]}`);
return Reflect.get(target, property, receiver);
},
set: function (target, property, value, receiver) {
console.log(`方法: set 对象: ${objectName} 属性: ${property} 属性类型: ${typeof property} 属性值类型: ${typeof value}`);
return Reflect.set(target, property, value, receiver);
}
};
window[objectName] = new Proxy(target, handler); // 创建代理并赋值回全局对象
}
}
const proxy_array = ['window', 'navigator', 'screen', 'document', 'localStorage', 'location', 'history']
window = global;
delete global;
delete Buffer;
document = {};
navigator = {};
screen = {};
localStorage = {};
location = {};
history = {};
get_enviroment(proxy_array)
将上面的代码放到xhs.js的开头
继续报错:
补充createElement
再运行,继续报错
补充:documentElement
再运行,报错:
在这个里面createElement,增加参数,打出来看看
那就补一个canvas标签和getContext属性
或者先补一个canvas,然后配置监听
发现是没有getContext,然后再去补充getContent
执行之后,发现能出来值了,但是长度不对
应该是环境还有问题,我们继续补环境,先补cookie吧
获取cookie
补充进来
运行,好像还是不对:
定位:
那在localStorage中补充getItem:
运行,发现出来的值已经很像了
用这个x-s发起请求试试
发现能请求成功,OK