文章 ·
REA:又一个 OpenClaw 级项目,让 AI 学会逆向工程
从 Electron 的 IPC 到原生二进制,REA 用 MCP 将专业逆向工具接入 AI Agent。理解它的架构、真实案例,以及证据驱动的软件工程意味着什么。
当 AI 已经能够根据需求编写软件,接下来的问题是:如果没有源代码,它还能理解一个已经存在的软件吗?
REA(Reverse Engineer Anything) 正在探索这个方向。它把原生二进制、JavaScript、Electron 应用和运行时观察等分析能力,通过 MCP 接入 AI Agent。开发者提出问题,Agent 调用专业工具寻找答案,再把结论与证据联系起来。
“又一个 OpenClaw 级项目”表达的是我对这一方向的期待。OpenClaw 让更多人关注 Agent 执行任务的能力,REA 则让专业软件分析进入 Agent 的工具体系。两者定位不同,社区热度也不能直接证明技术成熟度。比 Stars 更值得讨论的,是 REA 是否改变了开发者理解软件的方式。
从写代码,到调查软件
有源码时,我们可以搜索函数、查看调用关系、运行测试。只有安装包时,同样的问题会变得复杂:一个按钮触发了哪个模块?富文本怎样进入系统剪贴板?一个旧游戏的声音定位算法如何计算?
传统流程需要在反编译器、调试器、浏览器和动态插桩工具之间切换。开发者既要熟悉工具,还要决定下一步调查什么,以及哪些结果值得相信。
REA 将其中的分析操作变成 Agent 可调用的工具。你可以描述一个具体目标:
分析这款 Electron 应用的搜索功能,找到入口模块,追踪调用链和 IPC 通道,解释实现机制,并标注证据与尚未确认的部分。
Agent 随后围绕目标逐步调查。它仍然需要模型推理和工程判断,也需要验证结果。REA 的作用是把专业观察能力接进这个过程,而完整源代码恢复、行为等价和跨平台运行都需要另外证明。
MCP 将不同分析引擎接到一起
REA 使用 TypeScript 和 Node.js,提供 CLI 与 MCP 服务。原生分析可以接入 Ghidra、Hopper 或 IDA;JavaScript 静态分析不需要原生反编译引擎。安装程序还会为所选 Agent 配置相应的工作流指令。官方 README
它的工作过程可以概括为:
开发者提出问题
↓
AI Agent 制定调查步骤
↓
REA CLI / MCP
↓
静态分析、反编译、运行时观察
↓
分析结果、证据与限制
↓
Agent 解释、继续调查或编写重构实现
↓
独立测试验证
这里真正有用的是工具之间的组合。例如分析 Electron 应用时,可以从页面中的 JavaScript 入口开始,追踪到 Preload 和主进程,再定位原生扩展。面对二进制程序,可以先寻找函数,再读取指令、调用关系和常量。
统一接口降低了切换工具的成本,但并没有消除底层工具的差异。安装 MCP 服务成功,只能证明工具入口已注册;能否分析具体目标,还取决于平台、文件格式、外部依赖和实际运行结果。
分析范围很广,能力深度需要分别判断
REA 的文档覆盖多种软件对象。不同领域的支持范围应按对应工具和工作流理解:
| 对象 | 主要调查方向 |
|---|---|
| 原生二进制 | 函数、指令、伪代码和调用关系 |
| JavaScript / Electron | 模块、导入、IPC 和打包结构 |
| 网站 | 页面、脚本、网络请求和运行时观察 |
| Android | APK 代码与资源,以及 ADB 设备观察 |
| .NET | 程序集元数据和 CIL 等结构 |
| Go / Rust | 编译与依赖元数据等静态信息 |
| 固件 / WASM / 网络记录 | 按对应解析器提取和调查 |
尤其不能把“能够识别 Go 或 Rust 元数据”理解为“能够恢复完整项目源码”。格式支持、结构提取、语义解释和行为重构,是不同层次的能力。官方文档目录
从工程用途看,我更关注三个场景:分析缺少文档的桌面应用,恢复遗留系统中的确定性算法,以及在授权范围内做故障诊断和安全研究。它们都需要从程序本身寻找信息,而不能只依赖已有说明。
DX-Ball:把猜测变成可验证的算法
官方 DX-Ball 案例研究一款早期 Windows 游戏的声音定位函数。问题很具体:屏幕上的横向坐标怎样转换为左右声道的位置?
最初的反编译结果只暴露了转换函数,Agent 继续检查指令、调用者和数据常量,恢复了计算关系。随后,重构项目用原始 x86 函数对照测试,并使用固定的历史编译工具链核对机器码。
官方报告该函数通过 3,205 组行为对比,并在检查重定位和常量后实现 63 字节编译结果匹配。这是具体函数的实验结果,不能外推到任意软件,也不意味着整个游戏已经恢复完毕。DX-Ball 官方案例
这个案例的价值在于验证方法。反编译输出只是调查起点;当输出遗漏了输入或运算过程,指令与调用者提供了补充证据。恢复出表达式后,还要通过测试检查类型转换、浮点精度和边界条件。
可以把这一流程理解为三个阶段:观察原程序,建立解释,独立验证。REA 帮助 Agent 获取观察材料,重构项目负责实现和测试,两者共同构成可信的结果。
Notion:从用户功能追到跨进程调用
另一篇官方案例分析 Notion Desktop 7.6.1 的剪贴板机制。它展示了从页面接口,经 Preload、Electron IPC,到主进程系统剪贴板调用的追踪过程。
编辑器页面
↓
Preload 剪贴板接口
↓
ipcRenderer.invoke
↓
notion:clipboard:write
↓
主进程处理程序
↓
Electron 系统剪贴板接口
案例还研究了 HTML 中的关联标识与本地结构化数据如何配合,以保留更丰富的块内容。部分验证来自提取模块和独立测试,不能等同于完整桌面 UI 的端到端测试。Notion 官方案例
对于开发者,这类调查很有启发:用户看到的是一个复制动作,内部实现却跨越页面、进程边界和系统接口。Agent 可以帮助串起这些层次,让调查围绕具体功能展开。
Evidence:让 Agent 知道自己还不知道什么
我认为 REA 最值得研究的设计,是结构化 Evidence。
逆向工程中,“没发现”与“不存在”有很大区别。没有找到调用者,可能是函数没有被使用,也可能是函数指针、动态分发或分析覆盖不足导致遗漏。如果模型把局部观察当成完整事实,后面的解释就可能沿着错误方向继续。
REA 的协议为分析结果保留证据标识、规范化结果和底层结果,并在相关结果中表达覆盖范围、限制与未知项。这使调查过程可以保存、按需读取和比较。MCP 协议文档
这些结构不会自动保证结论正确,但能让开发者追问:这个结论来自哪个目标?用了什么工具?观察覆盖了什么?还有哪些间接调用没有解析?
同样的思想也适用于运维和科研。专业 Agent 需要管理自己的观察记录,并让人能够复核,而不是只输出一段流畅解释。推理能力与证据管理,是可靠调查的两个组成部分。
6.4.0 的进展:处理真实工程中的规模与中断
2026 年 10 月 11 日发布的 6.4.0,进一步完善 Android 设备观察、大型分析结果的摘要与选择性读取,以及 JavaScript 分析的资源控制。分析遇到资源不足时,保留已经完成的事实和显式未知项,有助于后续继续调查。6.4.0 发布说明
这些改进比单纯增加工具数量更接近真实需求。大型应用的结果可能远超模型上下文容量,Agent 需要先看概览,再读取少量相关内容。长时间分析也可能因内存或超时而中断,保留部分结果能避免重复劳动。
我的判断是,专业 Agent 工具将越来越像一个外部调查系统:保存完整结果,向模型提供摘要和可定位的细节,同时记录失败与未完成范围。
为什么把它与 OpenClaw 放在一起讨论
OpenClaw 与 REA 的任务范围不同。前者常被放在通用 Agent 和应用自动化的讨论中,REA 则聚焦软件逆向分析。这篇文章的类比着眼于它们体现的共同方向:通过工具,把语言模型接到实际工作过程。
REA 也说明,专业工具平台可以融入现有 Agent,而不必独立提供一整套通用聊天产品。MCP 负责工具连接,工作流指令提供调查方法,模型负责推理,测试负责验证。
这种分工会改变专业知识的使用方式。开发者可以把重复操作交给 Agent,但仍然需要判断问题是否值得调查、证据是否充分,以及结果能否用于后续工程。
从一个小问题开始使用
官方安装入口是:
npx rea-agents setup
安装程序会展示配置方案,并接入所选 Agent。运行环境和外部工具要求以安装文档为准。
首次使用时,我建议从一个可验证的小问题开始,例如识别某个 Electron IPC 通道,或恢复一个输入输出明确的数学函数。任务描述可以这样写:
使用 REA 调查这个应用的剪贴板写入流程。
找到页面入口、Preload 接口和主进程处理程序。
每个结论给出对应位置和证据。
区分静态观察、实际运行结果与尚未验证的推断。
最后提出一个能够独立验证调用链的实验。
这种任务比“完整逆向这个应用”更容易评估。首先验证工具确实能观察目标,再扩大范围,能够更快发现环境和分析方法的问题。
软件理解将成为 Agent 的重要能力
REA 仍然面对逆向工程固有的困难:符号丢失、编译优化、混淆、间接调用和运行时差异。它提供的观察与组织能力,无法替代所有工程验证。本文依据官方文档和公开案例整理,没有对上述目标重新执行完整复现实验。
在合法授权、软件许可与知识产权边界内,REA 为软件保存、兼容性研究、遗留系统迁移和调试提供了一个值得尝试的方向。
我更期待的是它背后的工作方式:开发者提出具体问题,Agent 获取证据、建立假设、继续调查,再通过独立测试决定是否接受结论。软件理解与代码生成结合之后,AI 工具才能参与更多完整的工程工作。
过去我们主要让 AI 根据需求写代码。REA 让我们看到,AI 也可以帮助从已有程序中发现知识。而这些知识是否可靠,最终仍要回到可追溯的证据和可重复的验证。
参考资料
- REA 官方仓库与 README
- REA 安装说明
- REA MCP 协议
- REA CLI 与 Evidence 指南
- DX-Ball 逆向工程案例
- Notion 剪贴板案例
- REA 6.4.0 发布说明
资料核查日期:2026 年 10 月 14 日。项目能力会随版本变化,案例数据属于官方公开实验。
评论
使用 GitHub 账号参与讨论。 前往 GitHub 评论