微信小程序 .wxapkg 解包工具,支持 PC 微信的 V1MMWX 加密格式自动解密与解包。
Windows微信版本 4.1.7.33 测试通过。
- 自动识别并解密 V1MMWX 加密格式(PC 微信专用加密)
- 支持未加密的标准 wxapkg 格式(直接解包)
- 支持主包(
__APP__.wxapkg)与分包(_xxx_.wxapkg)批量处理 - 提供 appid 验证工具,快速确认 appid 是否正确
需要 uv:
# 克隆项目后安装依赖
uv sync或手动安装:
pip install pycryptodome# 解包整个目录(含主包 + 分包)
uv run unpack.py 162/ --appid wx551b0a88c0e39aeb
# 指定输出目录
uv run unpack.py 162/ --appid wx551b0a88c0e39aeb --out ./output
# 解包单个文件
uv run unpack.py 162/__APP__.wxapkg --appid wx551b0a88c0e39aebappid 格式为 wx + 16 位十六进制字符,例如 wx551b0a88c0e39aeb。
PC 微信:wxapkg 文件存放在以 appid 命名的目录下,直接查看路径即可:
C:\Users\{用户名}\Documents\WeChat Files\Applet\{AppID}\{version}\
Android 微信(需 root):
/data/data/com.tencent.mm/MicroMsg/{hash}/appbrand/pkg/
验证 appid 是否正确:
uv run find_appid.py verify wx551b0a88c0e39aeb 162/__APP__.wxapkg
# [OK] appid 'wx551b0a88c0e39aeb' 验证成功!可以用于解密搜索本机微信存储路径(自动查找 appid):
uv run find_appid.py search| 文件 | 功能 |
|---|---|
unpack.py |
主入口,一键完成解密 + 解包 |
decrypt_wxapkg.py |
V1MMWX 加密格式解密模块 |
unpack_wxapkg.py |
wxapkg 二进制格式解包模块 |
find_appid.py |
appid 查找与验证工具 |
PC 微信对 wxapkg 文件采用混合加密,文件以 V1MMWX 为头部标识:
[0-5] "V1MMWX" 魔数头(6字节)
[6-1029] AES-256-CBC 加密数据(1024字节),解密后取前1023字节
[1030-end] XOR 加密数据,密钥为 ord(appid[-2])
AES 密钥派生:
key = PBKDF2(password=appid, salt="saltiest", iterations=1000, keylen=32, hash=SHA1)
IV = "the iv: 16 bytes"
解密后得到标准 wxapkg 二进制,有两种变体:
旧版(V1,magic = BE BA 01 00):
[0-3] BE BA 01 00 魔数
[4-7] InfoLength 文件表字节数(大端 uint32)
[8-11] DataLength 数据区字节数(大端 uint32)
[12..12+InfoLength] 文件表(每条: 4字节名长 + 文件名 + 4字节相对偏移 + 4字节大小)
[12+InfoLength..] 文件数据区
新版(V2,magic = BE 00 00 00...):
[0] 0xBE 魔数首字节
[1-15] 元数据
[16-17] FileCount 文件数量(大端 uint16)
[18..] 文件表(每条: 4字节名长 + 文件名 + 4字节绝对偏移 + 4字节大小)
注意:V2 中偏移为绝对偏移,V1 中为相对于数据区的偏移
unpacked/
├── __APP__/ ← 主包
│ ├── app-config.json
│ ├── app-service.js ← 业务逻辑(混淆JS)
│ ├── app-wxss.js ← 样式
│ ├── pages/
│ ├── component/
│ └── ...
└── _yummy_/ ← 分包
└── yummy/
├── pages/
└── ...
解包后的 JS 文件仍为混淆代码。如需进一步反混淆,可尝试 js-beautify 等工具。
本工具仅供学习与安全研究使用,请勿用于侵犯他人知识产权或违反微信平台相关协议。