背景

时间:2023/10/21

微信版本:V 3.9.7.29

微信小程序:拆弹猫 V1.9.3

系统:windows 11

工具:https://github.com/Rainsheep/wechatMiniAppReverse

成功:成功获取主包代码(仅需主包,没有测试子包)

反编译步骤

电脑端提取包

电脑端微信打开设置 → 文件管理,找到文件缓存路径 下的 Applet 目录

截图_20231021195023

根据时间找到需要解包的 wxapkg

截图_20231021195138

找到文件夹/{数字}/wxapkg 文件 (这里为 WITHOUT_MULTI_PLUGINCODE.wxapkg)

截图_20231021195244

解密 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。

加密方法为:

  1. 首先 pbkdf2 生成 AES 的 key。利用微信小程序 id 字符串为 pass,salt 为 saltiest 迭代次数为 1000。调用 pbkdf2 生成一个 32 位的 key
  2. 取原始的 wxapkg 的包得前 1023 个字节通过 AES 通过 1 生成的 key 和 iv(the iv: 16 bytes), 进行加密
  3. 接着利用微信小程序 id 字符串的倒数第 2 个字符为 xor key,依次异或 1023 字节后的所有数据,如果微信小程序 id 小于 2 位,则 xor key 为 0x66
  4. 把 AES 加密后的数据(1024字节)和 xor 后的数据一起写入文件,并在文件头部添加 V1MMWX 标识

解包

进入 wechatMiniAppReverse/2.second/nodejs,先将 node_modules.zip 解压。

输入以下命令进行解包

node.exe .\wuWxapkg.js 解密后wxapkg的路径&exit

202207250934944

解包时遇到报错 Error: Cannot find module ‘cheerio’

安装包即可 npm install cheerio,缺啥安啥