夜雨聆风学习资料网

ARTICLE · 1151812

4.8 万 Star,REA 让 AI 复现软件功能,不用拿到源码

4.8 万 Star,REA 让 AI 复现软件功能,不用拿到源码

1996 年的打砖块游戏 DX-Ball,会根据砖块的位置,把撞击声分配到左右声道。REA 的官方案例从 EXE 里找出了这段计算,重写成 C 函数后,用 3,205 组输入与原程序逐一对照,结果全部一致。

REA 全称 Reverse Engineer Anything,截至 10 月 10 日已获得 4.8 万 Star。它是一套开源的命令行工具、MCP 服务和配套 Skill。即使没有原始工程,Codex、Claude Code 等 Agent 也可以通过它查询安装包、函数和调用关系,再根据证据解释实现,或尝试复现其中的功能。

官方案例插画:砖块的位置会影响撞击声来自哪一侧。

从 EXE 里找出声道计算

这个案例有个值得注意的细节:反编译器最初给出的伪代码,只剩一行数值转换,输入参数和计算过程都没显示出来。如果 Agent 只解释这段伪代码,就会漏掉整个函数的作用。

接下来就要查这段伪代码遗漏了什么。通过 REA 读取机器指令,查找调用它的函数,再读取程序里的常数,才确认传入的是砖块的水平位置。计算过程也随之明确:位置乘以 1.5625,减去 500,再乘一个声道缩放系数,最后转换成整数。

当缩放系数为 1 时,屏幕左端、中间和右端分别得到 -500、0、500。这样就能解释,为什么同一种撞击声会随着砖块位置,在左右耳之间移动。

基于官方调查图拆分排版,保留计算过程和两项验证。

恢复计算以后,重建项目又做了两项检查:用 3,205 组输入对照原始 x86 函数;使用固定的老编译器构建 C 函数,按官方记录处理地址引用后,将生成的 63 字节机器码与原函数逐字节比较。两项都通过了,但这个结果只覆盖这一段函数,不能说整款游戏已经被还原。

这些是官方重建记录,并非本文本地实测。REA 在其中提供查询和证据,编写 C 函数、运行对照测试,则属于后续的重建工作。

追踪 Notion 的复制流程

REA 也能检查现代应用的发布包。另一个官方案例分析了 Notion Desktop 7.6.1,想弄清楚编辑器里的复制请求,怎样写入系统剪贴板。

Notion 使用 Electron 构建桌面应用,页面不能直接调用所有系统功能。这个复制请求会先经过连接页面与桌面功能的脚本,再通过进程通信发送给主进程。主进程检查请求来源,最后调用 Electron 的剪贴板接口。

官方四步流程的中文译注版,按源码阅读结果整理。

这条调用链也没有完全自动生成。REA 先定位到了页面接口和发送消息的包装函数,并给出原文件中的行列位置。但它没有识别出消息使用的通道名称。继续读取对应代码,找到这个名称,再查接收同名消息的函数,才把两端连接起来。

Agent 可以根据这些线索继续查接口、找位置、读相关实现,不必每一步都等人提供下一段代码。遇到工具标记为未知的地方,就继续调查,不能直接补成肯定结论。

REA 怎样配合 Agent 工作

分析 EXE 或原生库时,REA 会连接 Ghidra、Hopper 等已有工具。这些反编译器负责将机器指令转换成较容易阅读的伪代码,REA 则把查函数、找调用者、读数据等操作提供给 Agent。Agent 根据查询结果继续分析,并决定下一步查什么。

对于 JavaScript 和 Electron 发布包,REA 自己就能提取模块、接口和通信线索,不需要先启动这些原生分析引擎。遇到必须观察运行行为的问题,再使用相应的浏览器或应用运行时工具。

配套 Skill 会指导 Agent 围绕一个具体问题开展调查:先看已有信息,再查缺失的部分,解释时区分直接观察、推断和未知项。查询结果会保留来源与限制,方便沿着具体文件、地址或调用关系复核。静态分析中存在一条调用路径,并不说明它在某次运行中真的执行过。

先从一个具体功能开始

初次尝试时,可以选一个输入输出明确的功能,例如某个文件格式怎样导出、一项参数怎样计算,或一次复制请求怎样传递。不要一上来就要求 Agent 重建整个软件。

安装入口是 npx rea-agents@latest setup,它会为选定的 Agent 配置 MCP 和匹配的 Skill。当前要求 Node.js 22.19 以上的 22.x、24.11 以上的 24.x,或 26 以上版本。原生目标还需要准备匹配的分析引擎,Windows 的 Ghidra 路线目前标为实验性;仅安装 Skill 不会自动补齐这些工具。

提问也可以具体一些:“找出这个功能的入口和计算过程,列出支撑结论的位置。需要复现时,先说明怎样用原程序核对结果。”这样得到的分析才方便检查,而不是一大段看似合理、却找不到依据的解释。

从 DX-Ball 的一段声道计算,到 Notion 的一次复制操作,REA 展示了一种值得尝试的学习方式:即使没有原始工程,也可以围绕一个功能,逐步查清实现,再把理解写成能够验证的代码。这比一句“帮我复刻这个软件”具体得多,也更容易做出可靠的结果。

官方案例:https://rea.tools/showcase/

项目地址:https://github.com/morluto/rea

相关学习资料