动态

用Codex在5天内从编译版本恢复丢失源代码

宝玉
我如何在5天内用Codex“恢复”丢失的源代码

你丢过源代码吗?那种感觉糟透了。几年前,我建了一个Electron绘图应用,后来源代码丢了,只剩编译后的版本。

我考虑过从头重写,但要重创所有小细节感觉太繁琐。然后我读了OpenAI关于用Codex在28天内构建Sora Android应用的文章,有了个主意:编译代码还在,也许能让Codex逆向工程回源代码?

五天后,我得到了可运行的TypeScript源代码。过程如下。

1. 从混淆代码中提取模块结构

Electron应用将所有内容打包成asar文件。第一步是让Codex从中提取JS和CSS文件。

提取出的JavaScript是编译并混淆过的。变量名像a、b、c,函数调用纠缠成不可读的链条。人类看了会头晕,但对Codex来说,这只是又一段要分析的代码。

我让Codex分析主JS文件并列出模块。它真的做到了。原始模块名丢失了,但从代码结构和逻辑模式中,Codex重构了一份相当完整的模块清单。

有了这份清单,我让Codex创建恢复计划:将每个模块从混淆的JavaScript转换回可读的TypeScript。模块列表成了检查清单,每个完成模块打勾。

2. 第一个问题:Codex想“证明”代码能运行

恢复初期遇到了阻碍。

Codex有本能:它很想验证生成代码能否实际运行。为了让代码构建成功,它会悄悄跳过认为“不是立即必要的”部分。

对于写新代码,这是好习惯;对于恢复旧代码,这是灾难。我需要完整恢复,而不是能编译的最小集合。

解决方法很简单:我在https://t.co/gPodfsSjNw加了一条严格规则:

“逐一恢复模块。不要担心代码能否编译。”

这一行改变了一切。Codex不再纠结构建错误,开始忠实地逐个模块恢复。

3. 第二个问题:上下文填满,记忆消失

Codex的上下文窗口有限。当时它运行一阵就会停,我得不断输入“continue”。如果开启新会话,就得重新解释整个任务。

问题是:新Codex会话不知道之前发生了什么,你必须重新说明整个背景。

我的解决方案是搭建“外部记忆”系统:
- 在https://t.co/gPodfsSjNw中描述整体任务背景
- 创建跟踪恢复计划和进度的https://t.co/aUqHEnDFIV文件
- 给https://t.co/gPodfsSjNw加规则:总是先读https://t.co/aUqHEnDFIV,每次工作后更新它

这样每个新会话只需输入“continue”,Codex会自动读取进度文件并接续。

最后,我连手动做这些也烦了。让Codex写了个脚本:检测上下文快满时自动启动新会话并输入“continue”。

于是我只看着它运行,不时检查,又多完成几个模块。

4. 组装成可运行应用

几天后,所有模块都被恢复成TypeScript文件,但仍是分散部件。

下一步:将它们组装成实际的Electron应用。我让Codex用Electron Forge脚手架创建新项目,再放入恢复的代码。

这时我重写了https://t.co/gPodfsSjNw和https://t.co/aUqHEnDFIV来解释如何编译和测试。然后重复之前的流程:自动新会话、continue、更新PLAN。

接下来几乎是魔法。

我看着Codex不断修复编译错误。它会检查原始编译代码来验证逻辑。
动态宝玉2026-02-01原文

相关内容