看到一个应用的搜索、同步或文件处理功能,开发者常会想知道:它在哪一层完成?数据经过哪些模块?哪些细节可以借鉴到自己的系统?没有源码时,这些问题需要从应用产物、运行观察和分析工具中逐步寻找答案。

近期受到关注的 REA(Reverse Engineer Anything)把这类调查接到了 AI Agent 上。它提供统一的工具入口、调查指引和可追溯结果,让 Agent 能在取得证据后继续追问。理解它的价值,需要同时看工具能读到什么,以及这些观察能够支持多大的结论。

本文核对于 2026 年 10 月 16 日,依据 6.5.0 发布信息及当天主分支源码快照 1bd5c5c。主分支可能包含发布后的修改;本文为文档和源码分析,未做 REA 的端到端运行、性能或第三方应用逆向实测。

REA 把哪些事情接在了一起

REA 的名字很大,拆开之后可以看到几个明确的分工。

层次主要负责什么使用时要确认什么
AI Agent理解问题、选择工具、整理解释,必要时编写候选实现使用的模型、工具权限和数据策略
MCP / CLI把调查操作提供给 Agent 或终端调用者已注册的工具、命令参数与返回结果
REA 工作流分类目标、协调分析、保存和查询结果实际分析范围、所选 provider 和已知限制
分析引擎或专用解析器读取产物、恢复结构,或观察获准的运行行为平台、格式、软件版本与具体能力

配套的 Agent skill 提供调查顺序与使用方法。原生反汇编、反编译通常还要连接 Hopper、Ghidra、IDA 等引擎;JavaScript 静态分析、部分元数据检查可以走各自的解析流程。REA 负责把这些能力组织成 Agent 可以持续调用的调查过程。原生调查指南和 CLI 文档分别说明了引擎前提与共用工作流。

REA 调查循环示意:Agent 提出问题,通过 REA 的 MCP 或 CLI 调用目标相关工具,取得带来源、覆盖范围和限制的 Evidence,再核对或继续追问。

依据项目文档自绘的工作流示意,非实际工具运行结果。

这也是它值得关注的地方:已有分析工具积累了大量能力,而 Agent 需要的是可调用的操作、适合阅读的结果,以及继续调查的线索。REA 试图连接这两端。

从一个具体问题开始,价值才容易判断

假设要调查一个自己有权分析的 Electron 笔记应用:“搜索框里的文字,最终交给哪个模块处理?”这是一个教学场景,没有对应的实测结果。

静态调查可以先识别应用产物和模块,再寻找界面入口、IPC 通道或搜索字符串,沿已有关系追踪到主进程、存储调用或原生扩展边界。REA 的 JavaScript 工作流支持从字符串、模块、API、IPC 通道等线索追踪关系,并保留来源和未知项。

对应的 MCP 工具链可以是:用 analyze_javascript_application 生成应用图,再用 trace_application_feature 沿字符串或 IPC 线索追踪,最后通过 inspect_analysis_view 回查相关模块。每一步都围绕同一个问题取材料,比一开始要求 Agent “完整复刻这个应用”更容易核对进展。

这些材料可以支持“找到一条静态候选路径”。要确认它是否就是某次用户操作实际走过的路径,还需要匹配的运行观察或测试。遇到动态属性、间接调用、缺少的文件或未覆盖语法,调查结论也要跟着收窄。

按目标看,几种常见能力可以这样理解:

目标可以取得的线索不能直接据此确认的事情
JavaScript / Electron 产物模块、导入、部分语义关系、IPC 与原生扩展边界某条静态路径已执行,或原始工程已恢复
原生二进制的函数分析所选引擎提供的伪代码、汇编、字符串、调用与引用伪代码就是原始源码,或未解析部分没有行为
网页与浏览器观察当前页面、脚本、网络记录及获准的交互观察服务端内部实现,或没有观察到的路径不存在
.NET 程序集支持格式中的元数据、CIL 和声明的依赖任意 .NET 打包形式都适用,或程序集已被运行验证

浏览器能力由不同 provider 承担:被动 CDP 路径附着到已有目标进行观察,主动 Playwright 场景可以执行声明的导航、点击和输入。具体权限与生命周期见浏览器 provider 说明;托管代码的格式前提见 .NET 分析指南。选择工具时要看目标内容、宿主和引擎版本;单看扩展名或一张支持列表,容易高估覆盖范围。

Evidence 让调查更容易复核

REA 输出中的 Evidence 值得单独看。数据结构定义把结果与操作、参数、目标身份、来源和限制联系起来,使后续查询能回到对应材料。目标摘要、证据 ID、标准化结果以及覆盖说明,各自承担不同作用。

例如,“找到了某个函数”至少还需要回答:来自哪个产物版本?哪次分析?目标身份是否一致?看到的是声明、静态推断还是运行观察?只给一个看似合理的函数名,很难检查这些问题。

对大型应用,全部结果也可能非常大。REA 提供摘要、分页与单项视图,可以围绕已经取得的 Evidence 继续查询,避免每次都把所有材料交给 Agent。结果视图文档特别区分了数据覆盖范围和分页是否读完:读完一个空页面,仍不能证明尚未完整分析的应用里没有相关对象。

可追溯性提高了检查答案的条件,答案是否成立仍要逐项核对。 Evidence ID 本身不能替代内容与结论之间的对应关系。

几个容易被热度掩盖的边界

多引擎支持,需要明确选择条件

源码中的 provider 选择逻辑与 CLI 的选择规则一致:自动选择时,只有一个适用候选才会绑定;多个候选需要显式指定。选定的引擎在会话中保持绑定,失败会保留原因。

因此,不能把“支持多个引擎”理解成 Hopper 失败后会自动轮流尝试 Ghidra、IDA。排查问题时,应先确认实际使用的是哪个 provider、它是否支持该目标,以及失败发生在环境准备还是分析阶段。

本地分析,要与模型的数据流一起看

REA 可以在本机完成分析,但 Agent 会读取工具结果。结果是否进入远端模型,取决于 Agent、模型提供方及其配置。项目 FAQ也明确提醒用户检查模型提供方的数据策略。

分析私有程序前,应确认哪些内容会进入上下文:文件路径、字符串、伪代码、网络观察或其他输出,都可能具有敏感性。MCP 统一了工具调用方式,实际数据去向仍由整条链路决定。

项目的安全说明还指出,provider 以当前用户权限解析目标,REA 的会话认证和临时目录机制不能充当沙箱。动态插桩等会执行代码的操作,要按其实际副作用单独评估。对只想了解结构的任务,可以先从静态材料开始。

输出变短,要分别核对 token、耗时与正确性

REA 的效率实验区分了工具回复字节、模型 token 和完整任务时间,并保留了收益不一致的结果。摘要或分页减少了传输内容,后续也可能增加发现、查询和纠错调用;最终节省多少,需要按同一问题实际测量。

这些是项目公布的实验材料,本文没有独立复现。不能把某个样本的输出压缩比例,直接写成所有任务的成本降幅或速度提升。

正确性也有明确范围。客户端验证文档为部分桌面、解析器比较与托管代码场景设置了已知事实检查;同一文档说明,native、browser 等场景没有相同的事实评分规则,factualCorrectness 保持 not_assessed。这表示这些场景未在该套事实规则下评估,不能外推成“全部分析准确”,也不能反向断言工具无效。

功能重建,还需要独立的验收条件

理解一部分实现,可以为重新实现提供线索。是否已经重建成功,还需要输入输出、异常、状态变化和副作用等可比较条件。

项目的重建就绪验证使用项目自有样例检查流程、证据关联和失败处理。文档同时限定了这些检查的范围。读到一个通过结果时,要继续看它覆盖了哪些样例与断言,不能把它扩展成任意真实应用的等价证明。

怎样判断它是否适合自己的工作

REA 更适合有具体调查问题、愿意阅读证据,并能准备相应工具环境的开发者。对维护旧系统、梳理自有应用产物或研究互操作接口的人,统一入口和可复用结果可能带来实际价值;具体收益仍取决于目标与调查深度。

一次有意义的评估,可以选自己拥有源码、能构建和测试的小型应用:

  1. 先写三个有确定答案的问题,例如某个 IPC 通道由谁处理、一个配置值来自哪里、一次操作写入哪个文件。
  2. 用固定版本的产物调查,保存产物摘要、REA 版本、provider 与工具返回,要求结论对应具体证据。
  3. 回到源码和已有测试逐项核对,记录答对、答错、明确未知与未覆盖的部分。
  4. 记录完整耗时、工具调用和模型用量;若尝试重建功能,再用独立测试检查行为。

安装指南列出了运行时、Agent 配置和 provider 准备方式;正式接入前应按选定版本核对实际前提。

截至本次核对,GitHub 官方 API返回 271,725 个 Star。这个单次快照能描述关注度,无法计算最近两天的增长,也无法衡量分析准确率。更值得观察的,是 REA 能否在具体问题上帮助调查者更快取得可复核的材料,并清楚保留未知项。

关于 Agent 工具如何复用,也可以结合博客已有的 OpenClaw Skills 指南阅读。对 REA 的评估则应继续落在明确目标、真实证据和可执行的验收条件上。