发布日期:2026-10-15

REA(Reverse Engineer Anything)是 morluto/rea 项目提供的开源 MCP 与 CLI 工具:它把 JavaScript/Electron、原生二进制、网站和运行时观察接到同一套调查流程中,让 Agent 根据本地分析证据解释功能、追踪调用关系,再辅助实现相似功能。REA 的 rea-agents 6.5.0 于 2026 年 10 月 14 日发布,运行要求是 Node.js 22.19+、24.11+ 或 26+,并配合 npm 使用。它适合分析自己拥有或获授权检查的目标,不能把“逆向一切”理解成自动还原任意软件源码。REA 的价值在于把问题拆成可复核的证据链:目标文件或页面 → 模块、调用、请求或指令 → Evidence → Agent 的解释与验证。静态 JavaScript 分析不需要启动目标应用;运行时观察则会按当前用户权限执行或交互目标。


先理解 MCP、Skill 和 CLI 的分工

REA 不是单独的反编译器,而是连接 Agent、分析提供方和证据结果的工作流层。

  • MCP 负责把分析工具暴露给支持本地 MCP 的 Agent。

  • Skill 提供调查顺序和证据处理规则,告诉 Agent 什么时候继续追踪、什么时候保留未知项。

  • CLI 让开发者在终端直接运行同一类工作流,适合脚本化和批量保存结果。

截至 2026 年 10 月 15 日,GitHub API 返回 morluto/rea 有 242,640 个 Star;这个数字只能说明项目关注度,不能证明某个目标一定能被完整分析。REA 官方 README 也明确区分了支持范围:原生深度分析依赖 Hopper、Ghidra 或 IDA,静态 JavaScript 和 .NET 检查则不需要原生分析引擎。

第一步:安装并先做一次只读检查

安装 REA 前先检查 Node.js 版本:

node --version
npm --version

在 Codex 中接入时,先用 dry-run 查看将要修改的配置和 Skill 路径:

npx rea-agents@latest setup --client codex --dry-run --json

确认计划后再执行正式设置:

npx rea-agents@latest setup --client codex

设置向导会单独展示 npm 下载确认和 REA 配置变更。查看计划、批准后再写入配置,完成后重启 Codex。需要经常从终端使用时,可以安装全局 CLI:

npm install --global rea-agents
rea --help

第二步:用 Electron 示例练习完整证据链

Electron 是最适合第一次实战的目标,因为官方指南说明,分析已解包的应用目录或 ASAR 不需要安装或启动 Electron。以 Notes 示例为例,用户点击导出按钮后,调用链通常是 renderer 暴露的 API → preload 的 ipcRenderer.invoke → main 进程的 ipcMain.handle → 写出 CSV 文件。

先对目标目录做静态分析,并把完整结果保存下来:

npx -y rea-agents@latest analyze-javascript-application \
  "/absolute/path/to/notes-example" --json > app-evidence.json

REA 返回的结果包含模块、导入关系、Electron 边界和 Evidence。完整 Evidence 可能很大,官方 CLI 文档建议先投影摘要,再查看模块页:

jq -c '{source: {kind: "inline", evidence: .}, view: {kind: "summary"}}' \
  app-evidence.json > app-view.json
rea inspect-analysis-view app-view.json

在结果中优先查看 normalized_result.summary.ipc,确认 IPC 通道和处理函数,再根据 normalized_result.graph 的源码位置追踪具体实现。通道或处理程序无法确定时,保留“未知”比猜测函数名更可靠;必要时再进入运行时观察。

第三步:从浏览器动作追到网络请求

如果问题发生在网页上,可以让 REA 观察真实页面,而不是只读打包后的脚本。官方浏览器指南要求使用 Chrome 系浏览器的远程调试端口,Linux 示例命令如下:

google-chrome \
  --remote-debugging-port=9222 \
  --user-data-dir=/tmp/rea-notes-browser \
  https://rea.tools/examples/notes-web/

列出页面目标后,捕获 10 秒的页面、可访问性文本和 JSON 结构:

npx -y rea-agents@latest list-browser-targets \
  http://127.0.0.1:9222 --json

npx -y rea-agents@latest inspect-web-page \
  http://127.0.0.1:9222 TARGET_ID \
  --observation-ms 10000 \
  --include-accessibility-text \
  --include-json-body-shapes --json

需要定位脚本来源时,再加 --include-script-sources。官方示例中,页面导出动作触发对 notes.json 的 GET 请求,脚本读取 notes[] 后组装 CSV。要记住观察窗口只覆盖捕获期间发生的请求,早于捕获开始的网络活动不会自动补回。

第四步:需要原生分析时,再选择提供方

原生二进制分析的前置条件比 JavaScript 更重。先列出当前环境可用的提供方和能力:

rea providers --json
rea capabilities --json
rea doctor --provider ghidra --json

配置好 Ghidra、Hopper 或 IDA 后,再运行具体查询。下面的命令来自官方 CLI 指南:

rea analyze "/absolute/path/to/program" \
  --provider ghidra --json

rea function "/absolute/path/to/program" main \
  --provider ghidra --json

rea decompile "/absolute/path/to/program" 0x1000 \
  --provider ghidra --json

rea xrefs "/absolute/path/to/program" 0x1000 \
  --provider ghidra --json

REA 官方原生指南提醒,伪代码可能遗漏细节,结论应同时对照指令、常量、调用者和交叉引用。以官网 DX-Ball 案例为例,重建函数通过 3,205 个输入对比并复现了 63 个编译后字节;这是该案例的验证结果,不能当作所有目标的性能承诺。

实战中怎样判断结果是否可信

可以按下面的顺序收敛问题:

  1. 先静态、后运行时。 先读取文件、模块和调用关系,只有静态证据不足时才启动页面或进程观察。

  2. 先小范围、后扩展。 先查一个功能或一个模块,再扩大到完整应用,避免一次生成难以阅读的大型 Evidence。

  3. 把未知项写出来。 未解析的 IPC、调用目标或数值应保留为限制,并转化为下一条调查问题。

  4. 保存可复用结果。 原生分析可以用 --snapshot 保存结果,后续在目标字节、参数和提供方一致时复用;Evidence 也可以导出后进行比较。

  5. 只分析获授权目标。 运行时捕获可能以当前用户权限执行或交互目标,Hopper、IDA、JEB 等商业工具的许可也需要由使用者自行取得。

如果后续要把 REA 与其他 MCP 服务放进同一套 Agent 编排,七牛云 MCP 使用说明列出了标准 MCP 的 SSE 与 HTTP-Streamable 接入方式;这属于外围接入参考,REA 的本地安装、目标分析和权限边界仍以 REA 官方文档为准。

结语

REA 实战最稳妥的入口是已解包的 JavaScript/Electron 应用:不需要先装反汇编器,就能从模块、IPC 和源码位置建立第一条证据链。浏览器分析适合追踪页面动作与网络请求;原生二进制则要把提供方、文件格式、伪代码限制和交叉引用一起纳入判断。本文数据和版本信息截至 2026 年 10 月 15 日,后续使用应以 REA 官方 README、6.5.0 Release 和官方指南为准。

参考资料