开源、自托管的微信小程序 .wxapkg 反编译工具
上传文件,自动解密、解包、反编译和整理代码,完成后直接下载 src/ 工程
See Wxapkg 可以直接在浏览器中反编译 .wxapkg 文件。它会自动识别包类型,在需要时使用 AppID 解密,并完成解包、反编译、排版整理和结果检查。
Important
本项目所称“反编译”是对编译产物的尽力静态恢复,不是提取原始源码。结果可能缺少原变量名、注释、目录结构或运行时生成内容;“反编译结果已生成”也不代表与原工程完全一致或可以直接运行。
- 支持普通包、加密包和常见微信 4.x 结构;加密包需要匹配的 AppID。
- 静态反编译,不通过
eval、Function或 VM 执行包内 JavaScript。 - 自动反编译并整理 JSON、JavaScript、WXML 和 WXSS,无法确认的内容会如实标记。
- 提供实时进度、结果状态、静态质量分、检查提示和技术报告。
- 下载 ZIP 只包含
src/,原始解包依据不会混入交付文件。 - 支持在线使用与单机 Docker Compose 自托管,不依赖外部数据库、缓存或消息队列。
打开 seewxapkg.keepbuild.cn,选择或拖入 .wxapkg 文件即可。代码整理和深度反编译默认开启;加密包还需要填写对应的 AppID。
公开体验站会在处理期间暂存上传内容;正常终态会立即删除原始上传,异常遗留及结果数据最长按 72 小时策略清理。敏感、私有或未获授权的软件包请勿上传,建议在受控环境中自托管处理。
只需要 Docker Engine 与 Docker Compose:
git clone https://github.com/Leslie-SSS/seeWxapkg.git
cd seeWxapkg
docker compose up -d --build启动后可访问:
- Web 界面:http://localhost:3004
- 健康检查:http://localhost:9090/api/health
- API 基地址:
http://localhost:9090/api
默认 Compose 使用本地文件任务仓库、文件队列和独立 Worker,任务数据只保存在配置的本机卷中。这是单机部署方案,不依赖数据库、缓存或消息队列。停止服务时运行:
docker compose downNamed volumes 会保留任务状态与文件,已进入文件队列的普通未完成任务可在下次启动后继续;服务停机期间自动清理不会运行。为避免长期保存凭据,AppID 在一次解密尝试后即销毁,因此此后若进程意外中断,加密任务需要重新提交。如需立即删除所有上传文件、任务记录和产物,可确认不再需要这些数据后运行 docker compose down -v。
- 选择
.wxapkg文件;加密包填写 18 位 AppID(wx+ 16 位小写十六进制字符)。 - 点击“开始反编译”,等待系统自动处理。
- 查看结果提示并下载只含
src/的反编译结果。
在哪里查找 wxapkg 文件?
不同微信版本的目录可能变化,下面仅作为常见位置参考:
- macOS:
~/Library/Containers/com.tencent.xinWeChat/Data/Documents/app_data/radium/users/{一串值}/applet/packages - Windows:
C:\Users\{用户名}\Documents\WeChat Files\Applet\{AppID}
下载包是面向继续阅读和分析的干净工程:
wxapkg-result.zip
└── src/
├── app.json
├── app.js
├── app.wxss
└── ...
reports/ 技术报告通过结果页或任务 API 查询,不会进入下载 ZIP。处理过程中产生的 fallback 临时副本会在合并后立即删除,不长期保留重复源码。
| 结果状态 | 含义 | 建议 |
|---|---|---|
反编译结果已生成(completed) |
核心结果存在且静态检查通过 | 可以继续分析,但不代表与原始源码一致 |
结果已生成,部分内容需检查(partial) |
已生成可下载结果,但部分内容无法完全确认 | 先阅读检查提示和报告 |
反编译未完成(failed) |
核心步骤无法安全完成 | 检查 AppID、文件完整性和错误提示 |
结果评分衡量结构完整度和静态可解析性,不表示原始源码复现程度,也不保证运行正确性。
| 包类型或结构 | 当前支持情况 |
|---|---|
| 标准包 | 支持识别、解包和静态反编译 |
| 加密包 | 支持,但必须提供与目标包匹配的 AppID |
| 微信 4.x 聚合结构 | 支持常见结构,不承诺覆盖所有客户端版本和编译形态 |
| 独立分包 | 可以识别;缺少主包运行时时会跳过不可靠处理并标记为 partial |
| 小游戏包 | 当前仅做分类识别,不承诺完整反编译 |
反编译无法重新生成编译时已经丢失的注释、原始变量名、源码目录和构建配置,也无法静态确定所有动态生成、运行时注入或强混淆内容。输出工程不保证可直接重新编译或运行;fallback、生成内容和推断结果会保留来源,不会伪装成原始源码。
- 项目不接入外部数据库、缓存或消息队列;任务状态、队列和产物只保存在配置的本地目录或 Docker 卷中。
- 首页 Star 数由 API 服务端向固定的 GitHub 仓库接口查询并短时缓存;浏览器不会直接联系 GitHub,也不会向 GitHub 转发访客 IP、任务信息或上传内容。反编译 Worker 仍保持无外网权限。
- 为让独立 Worker 完成解密,AppID 会短暂写入权限为
0600的一次性凭据文件,不进入任务状态、队列或报告;完成一次解密尝试或任务失败后立即删除。若删除前进程意外退出,凭据最迟随任务目录按保留策略清理;若删除后任务中断,加密包需重新提交。原始文件名和文件大小也不会写入任务记录,升级时还会自动清理旧任务状态中的遗留敏感字段。 - 任务目录权限为
0700,任务状态、队列文件和产物权限为0600;生产 Worker 默认禁用外部网络。 - 应用请求日志不记录客户端 IP、查询参数或真实任务 ID,生产网关也默认关闭访问日志。极少量严重基础设施错误日志仍应按敏感数据保护。任务 ID 仍应视为临时访问凭证,不要公开分享。
- 解包与打包会检查路径穿越、绝对路径、重复 ZIP 条目和符号链接。
- Node 辅助进程具有执行超时、输出上限和 V8 old-space 限制;严格的内存隔离仍应依赖容器资源限制。
- API 没有内置用户认证和按用户划分的任务权限。公网部署必须在前置网关增加 TLS、身份认证和限流,并隔离 Worker 网络。
- 正常终态会立即删除原始上传、AppID、fallback 工作区和 raw 重复副本;异常中断遗留、任务记录、恢复源码、报告、失败队列记录及 ZIP 按
RETAIN_ARTIFACTS_HOURS周期清理。代码默认值为 24 小时,公开体验站当前为 72 小时。
本地开发
推荐使用 Node.js 24 和 Go 1.26;Go 模块声明的最低版本为 1.25。以下命令适用于 Bash:
npm ci --prefix backend/internal/beautify
npm ci --prefix backend/internal/beautify/wxappUnpacker
mkdir -p /tmp/seewxapkg-tasks /tmp/seewxapkg-output
cd backend
TEMP_DIR=/tmp/seewxapkg-tasks \
OUTPUT_DIR=/tmp/seewxapkg-output \
go run ./cmd/server另开一个终端:
cd frontend
npm ci
npm run dev前端位于 http://localhost:5180,并将 /api 代理到后端 9090 端口。直接运行服务默认使用 memory + inmem,只适合短时开发,重启会丢失任务状态与队列;持久运行请使用 Compose 的 file + file。
deploy/production/ 提供了单机生产部署参考,但不包含身份认证。公网使用前必须替换镜像、域名和证书,并在网关接入身份认证。
查看 HTTP API
创建反编译任务:
curl -fsS -X POST http://localhost:9090/api/compile \
-F 'file=@/path/to/__APP__.wxapkg' \
-F 'beautify=true' \
-F 'decompile=true'加密包不要把真实 AppID 直接写进命令行或 shell 历史;请使用下文的隐私安全验收脚本,它会隐藏输入并通过权限为 0600 的临时配置发送。直接调用 API 时,未提供的 beautify 和 decompile 均为 false。
| 方法 | 路径 | 用途 |
|---|---|---|
GET |
/api/health |
健康状态、版本和运行能力 |
POST |
/api/compile |
上传文件并创建任务 |
GET |
/api/events?taskId=<id> |
SSE 实时进度 |
GET |
/api/tasks/:taskId |
权威任务状态、阶段和评分 |
GET |
/api/tasks/:taskId/report |
综合或具名技术报告 |
GET |
/api/tasks/:taskId/diagnostics |
已脱敏的检查提示 |
GET |
/api/tasks/:taskId/artifacts |
产物清单与来源 |
GET / HEAD |
/api/download/:taskId |
下载 ZIP 或检查是否就绪 |
GET /api/tasks/:taskId 响应中的 status 是唯一权威终态。具名报告包括 package-profile、各类 *-recovery-report、format-report 和 zip-manifest,实际集合取决于请求选项和任务进度。
查看常用环境变量
下表是直接运行 Go 服务时的默认值;Compose 会按 API 与 Worker 的职责覆盖部分配置。
| 变量 | 默认值 | 用途 |
|---|---|---|
SERVER_PORT |
9090 |
API 监听端口 |
MAX_UPLOAD_SIZE |
52428800 |
最大上传大小(50 MiB) |
TEMP_DIR / OUTPUT_DIR |
/tmp/seewxapkg / /output |
工作目录与 ZIP 目录 |
TASK_REPO_DRIVER |
memory |
memory 或 file |
QUEUE_DRIVER |
inmem |
inmem 或 file |
BEAUTIFY_ENABLED |
true |
是否整理代码 |
DEOBFUSCATE_ENABLED |
false |
是否启用启发式可读性变换 |
NATIVE_RECOVER_ENABLED / FALLBACK_RECOVER_ENABLED |
true / true |
两条反编译路径开关 |
VERIFICATION_ENABLED / REPORT_ENABLED |
true / true |
结果检查与报告开关 |
NODE_EXEC_TIMEOUT_SECONDS / NODE_EXEC_MEMORY_MB |
60 / 512 |
Node 超时与 V8 old-space 上限 |
MAX_CONCURRENT_TASKS |
4 |
Worker 并发数 |
RETAIN_ARTIFACTS_HOURS |
24 |
文件保留时间;0 表示不自动清理 |
完整校验规则见 backend/internal/config/config.go。
运行质量门禁
npm ci --prefix backend/internal/beautify
npm ci --prefix backend/internal/beautify/wxappUnpacker
npm test --prefix backend/internal/beautify
cd backend
go test -race ./...
go vet ./...
go run golang.org/x/vuln/cmd/govulncheck@v1.6.0 ./...前端在 frontend/ 下运行 npm ci && npm test && npm run build && npm audit。CI 还会构建镜像、执行 Compose 健康检查并验证生产配置;真实 .wxapkg 不会进入公开 CI。
授权样本可使用:
WXAPKG_PATH='/absolute/path/to/__APP__.wxapkg'
./scripts/manual_validate.sh "$WXAPKG_PATH" http://127.0.0.1:9090 completed脚本会安全提示输入 AppID(普通包可留空),默认使用权限为 0700 的临时目录并在结束时删除。最后一个参数可改为 partial;省略时不限定这两种状态,但质量门禁仍须全部通过,failed 始终验收失败。
Issue 和 Pull Request 都欢迎。较大的功能变化请先提交 Feature Request;Bug 请使用 Bug Report,并提供最小复现和已脱敏日志。不要提交无权分发的真实包;反编译逻辑和第三方代码变更必须补充测试、来源及许可证信息。
趋势图由仓库自动化通过 GitHub API 更新,只保存按 UTC 日期聚合的数量,不保存 Stargazer 用户名。
项目自主代码以 MIT License 发布。兼容 fallback 位于 backend/internal/beautify/wxappUnpacker/,源自 wxappUnpacker,并按 GPL-3.0-or-later 发布;其源码、修改和许可证随仓库一同提供。再分发或修改前请阅读 THIRD_PARTY_NOTICES.md 及该目录内的许可证。
本项目仅用于对已获授权的小程序包进行学习、研究、兼容性分析和故障排查。使用者应自行确认其获取、处理、存储和使用软件包及反编译结果的合法权利,并遵守适用法律、平台规则和第三方许可证。项目按许可证“原样”提供,不对反编译完整性、可编译性、运行结果或特定用途适用性作出保证。