js/小程序逆向 3 / 7
仅供学习研究 。请勿用于非法用途,本人将不承担任何法律责任。
前言
之前写过一篇 PDD系列 anti-content 小程序加密逻辑分析
这小程序有个坑,每隔几个小时都需要请求个类似于认证的接口,不然请求详情页接口会被风控
经过长时间的尝试测试,最终确定是通过websocket
发送认证信息的,下面开始分析
websocket
小程序反编译出来的代码没有 websocket
相关的,无奈就只有去分析调试 pc
端的 js
了,好在加密逻辑都差不多
点击打开链接,这里有 wss
连接,收发的消息都是 arraybuffer
二进制流数据,主要分析下,二进制的转码逻辑
发送消息编码逻辑分析
点到 Initiator
窗口跳转到第一个调用栈,通过全局搜索关键词的方式也是可以的
点进来之后就看到有 websocket
连接的相关代码,下面的 e.sendSession()
应该就是发送消息的,先下个端点,刷新页面
刷新页面后,就成功断了下来,跟进去,就来到了 sendSession
函数,最后调用了 this.send
函数,这里有几个参数 this.appInfo
不知道是啥,应该是前面初始化好的,后面再去分析。
ur, Nn, Bn
这几个都是固定的,代码抠出来就可以用
来到了 send
函数,跳转到 41225
行,这里判断了当前环境是否是 微信小程序
。
处理方式不同,都是发送了 a
数据,a
是来自 a = qn(e)
, e
是我们传递进来的 json
通过 qn
函数转成 ArrayBuffer
二进制数据。以上就是 send
逻辑,看起来还是比较简单,但是扣代码的时候就比较头疼了,依赖比较多了,自己组合,还是比较消耗时间的。
这里就是 appInfo
初始化的逻辑了,代码没有混淆,还是比较容易阅读的
接受消息解码逻辑分析
经过分析调试,解码逻辑在这里,先在 41082
行下断点,刷新页面。
断下来之后,往下走,遇到函数就跳进去
最后会来到这个函数,调用 Mr.decode(t.data.body)
函数执行解码逻辑,可以看到 n
就是最后的结果了
最后经过长时间调试分析,也是成功把 JS
代码扣了出来
使用 python
写个测试脚本,可以正常调用