微信小程序 wxapkg 解密、解包与源码重建工具
纯 .NET 实现的微信小程序 wxapkg 包处理工具,支持 解密 → 解包 → 源码重建 全流程。无需 Node.js 或其他外部依赖。
- 一键处理 —
auto命令自动检测加密、解密、解包、重建 - V1MMWX 解密 — 支持微信加密格式,通过
wxid派生密钥解密 - JS 模块拆分 — 从
app-service.js中还原独立模块文件 - WXML 反编译 — 从
page-frame.html/page-frame.js还原.wxml模板 - WXSS 重建 — 从样式操作码还原
.wxss样式表 - Webpack Chunk 解析 — 拆分 webpack 打包的代码块
- Vue SFC 组装 — 将 template/script/style 重组为
.vue单文件组件 - JS 格式化 — 内置代码格式化器,提升可读性
- 安全回退 — 重建失败时保留原始编译产物,不生成虚假占位文件
- 跨平台 — 支持 Windows、Linux、macOS
- .NET 10 SDK 或更高版本
git clone https://github.com/Last-emo-boy/WxAppUnpacker.git
cd WxAppUnpacker
dotnet build -c Release# Windows
dotnet publish -c Release -r win-x64 --self-contained false -p:PublishSingleFile=true -o ./publish
# Linux
dotnet publish -c Release -r linux-x64 --self-contained false -p:PublishSingleFile=true -o ./publish
# macOS
dotnet publish -c Release -r osx-x64 --self-contained false -p:PublishSingleFile=true -o ./publish自动检测加密 → 解密 → 解包 → 源码重建:
WxAppUnpacker auto __APP__.wxapkg -o ./output --wxid wx1234567890abcd将加密的 wxapkg 解密为明文包:
WxAppUnpacker decrypt __APP__.wxapkg decrypted.wxapkg --wxid wx1234567890abcd对已解密的 wxapkg 进行解包和源码重建:
WxAppUnpacker unpack decrypted.wxapkg -o ./output使用
dotnet run时在命令前加--,例如dotnet run -- auto ...
| 命令 | 说明 |
|---|---|
auto <input> [options] |
自动检测加密、解密、解包并重建 |
decrypt <input> <output> |
仅解密加密的 wxapkg |
unpack <input> [options] |
解包已解密的 wxapkg 并重建源码 |
| 选项 | 说明 |
|---|---|
-o, --output <dir> |
指定输出目录 |
--wxid <wxid> |
小程序 wxid,用于解密 |
-k, --keep |
重建成功后仍保留原始编译产物 |
-v, --verbose |
显示详细错误信息 |
-h, --help |
显示帮助信息 |
重建成功后输出目录为标准小程序源码结构:
output/
├── app.json
├── app.js
├── app.wxss
├── project.config.json
├── sitemap.json
├── pages/
│ └── index/
│ ├── index.js
│ ├── index.wxml
│ ├── index.wxss
│ └── index.json
├── components/
│ └── my-component/
│ ├── index.js
│ ├── index.wxml
│ ├── index.wxss
│ └── index.json
└── static/
└── ...
每个重建阶段会报告:创建的文件数、警告、失败项,以及保留的原始产物。
- 从
app-service.js拆分define()/definePlugin()注册的模块 - 支持 webpack chunk 打包格式的解析与拆分
- 内置 JS 格式化器,无需外部工具即可提升可读性
- 从
page-frame.html/page-frame.js的虚拟 DOM 操作数组还原模板 - 支持条件渲染 (
wx:if)、列表渲染 (wx:for)、模板引用等
- 从
setCssToHead()样式操作和共享样式引用中还原 - 支持页面级和组件级样式重建
- 从
app-config.json还原app.json - 自动将运行时路径还原为源码路径
- 生成页面和组件的 JSON 配置
- 将分散的 template / script / style 重新组装为
.vue单文件组件 - 清理微信特有属性
- 高度混淆或历史版本的包可能无法完全重建
unpack仅接受已解密的输入,加密包请先用auto或decrypt处理auto处理加密包时需要wxid,可通过--wxid传入,或自动从Applet/<wxid>/...路径推断- 还原的
.js文件仍是编译后的模块代码(webpack / uni-app 输出),不是原始.vue或预编译源码 - WXSS / WXML 重建优先保证可追溯性,与 Node.js 参考工具的输出可能存在格式差异
├── Program.cs # CLI 入口与解密逻辑
├── WxAppUnpacker.csproj # 项目文件
├── Core/
│ ├── WxapkgUnpacker.cs # wxapkg 二进制格式解析与文件提取
│ ├── ReconstructionPipeline.cs # 重建流水线编排
│ ├── ReconstructionModels.cs # 重建结果数据模型
│ ├── JavaScriptBundleReconstructor.cs # JS 模块拆分
│ ├── JavaScriptFormatter.cs # JS 代码格式化
│ ├── JavaScriptCompatibilityPatcher.cs # JS 兼容性补丁
│ ├── JavaScriptCompatibilityRewriter.cs # JS 兼容性重写阶段
│ ├── JavaScriptParsing.cs # 脚本提取工具
│ ├── JavaScriptSyntaxScanner.cs # 语法扫描
│ ├── LooseJavaScriptValueParser.cs # 轻量级 JS 值解析器
│ ├── WebpackChunkDecompiler.cs # Webpack chunk 拆分
│ ├── WxmlDecompiler.cs # WXML 模板反编译
│ ├── WxssProcessor.cs # WXSS 样式重建
│ └── VueSfcAssembler.cs # Vue SFC 组装
├── ref/ # JS 参考实现
├── tests/ # 单元测试
└── .github/workflows/ # CI/CD 配置
dotnet test| 包 | 用途 |
|---|---|
| Jint | JavaScript 引擎,用于运行时求值 |
微信小程序的 wxid 通常可以从以下位置找到:
- 微信 PC 客户端的小程序缓存目录:
%USERPROFILE%\Documents\WeChat Files\Applet\<wxid>\ - 微信开发者工具的项目配置
- 小程序的
project.config.json中的appid字段
本项目基于 MIT 许可证 开源。
本工具仅供学习研究和安全分析使用。请遵守相关法律法规,不要将本工具用于侵犯他人知识产权或其他非法用途。使用者应自行承担使用本工具的一切风险和责任。