Skip to content

Last-emo-boy/WxAppUnpacker

Repository files navigation

WxAppUnpacker

微信小程序 wxapkg 解密、解包与源码重建工具

.NET 10 MIT License Cross-platform


纯 .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

环境要求

安装

从源码构建

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/
    └── ...

每个重建阶段会报告:创建的文件数、警告、失败项,以及保留的原始产物。

重建能力

JavaScript 模块

  • app-service.js 拆分 define() / definePlugin() 注册的模块
  • 支持 webpack chunk 打包格式的解析与拆分
  • 内置 JS 格式化器,无需外部工具即可提升可读性

WXML 模板

  • page-frame.html / page-frame.js 的虚拟 DOM 操作数组还原模板
  • 支持条件渲染 (wx:if)、列表渲染 (wx:for)、模板引用等

WXSS 样式

  • setCssToHead() 样式操作和共享样式引用中还原
  • 支持页面级和组件级样式重建

配置文件

  • app-config.json 还原 app.json
  • 自动将运行时路径还原为源码路径
  • 生成页面和组件的 JSON 配置

Vue SFC

  • 将分散的 template / script / style 重新组装为 .vue 单文件组件
  • 清理微信特有属性

已知限制

  • 高度混淆或历史版本的包可能无法完全重建
  • unpack 仅接受已解密的输入,加密包请先用 autodecrypt 处理
  • 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

微信小程序的 wxid 通常可以从以下位置找到:

  1. 微信 PC 客户端的小程序缓存目录:%USERPROFILE%\Documents\WeChat Files\Applet\<wxid>\
  2. 微信开发者工具的项目配置
  3. 小程序的 project.config.json 中的 appid 字段

许可证

本项目基于 MIT 许可证 开源。

免责声明

本工具仅供学习研究和安全分析使用。请遵守相关法律法规,不要将本工具用于侵犯他人知识产权或其他非法用途。使用者应自行承担使用本工具的一切风险和责任。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages