微信小程序前端加解密逆向分析

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加密算法,所以我们可以在源代码中直接搜索关键词即可,如aesdesencryptdecryptenc.Utf8.parse(等。

点击左上角的搜索按钮,输入encrypt,逐行分析,定位到以下代码片段,很明显此处的三段字符串分别代表了AES加密算法keyiv,但是我们并不知道用的加密算法中使用的paddingmode等参数

在这里插入图片描述

在这段代码中,变量f加密密钥(key),变量m是初始化向量(iv)。可以看到,变量f是通过对l.appData.securityChoice进行奇偶性判断后选择不同的字符串进行赋值,然后将其转换为UTF-8格式的字节数组,也就是说key为c29a3a629280e686d37a3a629281f797其中的一个。而变量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,选择对应的ModePaddingKeyivEncOutput等信息

然后将密文信息粘贴到程序中点击解密,如果能看到解密后的内容话证明配置成功了

接下来,点击生成当前方案JS脚本,此时剪切板中已经复制好了生成的代码

2.BurpCrypto插件

项目地址:https://github.com/whwlsfb/BurpCrypto

将生成的JS代码粘贴到BurpCrypto插件的Exec Js模块中,并按照如下方式添加加解密的处理器

3.调用加解密

在请求包中,选中加密字段,右键选择BurpCrypto插件中添加的处理器AES_Decrypt,即可完成解密

同样的,需要进行加密时选择AES_Encrypt即可



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。