【JS逆向】某某经营网jsl逆向分析
本帖最后由 littlewhite11 于 2025-3-10 07:35 编辑# 逆向目标
- 网址:`aHR0cDovL3d3dy5jYi5jb20uY24v`
- 目标:cookie中的`__jsl_clearance`参数
# 抓包分析
清空cookie,刷新网站,会发起三个相同的请求,其中前两次响应状态码为512,第三次响应状态码为200,这是jsl的典型特征。
第一次响应设置了一个名为`__jsluid_h`的cookie。
第二次请求携带上一个响应的cookie和一个名为`__jsl_clearance`的cookie。
第三次请求携带和第二次响应名字相同的cookie,但`__jsl_clearance`的值不一样了,比较明显的区别就是第二次cookie值中间的数字是-1,第三次cookie值中间的数字是0。
# 逆向分析
流程分析完了,下面开始正式逆向,一般来说,对于cookie加密的情况,直接hook。
成功hook到第二次的cookie,而且代码也非常熟悉,经典的OB混淆。
那第二次请求的`__jsl_clearance`在哪生成的呢,为什么没有hook到。
还是下熟悉的`script断点`看看吧。
第一加载index的时候,会发现是这个时候生成了第二次请求的`__jsl_clearance`,这个并不难,我们重点需要分析第二次生成的`__jsl_clearance`。
既然遇到OB混淆了,那就无脑AST。
还原后的代码只有240行,我们甚至可以直接静态分析。
直接搜索`document["cookie"]`,只有一个地方,`_0x4954f5`就是我们的目标了。
继续往前分析,发现`_0x5bef39`就是`__jsl_clearance`最终的值。
再往前分析,最终找到目标参数的生成位置。
剩下的事情就是,你懂的,缺啥补啥。其中`_0x23b046`是调用`go`函数传进去的对象。
下面直接模拟请求:
成功!!!
> 请求的时候可以`session保持`,其次还需要注意JS脚本是`动态`的,每次使用的`hash算法`可能都不一样,需要将动态的参数提取出来进行请求。 z65555 发表于 2024-11-20 20:25
是不是要先学习前端技术才能学这个逆向呢
我没有专门学过前端,缺什么知识补什么知识 var CryptoJS = require('crypto-js')
function dynamicHash(algorithm, data) {
try {
// 根据算法名称选择对应的哈希函数
const hashFunctions = {
'md5': CryptoJS.MD5,
'sha1': CryptoJS.SHA1,
'sha224': CryptoJS.SHA224,
'sha256': CryptoJS.SHA256,
'sha384': CryptoJS.SHA384,
'sha512': CryptoJS.SHA512,
'sha3': CryptoJS.SHA3
};
if (!hashFunctions) {
throw new Error(`Unsupported algorithm: ${algorithm}`);
}
// 计算哈希值
const hash = hashFunctions(data);
return hash.toString(CryptoJS.enc.Hex); // 返回十六进制字符串
} catch (error) {
return `Error: ${error.message}`;
}
}
hash换成dynamicHash这个吧
6啊,学习学习 PhoenixOe 发表于 2024-11-19 15:36
6啊,学习学习
互相学习 学习,大佬厉害 6 啊,感谢分享 学习学习 羡慕你们程序员 xina 发表于 2024-11-19 18:22
什么时候我才能有这种技术
迟早的事 逆向分析棒 逆向分析棒 6啊,现在正在学习逆向,学到了