三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

反编译自动化脚本(用于代码恢复与重构,网页的学习与借鉴)

反编译自动化脚本(用于代码恢复与重构,网页的学习与借鉴)

兄弟们等我做好我会发出来的,现在还有点小问题,点赞收藏不迷路

一、环境准备

1.1 必需环境

组件版本要求说明
Python3.9 ~ 3.13需含 tkinter(官方安装包默认包含)
Node.js任意版本小程序反编译依赖,工具会自动探测路径
pip随 Python 安装Python 依赖包管理器

1.2 Python 依赖包

打开终端执行以下命令安装全部依赖:

pip install pycryptodome requests beautifulsoup4 lxml matplotlib jsbeautifier

各包用途说明:

包名用途哪个功能需要
pycryptodomewxapkg 解密小程序反编译
requestsHTTP 请求网页反编译
beautifulsoup4HTML 解析网页反编译
lxmlHTML 解析后端网页反编译
matplotlib雷达图绘制全部功能(质量评估)
jsbeautifierJS 代码美化网页反编译、源码恢复

1.3 可选工具

工具用途获取方式
jadxAPK/JAR/CLASS 反编译GitHub Releases,需 JRE 11+
pycdcPython 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 使用微信开发者工具预览

  1. 打开微信开发者工具
  2. 选择「导入项目」
  3. 项目目录选择反编译输出目录
  4. AppID 填写反编译日志中显示的 AppID(或使用测试号)
  5. 点击确定即可预览

四、功能二:网页反编译

4.1 操作步骤

步骤 1:填写抓取设置
设置项说明示例
起始网址要抓取的网站入口 URLhttps://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即可预览。所有资源引用已改为本地相对路径,无需网络即可访问。

    五、总结与建议

    反编译是一项强大但需谨慎使用的技术。在着手反编译前,建议:

    1. 明确目的与合法性:确保反编译行为符合相关法律法规和软件许可协议。
    2. 选择合适的工具:根据目标文件类型和具体需求选择最合适的反编译工具。
    3. 结合多种分析手段:反编译结果应结合动态调试、网络抓包、内存分析等其他逆向技术进行综合判断。
    4. 注重结果的可读性优化:对反编译得到的代码进行重命名、结构重构和注释补充,提高分析效率。

    无论是为了技术学习、安全研究还是商业合规,理解反编译的用户需求都是有效运用这项技术的第一步。

← 返回列表