【JavaScript 逆向】手撕某红书X-s,X-T 感受纯算法的压迫
一、声明
本案例中所有内容仅供个人学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
二、案例分析
抓包分析
列表页往下刷新 可以看到这个数据是这个包请求拿到的,主要是这个X-S
参数,
经验丰富的老爬虫er 肯定一眼睛可看出端倪 Base64编码的 {
就是 ey
开头 这个很可能就是一个json格式的数据
所以我们复制一下 去解码:
是不是一眼明了,就是这个 payload
hook JSON
hook json 里面的payload
在控制台注入
my_stringify = JSON.stringify;
JSON.stringify = function (val) {
if(val && val["payload"]){
debugger
}
return my_stringify(val);
};
成功断住,现在我们就可以去跟堆栈 找参数是怎么生成的了。
跟栈:
过程省略。。。。
上面这个位置,是三目表达式 ① ? 前面是true 走:前面的 ② 为false 走:后面的
window._webmsxyw(c,i)
就是我们的加密函数,这里也可以选择补环境 或者 RPC的方式
补环境还是比较推荐的 也可以通过插桩的日志查看检测的那些环境 挂上proxy补起
进入函数,发现指令集 可以复制到notepad里面方便观察。
插桩
跟到这个位置
_ace_1ae3c(_ace_8712.apply(typeof _ace_25a6._ace_936 == "undefined" ? _ace_4752e : _ace_25a6._ace_936, _ace_bdcc), _ace_be07c, _ace_be07c, 0);
console.log(_ace_8712, _ace_25a6._ace_936, _ace_bdcc );false;
我们可以进行插桩 看一下 非常恐怖的日志 十七万行
通过浏览分析日志
[1732584193,-271733879,-1732584194,271733878 .......................] MD5魔法值
里面很重要的信息 并对其进行了Base64
x1 = URL MD5
x2 = 环境检测值
x3 = cookie中a1的值
x4 = 时间戳
继续插桩 :插桩点
function(p0, p1, p2, p3, p4, p5, p6) {
let __string11 = _ace_34d1(p0, p1) + _ace_34d1(p2, p3)
if (typeof (__string11) == 'string' && __string11.indexOf(';x4=170')!=-1){
window.__string11 += __string11+'\r\n';
}
_ace_1ae3c(__string11, _ace_be07c, _ace_be07c, 0);
return ++p4;
}
console.log(_ace_7e97a);
寻找有用信息
最主要的是32位的key
整体流程: url+{参数}进行MD5————> 将x1+x2+x3+x4 进行b64 ———> encryt 加密出一串密文 ————>就是payload的参数