不是天亮了我们才醒,而是我们醒了才是天亮 -- 匿名
🏷 前言
特别声明,本文所提供的逆向思路及代码仅供学习参考使用,请勿使用 爬虫脚本 对网站进行 高频率 以及 高并发 数据抓取操作,若对网站造成损失的,后果自负!!!
🔖 网址
aHR0cHM6Ly93d3cueWlqaXVwaS5jb20vIy9pbmRleC9saXN0P3NlYXJjaEtleT0lRTUlQkElQjclRTUlQjglODglRTUlODIlODUlRTklQTUlQUUlRTYlOTYlOTk=
📋 正文
开局遇阻,竟遭遇 debugger反调试
hook 起手,一招秒了,有什么好说的
点击 翻页 ,查看 XHR 接口请求
其它都正常,就是 请求头 有点异常
不请不楚,开始习惯性搜索 关键字 ,皆一无所获,突发奇想,既然与请求头有关,可以搜一下 headers 这个关键字
哦?侥幸搜到,下面的比较可疑
打个断点试试
对比一下请求的值
看来这个 W 是 X-Sign 的赋值位置,那其他的呢,在后面呢
先看 W 吧,它的生成位置往上翻可以找到
先看参数,y 貌似是 时间戳
那 g 呢,嗯。。。应该是几个值拼接而成
暂时把参数固定下来,先从 加密 方法入手
先将这些代码无脑扣下来
运行之后,看报错
找到 未定义 的值的位置,然后断点调试
看样子,是 wasm 文件里面封装的方法啊
这里我就不讲 wasm 是什么了,感兴趣得可以去搜教程学习,这里我们要找到 r 的初始定义位置,从而顺藤摸瓜找到调用 wasm 文件的代码位置,可以搜关键字 r = ,找到一个可疑点
知道 wasm 的同学应该都知道 e.exports 和我们模块的调用可能有着很大的联系,但是这个 e 是一个 形参 ,所以我们需要打断点来确认调用这个 O 函数的是谁
但尴尬的是,它没断在这里,但我的直觉告诉我,这里一定是,没办法,只能用 关键字搜索 的方法大致确定哪些地方调用了 O 函数了
又看到了与 wasm 有很大关联的关键字,再往上看看,发现了 wasm 源码下载的地址
有了 wasm 的源码,根据我们对 wasm 调用的逻辑可知,它还有一个需要传入的 模块对象
我开始觉得疑似是的地方
不管怎么样,试一试也不会怎么样,我在这里假设它就是,然后编写代码,先用 JS 中处理文件的库 fs 生成 wasm_code
因为 WebAssembly.instantiate 是一个 异步 方法,所以最好把 y 函数里面的代码放入其中
再定义 r
再定义 importObject
打印输出,便于查看
运行之后,根据 报错 信息补全代码
在文件中找到 A ,补全 A
找到 l ,并补全
找到 _ ,并补全
以此类推,直到不报错为止
方法 解决,现在到 参数,y 是时间戳,g 如下
生成位置
其实一眼就看的出来,就是这几个值用空格拼接起来,方法都不用逆向,重要的是里面的值
v:固定值,“POST”t["url"]:接口,固定值,“/v58/Product/List”p:时间戳s
m
h是翻页信息
- 而加密方法和前面的
加密方法的逆向类似,这里不做赘述
至此,所有核心的加密逻辑介绍清楚,请求结果如下
更多有趣内容,可关注wx公众号“小恰学逆向”,分享一些爬虫JS逆向技术以及有趣的工具。(●´ω`●)ゞ