ByteNoteByteNote
反编译 Codex 桌面应用:用 AI 还原可读源码
字

字节笔记本

2026年10月6日 · 约 11 分钟读完

反编译 Codex 桌面应用:用 AI 还原可读源码

API中转
¥120

Codex 桌面应用是 Electron 打包的 macOS 程序,全部前端代码都装在一个叫 app.asar 的归档文件里。里面的 JavaScript 经过压缩(minify)、打包(bundle)、混淆(obfuscate)三道工序:变量名变成 a、b、e1,函数挤成一团,人眼基本读不懂。开源项目 decode-codex 要做的,就是把这个过程反过来:用一组脚本加一个 AI agent,把混淆代码还原成命名清晰、结构可读的源码。

分工思路很清楚:解包、解析 AST、批量重命名这类机械活交给脚本;“这个函数到底在干什么、该叫什么名字”这类语义判断交给 AI agent。后者恰好是 AI 比人擅长的活,也是整个项目最聪明的设计。

decode-codex 反编译流水线:从 app.asar 到 restored

准备工作

开始前需要备齐四样东西:

条件原因
macOSCodex 是 Mac 桌面应用,解包脚本默认读取 /Applications/Codex.app
Codex 桌面 App反编译对象,需装在默认位置,可从 chatgpt.com/codex 下载
Node.js解包脚本用 node 运行,还会调用 npx @electron/asar 和 prettier
Bun反混淆脚本是 TypeScript,需要 bun 执行

AI agent 不是必需品:项目里所有脚本都能手动执行,agent 的作用只是自动编排这些脚本并完成语义命名,你完全可以自己一步步敲命令。

先确认 Codex 装好了,终端跑一下:

bash
ls /Applications/Codex.app/Contents/Resources/app.asar

能看到文件就说明前置条件齐了。

第一步:解包 app.asar 到 ref 目录

克隆项目并安装反混淆脚本的依赖:

bash
git clone https://github.com/JimLiu/decode-codex.git
cd decode-codex
cd .agents/skills/deobfuscate-javascript
bun install
cd ../../..

社区普遍建议先把仓库 fork 到自己账号下再克隆:反编译闭源软件,自己玩自己的就好,别把还原出来的代码推回公共仓库。

解包由项目里的 codex-app-ref-refresh 技能完成。用 agent 跑,在项目根目录说一句:

用 codex-app-ref-refresh 从已安装的 Codex App 刷新 ./ref

或者直接手动执行脚本:

bash
node .agents/skills/codex-app-ref-refresh/scripts/refresh-codex-ref.mjs

这里有个安全细节必须注意:脚本会先删除再重建 ./ref。它有保护机制,只有目标解析为当前目录下的 ./ref 才会执行,不会误删别处,但你必须站在想让 ref 出现的目录里运行,通常就是项目根目录。第一次用强烈建议先跑 --dry-run 看一眼路径:

bash
node .agents/skills/codex-app-ref-refresh/scripts/refresh-codex-ref.mjs --dry-run

脚本还有两个实用参数:--skip-format 只解包不跑 Prettier,省时间;Codex 装在非默认位置时,用环境变量 CODEX_APP_ASAR 手动指定 asar 路径。

跑完之后,Web UI 代码在 ref/webview/ 下:入口是 index.html,主战场是 assets 目录里的一堆 JS 文件。此时代码已格式化、缩进正常,但变量名还是混淆的,需要第二步。

第二步:反混淆还原成可读源码

这是整个流程的核心,也是最烧 token 的一步。它把 ref/webview/assets 里打包压缩的 JS 还原成命名清晰、结构可读的代码,输出到 restored 目录,内部是一条多阶段流水线:

deobfuscate 反混淆 → smart-rename 智能重命名 → polish 润色 → 可选的带类型 .tsx 重写

机械活(解析 AST、拆 bundle、批量替换)由内置的 bun 脚本完成,语义活(判断函数职责、起有意义的名字)由 AI agent 完成。

用 agent 跑,在项目根目录说:

Use deobfuscate-javascript to restore ./ref

中文触发词也认:反混淆 ./ref,或者 deobfuscate ref/webview/assets。脚本都在 .agents/skills/deobfuscate-javascript/scripts/ 下,每个都是独立的 TypeScript 工具,正常交给 agent 自动编排即可,手动串联顺序会比较繁琐。

反混淆分两种深度:

深度触发方式产出
可读(默认)直接说“还原”可读、命名清晰的 JS/TSX
深度/生产级说 deep、full、production、深度、完整额外做带类型 .tsx 重写、npm 依赖解析、完整依赖图编排、验收复审循环

想要最完整的结果,一定要用深度模式再配合 /goal:反混淆是逐文件啃的活,/goal 让 agent 循环跑到所有文件都还原完才停,否则还原不了几个文件就结束了。

处理范围默认是整棵依赖树:从 ref/webview/index.html 出发,自动找到应用入口,递归还原所有可达的本地代码块;只贴一个文件给它,就只还原那一个。

还原后的文件落在 restored 目录,有几个特点:命名有意义,不再是 a、b;按语义领域分子目录,而不是按打包后的 chunk 名;每个文件顶部有出处头注释,标明来自哪个原始 chunk;模块对应关系统一记录在 restored/IMPORT_MAP.json。只有整理完成的文件才会进 restored,脚本批量产出的中间产物先放在隐藏临时区,整理好了才提升上去。

decode-codex 实操要点:dry-run、深度模式、goal 循环与 token 上限

完整流程一气呵成

把上面的步骤串起来,复制粘贴版:

bash
# 0. 前置:装好 Codex App、Node、Bun
ls /Applications/Codex.app/Contents/Resources/app.asar

# 1. 克隆 + 装依赖
git clone https://github.com/JimLiu/decode-codex.git
cd decode-codex
cd .agents/skills/deobfuscate-javascript && bun install && cd ../../..

# 2. Skill 1:解包(先 dry-run 看路径)
node .agents/skills/codex-app-ref-refresh/scripts/refresh-codex-ref.mjs --dry-run
node .agents/skills/codex-app-ref-refresh/scripts/refresh-codex-ref.mjs
ls ref/webview/assets/

# 3. Skill 2:反混淆(在支持 skill 的 agent 里)
#    Use deobfuscate-javascript to deep restore ./ref
#    /goal all files in ref/webview/assets restored to restored/

常见的坑

  1. 目录不对会出事。Skill 1 会删除 ./ref,必须站在项目根目录跑,第一次先 --dry-run。
  2. 很烧 token。整棵树反混淆加深度模式可能消耗大量 API 调用,动手前先设消费上限,或者先拿单个文件试跑。
  3. 质量取决于模型能力。语义命名是 AI 干的,模型越强还原越准;哪个模型反编译效果最好,目前还是个开放问题。
  4. /goal 是关键开关。没有它让 agent 循环跑到完成,单次运行还原不了几个文件就停。
  5. Codex 更新后要重跑 Skill 1,让 ref 和当前安装的版本保持对齐。

顺便理解循环工程

decode-codex 恰好是循环工程理念的活样本:两个技能目录里的 SKILL.md 把“怎么解包、怎么反混淆”固化成可复用知识;/goal 充当调度器,让 agent 循环跑到全部完成;深度模式的验收复审循环是典型的生成器与评估器分离;IMPORT_MAP.json 和出处头注释提供跨轮记忆;中间产物先放隐藏临时区、整理好才提升,则是一种隔离设计。想练手循环工程,批量反混淆一堆文件是个现成的实验场。

快速排错

问题解决
app.asar not found确认 Codex 装在 /Applications/Codex.app,或用 CODEX_APP_ASAR 指定路径
bun: command not found安装 Bun:curl -fsSL https://bun.sh/install | bash
node: command not found安装 Node.js:brew install node
Skill 1 删错目录你不在项目根目录,先 cd 到克隆下来的 decode-codex 再跑
还原的文件很少没用 /goal 加深度模式,补上 deep/full/production 关键词
token 烧得太快先只贴一个文件试跑,流程通了再整树跑,并设 API 消费上限

法律边界,再说一遍

项目作者明确声明:本项目仅用于对你已安装软件的个人学习与互操作性研究。解出的代码版权归 OpenAI 所有,请遵守 Codex 应用的许可协议与服务条款,不要分发解出或还原后的代码。自己研究可以,公开传播不行。

本文整理自开源项目 decode-codex 的 README 与 SKILL.md,项目仍在活跃更新,具体脚本参数以仓库最新版本为准。

相关文章

分享: