在上一篇文章中已经讲了如何去定位x-s生成的位置,本篇文章就直接开始撸代码吧
如果没看过的话可以看:小红薯最新x-s算法分析12-06(x-s 56)(上)-CSDN博客
1、获取加密块代码
首先来到参数生成的位置,点击 F9 进入加密的位置
可以看见加密的代码就是在这一块,直接全扣就可以了
扣下来一共有两千多行,把调用的位置放在最下面尝试执行一下
javascript
c = "/api/sns/web/v1/user_posted?用自己的"
i = undefined
res = window._webmsxyw(c, i)
console.log(res)
2、使用补环境框架
使用补环境框架,把代理挂上在代码的最上方运行
javascript
function setProxy(proxyObjs) {
for (let i = 0; i < proxyObjs.length; i++) {
const handler = `{
get: function(target, property, receiver) {
if (property!="Math" && property!="isNaN"){
if (target[property] && typeof target[property] !="string" && Object.keys(target[property]).length>3){
}
else{
console.log("方法:", "get ", "对象:", "${proxyObjs[i]}", " 属性:", property, " 属性类型:", typeof property, ", 属性值:", target[property]);}}
return target[property];
},
set: function(target, property, value, receiver) {
console.log("方法:", "set ", "对象:", "${proxyObjs[i]}", " 属性:", property, " 属性类型:", typeof property, ", 属性值:", value, ", 属性值类型:", typeof target[property]);
return Reflect.set(...arguments);
}
}`;
eval(`try {
${proxyObjs[i]};
${proxyObjs[i]} = new Proxy(${proxyObjs[i]}, ${handler});
} catch (e) {
${proxyObjs[i]} = {};
${proxyObjs[i]} = new Proxy(${proxyObjs[i]}, ${handler});
}`);
}
}
window = {}
document = {}
navigator = {}
screen = {}
localStorage = {}
location = {}
history = {}
setProxy(['window', 'document', ' navigator', 'screen', 'localStorage', 'location', 'history'])
3、处理undefined (reading 'RegExp')
代码执行后发现报错 undefined (reading 'RegExp'),同时window也是undefined,
补充:
javascript
window = global;
delete global; // 删除 global,防止在后续代码中再次使用 global
delete Buffer; // 浏览器中无 Buffer 防止环境污染
4、补充 createElement、documentElement
这个时候报错,看代理发现是缺了 document 下的 createElement
老样子继续补 documentElement
javascript
document = {
createElement: function createElement() {
},
documentElement: function documentElement() {
},
}
5、处理 undefined (reading 'getContext')
报错 TypeError: Cannot read properties of undefined (reading 'getContext')
根据日志可看见最后一个调用的是 createElement,传参并打印一下看看做了什么
补上canvas,看看里面发生了什么
发现在 canvas 里面缺了一个 getContext,老样子直接补
再次执行发现已经没有报错了,接下来继续照着这个思路补就可以了
6、环境展示
根据前面的思路缺什么就去浏览器补什么,最终补出来长这样的:
7、生成结果展示
8、python运行结果展示
9、总结:
基本上按照这个思路慢慢补都是可以补全的,当然如果需要源码的话也可以私聊,如果有需要定制的话欢迎私信(白嫖怪勿扰,看着给就行)