【爬虫JS逆向之旅】某久批的请求头参数x-sign逆向(wasm篇)

6 阅读3分钟

不是天亮了我们才醒,而是我们醒了才是天亮 -- 匿名


🏷 前言

特别声明,本文所提供的逆向思路及代码仅供学习参考使用,请勿使用 爬虫脚本 对网站进行 高频率 以及 高并发 数据抓取操作,若对网站造成损失的,后果自负!!!

🔖 网址

aHR0cHM6Ly93d3cueWlqaXVwaS5jb20vIy9pbmRleC9saXN0P3NlYXJjaEtleT0lRTUlQkElQjclRTUlQjglODglRTUlODIlODUlRTklQTUlQUUlRTYlOTYlOTk=

📋 正文

开局遇阻,竟遭遇 debugger反调试

hook 起手,一招秒了,有什么好说的

点击 翻页 ,查看 XHR 接口请求

其它都正常,就是 请求头 有点异常

不请不楚,开始习惯性搜索 关键字 ,皆一无所获,突发奇想,既然与请求头有关,可以搜一下 headers 这个关键字

哦?侥幸搜到,下面的比较可疑

打个断点试试

对比一下请求的值

看来这个 WX-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逆向技术以及有趣的工具。(●´ω`●)ゞ