0


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

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

背景介绍

某小程序渗透测试项目,测试时发现请求包内容进行了加密

分析过程

1.获取wxapkg

小程序文件目录:

使用网易Mumu模拟器,开启root权限,安装手机微信并访问指定小程序,然后打开RE文件管理器,在

data/data/com.tencent.mm/MicroMsg

会生成一个md5加密命名的文件夹,在该文件夹下的

appbrand/pkg

目录下找到

.wxapkg

后缀结尾的文件,其中只有几MB大小的为刚刚打开的小程序的文件。然后复制到

共享文件夹

到就可以在本地进行反编译了。

2.反编译wxapkg

工具名称:wxappUnpacker

链接: https://pan.baidu.com/s/12WPychwfjMfzgSgIi9aUGA?pwd=fpni 提取码: fpni

安装依赖

sudonpminstall esprima -g
sudonpminstall css-tree -g
sudonpminstall cssbeautify -g
sudonpminstall vm2 -g
sudonpminstall --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

即可


本文转载自: https://blog.csdn.net/weixin_42575797/article/details/129547044
版权归原作者 Gh0stX 所有, 如有侵权,请联系我们删除。

“微信小程序前端加解密逆向分析”的评论:

还没有评论