微信小程序前端加解密逆向分析
Gh0stX 2024-06-26 10:33:02 阅读 89
微信小程序前端加解密逆向分析
背景介绍分析过程1.获取wxapkg2.反编译wxapkg3.安装微信开发者工具4.加密代码定位5.验证分析结果
利用过程1.生成加密JS代码2.BurpCrypto插件3.调用加解密
背景介绍
某小程序渗透测试项目,测试时发现请求包内容进行了加密
分析过程
1.获取wxapkg
小程序文件目录:
使用网易Mumu模拟器,开启root权限,安装手机微信并访问指定小程序,然后打开RE文件管理器,在data/data/com.tencent.mm/MicroMsg
会生成一个md5加密命名的文件夹,在该文件夹下的appbrand/pkg
目录下找到.wxapkg
后缀结尾的文件,其中只有几MB大小的为刚刚打开的小程序的文件。然后复制到共享文件夹
到就可以在本地进行反编译了。
2.反编译wxapkg
工具名称:wxappUnpacker
链接: https://pan.baidu.com/s/1TwFp60D4L9PIR53yr3vNng?pwd=8mr9 提取码: 8mr9
安装依赖
sudo npm install esprima -g
sudo npm install css-tree -g
sudo npm install cssbeautify -g
sudo npm install vm2 -g
sudo npm install --save uglify-js
由于部分库已经不支持了,需要修改wuJs.js
文件中的引用,将uglify-es
改为uglify-js
并保存
接下来执行以下命令反编译小程序
node wuWxapkg.js -d '/path/to/xxx.wxapkg'
解包后会在xxx.wxapkg
目录下生成同名的文件,里面为小程序的源代码
3.安装微信开发者工具
https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
下载并安装完成后,打开微信开发者工具,选择以游客模式
访问,然后点击右上角的导入按钮,选择反编译后的文件夹即可
点击左上角关闭模拟器
4.加密代码定位
根据经验判断,请求包中的参数可能使用了AES
或者DES
加密算法,所以我们可以在源代码中直接搜索关键词即可,如aes
、des
、encrypt
、decrypt
、enc.Utf8.parse(
等。
点击左上角的搜索按钮,输入encrypt
,逐行分析,定位到以下代码片段,很明显此处的三段字符串分别代表了AES加密算法的key
和iv
,但是我们并不知道用的加密算法中使用的padding
、mode
等参数
在这段代码中,变量f
是加密密钥(key),变量m
是初始化向量(iv)。可以看到,变量f
是通过对l.appData.securityChoice
进行奇偶性判断后选择不同的字符串进行赋值,然后将其转换为UTF-8格式的字节数组,也就是说key为c29a3a629280e686
和d37a3a629281f797
其中的一个。而变量m
则是直接将一个固定的字符串转换为UTF-8格式的字节数组。最后,这些变量被用于调用一个名为d.encrypt
的加密函数,将参数g
进行加密。
所以,我们就得到以下信息,后面我们会用到
key:c29a3a629280e686 iv:ca3762af61e59520
或者
key:d37a3a629281f797 iv:ca3762af61e59520
接下来我们可以在搜索aes
等关键词,看看有没有新发现
如下图所示,我们成功定位到了aes的加解密方法,并且得到了mode为CBC
、padding为Pkcs7
、字符集为Utf8
、输出类型为hex
5.验证分析结果
在线加解密网站:http://tool.chacuo.net/cryptaes
使用第一对key和iv进行解密,发现无法解密成功
key:c29a3a629280e686 iv:ca3762af61e59520
使用第二对key和iv进行解密,发现解密成功
key:d37a3a629281f797 iv:ca3762af61e59520
利用过程
1.生成加密JS代码
WT-JS_DEBUG是一款功能强大的易语言JScript调试辅助工具。WT-JS_DEBUG包括自带各种加密函数库,可一键生成,是一款JS调试器,JavaScript调试工具。它支持批量加密、批量解密、多次加密等功能,对于开发人员来说,是一款十分实用的JS调试工具。
工具:WT-JS.exe
链接: https://pan.baidu.com/s/1G30R-cbepEg97A1BECqwaw?pwd=fiy4 提取码: fiy4
打开WT-JS.exe
,然后点击CryptoJS
按钮
选择AES,选择对应的Mode
、Padding
、Key
、iv
、Enc
、Output
等信息
然后将密文信息粘贴到程序中点击解密,如果能看到解密后的内容话证明配置成功了
接下来,点击生成当前方案JS脚本,此时剪切板中已经复制好了生成的代码
2.BurpCrypto插件
项目地址:https://github.com/whwlsfb/BurpCrypto
将生成的JS代码粘贴到BurpCrypto
插件的Exec Js
模块中,并按照如下方式添加加解密的处理器
3.调用加解密
在请求包中,选中加密字段,右键选择BurpCrypto插件中添加的处理器AES_Decrypt
,即可完成解密
同样的,需要进行加密时选择AES_Encrypt
即可
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。