JS逆向实战:某小程序加密请求逆向分析

今天来分享一个小程序的加密请求逆向分析。

分析思路

在开始分析之前,先理一下思路。

  1. 首先肯定是要抓包,要先知道发送了哪些请求。
  2. 然后是对小程序进行解包,拿到运行的 JS 文件。
  3. 对 JS 文件进行分析,通过 URL 或者某些关键字查找发包逻辑,分析加密参数生成逻辑。

抓包

小程序抓包我一般喜欢使用 Windows 或者 macOS 的客户端,因为在移动端抓包还是有些困难的,要 root 手机,要安装系统证书,要过掉证书绑定等等,实操起来也比较麻烦。

反观 PC 端,想要安装系统证书和获取权限就比较简单了,几分钟就可以安装好。

下面以 Windows 客户端为例:

Windows 上小程序的宿主进程名字叫:wechatappex.exe,可以使用 Proxifier 将此进程的请求数据转发到抓包软件,可以避免设置系统代理导致其他无用请求的影响。

image-20250316230344288

Proxifier 是一款可以让不支持代理的软件强制使用代理的软件,它的工作原理是通过注入或者使用驱动程序来拦截来自特定应用程序的网络流量,将其重定向到代理软件,达到抓包的目的。

macOS 它也支持,不过 macOS 也可以使用 tun 网卡的方式设置进程规则将特定的进程流量导入代理软件,方法很多,大家按需选用。

image-20250316231254513

设置好以后进行对应的操作就可以抓到数据了。

解包

抓到数据以后,在 Windows 上面可以使用 wxapkg 来自动扫描本地已有的小程序,并且支持上下键选择,一键自动解包并导出小程序。图片来自作者 Github

实际效果如下:

image-20250316231918784

image-20250316232138120

解包完成后,会自动在当前文件夹生成以小程序 id 为名称的一个文件夹,里面就是解包后的小程序所有的文件。

JS 分析

接下来就是根据某些关键字对 JS 文件进行分析了。

image-20250316232624769

查看刚才抓包的请求,以 requestData 为关键字进行搜索,可以找到两个匹配,双击过去看看。

image-20250316233432734

看起来是使用 sm4 加密后转成了 base64,但是具体调用了哪些函数,还不知道,只知道使用了导出函数 sm4base64

AST 分析

上面的图片中可以看到调用了 a 函数传入了一个字面量的参数,不用考虑直接 AST,这种几乎都是字符串加密,调用函数会返回一个字符串。

将 JS 代码拷贝出来,并且使用之前发的 AST 模版代码,开始解混淆。后续思路和文章中的解 OB 混淆的思路几乎一样,就不重复写了,感兴趣的小伙伴可以去看之前解 OB 混淆的那篇文章。

image-20250316234553914

image-20250316234609817

image-20250316234617492

image-20250316234655740

a 来自于 nn 来自于 uu 来自于 ff 返回了一个大数组 e,和 OB 混淆大同小异。

抠出解密函数 a 和大数组,并且一般情况下数组还会有移位解密,别忘了找一下。

image-20250316234833231

就是这里,会先执行 f 函数进行数据元素移位操作后,再执行解密函数。

根据以上函数特征写出 AST 代码:

image-20250316234938578

image-20250316235005341

运行后,整体逻辑就很清楚了,现在就差一个密钥。加密函数一般有两个参数,一个是加密的内容,一个是密钥,看起来 r 这个变量应该是密钥,它来自于 y 函数。我们看一下 y 函数。

image-20250316235346453

看起来是一个字符串被分隔成了几段,然后在运行的时候动态的拼接起来,手动运行试了一下,返回了一个字符串,拿去解密一下试试。

image-20250316235900124

可以解密成功,搞定收工。

总结

这个小程序相对来说比较简单,只有一个 webpack+类似 OB 混淆,使用 AST 可以解除,拿到密钥和加密参数即可重发请求获取想要的信息,并且响应参数没有加密。

提示!本文所有技术分析仅限于技术交流与安全研究目的,严禁用于非法用途,文章如有不当可联系本人删除!

本文章首发于个人博客 LLLibra146’s blog

本文作者:LLLibra146

更多文章请关注公众号 (LLLibra146):LLLibra146

版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!

本文链接
https://blog.d77.xyz/archives/c8d5850c.html