网络爬虫js逆向之异步栈跟栈案例
【注意!!!】
前言:
1. 本章主要讲解js逆向之异步栈跟栈的知识(通过单步执行调试)
2. 使用关键字搜定位加密入口
3. 本专栏通过多篇文章【文字+案例】的形式系统化进行描述
4. 本文章全文进行了脱敏处理
5. 详细代码不进行展示,需要则私聊作者
爬虫js逆向专栏:https://blog.csdn.net/2201_75422674/category_12875823.html
爬虫专栏:https://blog.csdn.net/2201_75422674/category_12686609.html
- 大家喜欢可以订阅一下,不收费用的
目录
【1】抓包分析
【2】入口定位
【3】逆向
【4】结果演示
【1】抓包分析
抓包发现当发送请求时,在headers中需要携带图中的3个参数,否则会导致抓包失败
【2】入口定位
这里使用关键字搜索的位置来进行加密位置的定位
【3】逆向
1. 当对上述xr.getTokenAndSign进行断点,并悬浮进入该函数时,发现执行了以下代码:
return function(t) {
return e.apply(this, arguments)
}
2. 这时,我们应该对return进行断点,悬浮进行e函数,查看相关的加密逻辑
3. 悬浮进入该e函数后,可见到真正的加密逻辑,token为l,signature和timestamp为s(l)加密后的结果。
4. 打开node++查看c、u、s函数
4.1 首先可以看到函数 c
接收一个字符串作为输入,计算其 SHA-256 哈希值,利用当前时间生成一个 32 字符长的字符串,并通过特定索引从哈希值中选择字符,最终将该字符串转换为 HMAC 密钥,并返回该密钥及其生成的时间戳。
4.2 函数 u
根据请求方法处理 URL,去掉查询字符串中的问号,并在 POST 或 PUT 请求的情况下,将请求体中的 FormData
转换为特定格式的字符串,或者简单地将请求体附加到 URL,以生成最终的请求字符串。
4.3 函数 s
接收一个输入参数,首先调用函数 c
生成 HMAC 密钥和时间戳,然后利用该密钥对由函数 u
生成的字符串进行 HMAC 签名,最后将签名结果编码为 Base64 格式,并返回包含签名和时间戳的对象。
总结,在使用s(l)进行加密时,通过e.apply来调用c或者u函数。
【4】结果演示
由上所见,3个加密参数已经成功获取。创作不易,请点个赞,谢谢~