免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。
1
Start
web的加解密逆向想必各位老铁都已经非常熟练了,如果还有不熟悉的可以看看斯叔之前的文章【RPC专题】WEB加解密逆向通杀解决方案,我不允许人还搞不定WEB加解密!!!。今天来聊聊小程序加解密逆向过程中常常会碰到的难题。
首当其冲的是动态密钥(key)的问题。在Web环境中,我们通常可以通过替换本地JS文件来固定动态密钥,但在小程序中该如何实现呢?今天,斯叔将介绍一种通过重新打包小程序来固定动态密钥的方法。
2
Action
首先我们介绍一下前置情况,某项目中的某小程序请求包都是经过了加密,想要正常测试的话,需要逆向请求包中的加解密方式。密文的特征是有两个参数{"a":"xxx","b":"xxx"},a和b传递的内容都是密文,a处的内容是对请求参数的对称方式加密,b处是用非对称的方式对动态密钥进行加密。由于没有私钥的原因,我们无法对应解开a处密文所使用的动态密钥,通常情况下,小程序里碰到动态密钥,不是祈祷私钥记录在小程序源码里面,就是只能动态调试每个数据包,获取每个数据包的a处密文的密钥。那重打包的法子是怎么做的呢?
最开始的阶段我们需要借助devtools定位到动态密钥生成点(这一步骤就不过多介绍了哈不是重点呢),然后用解包工具将小程序的wxapkg文件解包
紧接着进行反编译(用什么工具都无所谓,只要能满足解包和反编译的需求就好)
此时输出文件夹下就会生成一个解包的文件和一个反编译后的文件夹
修改主包文件夹下的app-service.js文件中需要修改的内容,将之前定位到动态密钥生成点的内容修改成固定值(之前的逻辑是将动态密钥生成好之后赋值给变量g,这里直接将变量g给写死,也就避免了密钥一直变化带来的麻烦了)
使用KillWxapkg重新打包
KillWxapkg -repack="C:xxx-[主包]" -out="C:__APP__.wxapkg" -watch
此时小程序主包文件已经修改,然后打开微信设置,查看文件管理,打开文件夹。
进入Msg文件
退出微信,删除Applet.db,他里面存放了小程序的一些信息,不删除有可能提示包损坏
然后hook小程序的F12,打开重新打包的小程序,查看是否成功重写g的值
KillWxapkg -hook
固定了g的值就相当于固定了{"a":"xxx","b":"xxx"}中a的值的加密密钥,后面解密就不需要每次调试看当前动态密钥生成的是什么了。不过经过实验,这个方式每次只能打开一次重新打包的小程序,如果关闭了就需要再次关闭微信,删除Applet.db,生成__APP__.wxapkg这个流程。
3
End
如果你也对网络安全感兴趣,不妨添加主页斯叔微信,大家一起互相交流学习。如果你愿意倾诉当前的学习苦恼,斯叔也会免费给铁汁做一个符合现状的职业规划。
文章编辑不易,麻烦各位老铁动动发财的小手转发转发,点点赞,点点广告~~
原文始发于微信公众号(明暗安全):从攻击者视角看动态密钥Key:如何绕过小程序的“铜墙铁壁”?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论