兄弟们等我做好我会发出来的,现在还有点小问题,点赞收藏不迷路
一、环境准备
1.1 必需环境
| 组件 | 版本要求 | 说明 |
|---|---|---|
| Python | 3.9 ~ 3.13 | 需含 tkinter(官方安装包默认包含) |
| Node.js | 任意版本 | 小程序反编译依赖,工具会自动探测路径 |
| pip | 随 Python 安装 | Python 依赖包管理器 |
1.2 Python 依赖包
打开终端执行以下命令安装全部依赖:
pip install pycryptodome requests beautifulsoup4 lxml matplotlib jsbeautifier各包用途说明:
| 包名 | 用途 | 哪个功能需要 |
|---|---|---|
| pycryptodome | wxapkg 解密 | 小程序反编译 |
| requests | HTTP 请求 | 网页反编译 |
| beautifulsoup4 | HTML 解析 | 网页反编译 |
| lxml | HTML 解析后端 | 网页反编译 |
| matplotlib | 雷达图绘制 | 全部功能(质量评估) |
| jsbeautifier | JS 代码美化 | 网页反编译、源码恢复 |
1.3 可选工具
| 工具 | 用途 | 获取方式 |
|---|---|---|
| jadx | APK/JAR/CLASS 反编译 | GitHub Releases,需 JRE 11+ |
| pycdc | Python 3.10+ 字节码反编译 | GitHub(需自行编译) |
| ilspycmd | .NET DLL/EXE 反编译 | dotnet tool install ilspycmd -g |
| 微信开发者工具 | 预览反编译后的小程序 | 官方下载 |
二、启动方式
方式一:双击启动(推荐)
双击项目目录中的启动.bat文件。
启动脚本会自动:
- 搜索系统中带 tkinter 的 Python 解释器(Python 3.9 ~ 3.13、miniconda3、anaconda3)
- 找到后自动启动程序
- 若未找到,回退到系统默认 python 命令
方式二:命令行启动
cd 反编译工具目录 python wxapp_decompiler.py启动后的界面
- 窗口标题:反编译工具套件 — 小程序 / 网页 / 源码恢复
- 窗口尺寸:960×720(最小 880×620)
- 三个标签页:小程序反编译 | 网页反编译 | 源码恢复(多格式)
- 小程序反编译和源码恢复标签页在启动时会自动执行环境自检
三、功能一:小程序反编译
3.1 获取 wxapkg 文件
wxapkg 文件是微信小程序的加密打包文件,存放位置:
新版微信(4.x)路径:
C:\Users\<用户名>\AppData\Roaming\Tencent\xwechat\radium\users\<hash>\applet\packages\旧版微信(3.x)路径:
C:\Users\<用户名>\Documents\WeChat Files\Applet\提示:先在微信中打开过的小程序才会生成缓存文件。主包通常命名为__APP__.wxapkg。
3.2 操作步骤
步骤 1:选择文件
有两种方式选择 wxapkg 文件:
方式 A:手动浏览
- 点击「浏览…」按钮
- 在文件对话框中选择
.wxapkg文件
方式 B:扫描缓存(推荐)
- 点击「扫描缓存」按钮
- 工具自动扫描微信缓存目录
- 结果列表显示 6 列信息:AppID、文件名、类型、加密状态、大小、修改时间
- 绿色高亮行为推荐的主包(
__APP__.wxapkg),优先反编译主包 - 双击列表中的任意行即可自动填入文件路径
- 智能选包:若选择了分包但同目录存在主包
__APP__.wxapkg,工具会自动切换到主包
步骤 2:开始反编译
- 确认文件路径正确
- 点击「▶ 开始反编译」按钮
- 观察日志区域的实时输出
步骤 3:等待反编译完成
反编译共 9 个步骤,全程自动执行:
| 步骤 | 名称 | 说明 |
|---|---|---|
| [1/9] | 检测加密状态 | 读取文件头判断是否加密(V1MMWX = 已加密) |
| [2/9] | 解密 | 若已加密,调用解密脚本(需输入 AppID) |
| [3/9] | 反编译 | 调用 Node.js 执行 wuWxapkg.js,保留中间文件 |
| [4/9] | 后处理 | 修复 app.json(分包、非法字段、iconData、pagePath 点号等) |
| [5/9] | WXML 恢复 | 从 $gwx 函数还原真实页面模板(删除占位符后重新生成) |
| [6/9] | 深度校验 | 补全缺失的页面四件套(.js/.wxml/.wxss/.json)、组件、图标 |
| [7/9] | 结构规范化 | 确保每页独立文件夹、扁平文件移入目录、清理空目录 |
| [7.5] | 清理中间文件 | 删除 page-frame.html 等中间文件 |
| [8/9] | 提取名称 | 从配置文件提取小程序名称作为输出目录名 |
| [9/9] | 整理输出 | 复制到桌面,以小程序名称命名 |
步骤 4:查看结果
反编译完成后:
- 自动弹出质量评估雷达图和完成提示框
- 点击「打开输出目录」查看反编译结果
- 点击「用开发者工具打开」直接调用微信开发者工具预览
3.3 输出目录结构
反编译后的标准项目结构:
小程序名称/ ├── app.js # 小程序入口 ├── app.json # 全局配置 ├── app.wxss # 全局样式 ├── project.config.json # 项目配置 ├── sitemap.json # 搜索优化配置 ├── pages/ # 页面目录 │ ├── index/ │ │ ├── index.js # 页面逻辑 │ │ ├── index.wxml # 页面模板 │ │ ├── index.wxss # 页面样式 │ │ └── index.json # 页面配置 │ ├── about/ │ │ ├── about.js │ │ ├── about.wxml │ │ ├── about.wxss │ │ └── about.json │ └── ... ├── components/ # 自定义组件 │ └── ... ├── images/ # 图片资源 │ └── ... └── tabBar/ # TabBar 图标 └── ...3.4 使用微信开发者工具预览
- 打开微信开发者工具
- 选择「导入项目」
- 项目目录选择反编译输出目录
- AppID 填写反编译日志中显示的 AppID(或使用测试号)
- 点击确定即可预览
四、功能二:网页反编译
4.1 操作步骤
步骤 1:填写抓取设置
| 设置项 | 说明 | 示例 |
|---|---|---|
| 起始网址 | 要抓取的网站入口 URL | https://example.com |
| 深度 | 从起始页出发的爬取层数(0-10) | 2(默认) |
| 仅同域名 | 勾选后只抓取同域名下的页面 | 勾选(默认) |
| 输出目录 | 抓取结果的保存位置 | 留空则自动设为桌面 |
深度说明:深度 0 = 只抓首页;深度 1 = 首页 + 首页链接的页面;深度 2 = 再往下一层。
步骤 2:开始抓取
- 确认设置无误
- 点击「▶ 开始抓取」按钮
- 若输出目录非空,会弹出确认对话框
- 观察日志区域的实时输出
步骤 3:等待抓取完成
抓取流程自动执行:
- BFS 爬取:广度优先遍历页面(最大 800 页)
- 资源下载:自动下载 HTML 引用的所有 CSS、JS、图片、字体、媒体文件
- 懒加载支持:识别>网站_example.com/ ├── index.html # 首页 ├── favicon.ico # 站点图标 ├── about/ │ └── index.html # 子页面 ├── css/ # 样式文件 │ ├── style.css │ └── ... ├── js/ # 脚本文件 │ ├── main.js │ └── ... ├── images/ # 图片资源 │ ├── logo.png │ └── ... ├── fonts/ # 字体文件 │ └── ... └── media/ # 音视频 └── ...
4.3 本地预览
直接用浏览器打开输出目录中的
index.html即可预览。所有资源引用已改为本地相对路径,无需网络即可访问。五、总结与建议
反编译是一项强大但需谨慎使用的技术。在着手反编译前,建议:
- 明确目的与合法性:确保反编译行为符合相关法律法规和软件许可协议。
- 选择合适的工具:根据目标文件类型和具体需求选择最合适的反编译工具。
- 结合多种分析手段:反编译结果应结合动态调试、网络抓包、内存分析等其他逆向技术进行综合判断。
- 注重结果的可读性优化:对反编译得到的代码进行重命名、结构重构和注释补充,提高分析效率。
无论是为了技术学习、安全研究还是商业合规,理解反编译的用户需求都是有效运用这项技术的第一步。