背景
时间:2023/10/21
微信版本:V 3.9.7.29
微信小程序:拆弹猫 V1.9.3
系统:windows 11
工具:https://github.com/Rainsheep/wechatMiniAppReverse
成功:成功获取主包代码(仅需主包,没有测试子包)
反编译步骤
电脑端提取包
电脑端微信打开设置 → 文件管理,找到文件缓存路径 下的 Applet 目录
根据时间找到需要解包的 wxapkg
找到文件夹/{数字}/wxapkg 文件 (这里为 WITHOUT_MULTI_PLUGINCODE.wxapkg)
解密 wxapkg 包
下载解密工具,进入 wechatMiniAppReverse/1.first,执行以下命令
pc_wxapkg_decrypt.exe -wxid 微信小程序id -in 要解密的wxapkg路径 -out 解密后的路径
- 小程序 id 为主包所在文件夹名字,上述的 wx8c95d5db0fff0bf1
- pc_wxapkg_decrypt.exe -h 可以获得帮助
- 界面完成会得到 dec.wxapkg 文件,为解密后的文件
原理
PC 端微信把 wxapkg 给加密,加密后的文件的起始为 V1MMWX。加密方法为:
- 首先 pbkdf2 生成 AES 的 key。利用微信小程序 id 字符串为 pass,salt 为 saltiest 迭代次数为 1000。调用 pbkdf2 生成一个 32 位的 key
- 取原始的 wxapkg 的包得前 1023 个字节通过 AES 通过 1 生成的 key 和 iv(the iv: 16 bytes), 进行加密
- 接着利用微信小程序 id 字符串的倒数第 2 个字符为 xor key,依次异或 1023 字节后的所有数据,如果微信小程序 id 小于 2 位,则 xor key 为 0x66
- 把 AES 加密后的数据(1024字节)和 xor 后的数据一起写入文件,并在文件头部添加 V1MMWX 标识
解包
进入 wechatMiniAppReverse/2.second/nodejs,先将 node_modules.zip 解压。
输入以下命令进行解包
node.exe .\wuWxapkg.js 解密后wxapkg的路径&exit
解包时遇到报错 Error: Cannot find module ‘cheerio’
安装包即可 npm install cheerio
,缺啥安啥