Reverse Engineer Anything 怎么用:从安装到验证证据

“Reverse Engineer Anything”这个名字很容易让人误会,以为把程序丢进去,AI 就能吐出一份源码。我看了项目 morluto/rea 的说明,实际做法要务实得多:它给编码 Agent 接上一套 MCP 工具,使 Agent 能围绕应用行为、JavaScript、.NET 文件或原生二进制逐步取证。能否分析到某个函数、某条调用链,还取决于目标格式、宿主系统、所选分析器和运行权限。标题里的 Anything,不应读成无条件的技术保证。

如果关心的是给游戏做 Mod,那属于另一类任务:本站的 Universal Modder 使用指南 讨论的是面向游戏模组的 Agent 工作流,不能把两套工具混为一谈。

REA 在 Hopper 中分析原生二进制的官方示意图

#安装前,先认准入口

项目 README 特意提醒:以 官方仓库、rea.tools 和 npm 上的 rea-agents 为准;名称相近、README 相同的仓库,并不能证明下载包来自原作者。具备 Node.js 和 npm 后,官方给出的启动命令是:

1
npx rea-agents setup

安装器会让使用者选择 Agent、检查拟修改的配置并确认,同时备份原有配置;完成后需要重启 Agent。它支持 Claude Code、Codex、Cursor 等客户端,但不同客户端的注册位置并不一样,故不建议照抄旁人的 MCP 配置覆盖自己的文件。官方的 安装说明 还区分了 npm 已发布版本和仓库主分支:看到演示视频中的能力,不等于本机安装的版本已经带有该能力。

REA 能做的事也有层次。静态检查 JavaScript、.NET 文件时,分析的是提供的文件;运行时采集则可能启动目标程序并与之交互,使用的是当前账户权限。原生二进制往往还要接 Hopper、Ghidra 或 IDA 等外部分析器,REA 不会凭空替人安装、授权和配置这些软件。可先读 官方 CLI 文档,弄清当前任务选的是哪类 provider,再检查实际可用的工具,而非看到 MCP 已连接就断言“原生逆向已经就绪”。

#Windows 用户尤其要看范围

Windows 上的 Ghidra 支持在官方文档中仍标为实验性的 x64 P0。安装说明限定了现阶段的格式、文件系统与操作范围:例如原生 x86/x64 PE 程序及 DLL 属于支持对象,Windows P0 的分析操作仍为只读;其他平台支持的标注功能不能据此推断在 Windows 上也能用。Ghidra 还需要单独安装,并满足其 JDK 和本机反编译组件要求。所谓“一键安装、全平台逆向任意文件”的教程,若跳过这一段,最容易让人在配置阶段碰壁。

我会把第一轮尝试限定在自己编译的微型程序或有明确许可的开源样例。先记下预期行为,再让 Agent 找到与行为对应的函数或调用位置,请它给出文件、地址、反编译结果和推断依据;最后由人对照样例源码或重现实验。这样才能区分“Agent 给出了一个听起来合理的故事”和“找到了能核对的证据”。官方 展示案例 提到 DX-Ball 的声音声道计算、Notion 的 Electron 剪贴板桥接等分析方向,展示的是具体取证路径,不是自动复刻整款软件。

#先用静态分析走一遍

想少碰环境问题,可先用自己开发、已经打包的 Electron 小程序练习。项目的 CLI 文档 明确支持对解包后的应用目录或 ASAR 文件进行静态分析;普通 Web 项目的源码目录不能当然视作 Electron 应用包。以下是文档中的命令形式,路径换成自己的样例,不要把可疑程序运行起来:

1
npx -y rea-agents@latest analyze-javascript-application "D:/examples/my-electron-app" --json

这一步返回应用模块、导入关系、Electron 边界以及相应 Evidence;静态分析本身不启动目标程序。完整结果对大型应用可能相当大,官方举过数百 MB 的例子,不宜整份灌进 Agent 上下文。若已安装 rea,可以按文档将结果存到文件,并从完整 Evidence 投影摘要:

1
rea analyze-javascript-application "D:/examples/my-electron-app" --json > app-evidence.json

下一步按照 官方 CLI 页面 的 inspect-analysis-view 输入约定制作 view JSON,选择 summary,或对 modules 指定 offset、limit 分页。这里特别要分清两件事:app-evidence.json 才是原始分析结果,摘要只是它的视图。怀疑某项功能经过主进程 IPC 调用时,至少回到具体模块和导入边核对,不能把摘要中的“相关模块”径直写成“已经确认调用”。对自己编写的示例程序,我会故意放一个 ipcMain.handle 处理器和一处 renderer 调用,然后看它是否能找到两侧,并与源码逐项对照;这是建议的复现实验,并非本文已经跑出的结果。

如果对象是 .NET PE/CLI 程序集,工具另有 inspect-managed-artifact 和 inspect-managed-members,读取程序集身份、成员和 CIL,无须先配反汇编引擎;这与 analyze-javascript-application 不是同一条流程。可分别执行 rea inspect-managed-artifact "D:/examples/Example.dll" --json、rea inspect-managed-members "D:/examples/Example.dll" --json,再用 --type Example.Parser 缩小查询范围。官方文档说它们不加载、也不执行程序集,但不能把“静态读取文件”误说成“文件可信”。.NET 命令定义 列出了完整参数。

#原生二进制需要单独的分析器

rea providers --json 与 rea capabilities --json 可以先查看可用 provider 与操作清单;它们的返回结果比“我已装好 REA”更能说明本机能分析什么。针对已有 Ghidra 环境,官方给出的命令链是 rea doctor --provider ghidra --json 检查就绪情况,再运行 rea analyze "D:/examples/sample.exe" --provider ghidra --json;确认函数位置后,可用 rea function、rea decompile、rea xrefs 追踪。search 搜字符串未必找到执行路径,反编译输出也不能代替运行验证,尤其经过优化或混淆的程序,变量名和控制流可能已经丢失。命令与范围见 CLI 原生分析章节。

Windows 用户要单独看 Ghidra P0 文档:这是实验性、只读范围,且要求合适版本的 Ghidra、JDK、原生反编译组件与受支持的本地目标。若自动选择返回 ambiguous,不要来回重试同一命令,按错误里的候选 provider 显式选一个;provider_unavailable 则先修对应环境。rea doctor 不加范围时会检查多种可选组件,即使总体显示不健康,也不等于当前的静态 JavaScript 流程不能用;选 --provider、--client 或 --skill 可分别定位问题。官方就绪诊断表 对这些情况有明示。

#一份能接受质疑的结论该怎么写

假设任务是“这个按钮是否调用了系统剪贴板”。我希望看到四项材料:第一,样例包的路径、版本和 SHA-256,证明后来核对的是同一份文件;第二,按钮事件所在模块和调用语句;第三,通向主进程处理器的消息或调用关系,写明哪段来自静态证据、哪段只是推测;第四,在获得授权的样例上观察按钮动作及结果。若只找到一个名为 clipboard 的字符串,最多能说“存在相关字符串”,不能推断完整调用链,更不能推出安全漏洞。这样记录虽麻烦,却能让读者在遇到不同构建版本时知道结论在哪一步失效。

项目 README 的演示展示了 DX-Ball、Electron 程序和 DOS 程序等不同对象;每个案例依赖的分析方式并不相同。给自己定一个小目标,例如“解释一个已知函数的输入输出”,比一开始就要求“复刻整个软件”更容易验证,也更符合工具实际能力。

#几个容易把人带偏的故障

MCP 已连上,但打不开 PE 文件。 先检查 rea providers --json 和针对所选 provider 的 rea doctor --provider ghidra --json,区分注册成功与原生引擎就绪。装好 npm 包并不代表已经装好 Ghidra;看到某个工具名也不说明目标的格式受支持。大二进制初始化可能需要较久,官方还列有 REA_GHIDRA_STARTUP_TIMEOUT_MS 等等待配置;但盲目延长超时不能解决缺失 JDK、路径错误或本机反编译组件不匹配。先按诊断报告逐项处理。

视频里可以用,自己本机却找不到对应功能。 仓库主分支可能比 npm 最新发行包先更新。核对 rea --help、实际安装版本和 官方“发行版与主分支”说明,不要直接以仓库首页当前截图反推自己电脑上的命令。尤其不要因为别人的教程用了 @latest 就在有长期配置的工作环境里不加审核地更新。

找到了同名函数,却回答不了真实行为。 编译器可能内联、消除或重命名函数,Electron 包中的模块也可能只是声明了一项能力,并没有在目标操作中实际走到。把搜索结果当作假设,沿引用关系和条件分支继续查,最后回到可控样例观察行为。分析结果中如果明确标注“推断”“不支持”“证据不完整”,文章也应照录这一局限,不应自行补成结论。

分析陌生程序是否安全? 静态读取与运行时采集要分开。README 说明静态 JavaScript/.NET 检查不执行目标,但 runtime capture 会以当前用户权限启动或交互目标。让 Agent 去运行未知下载包不是一条“试一下才知道”的捷径;先确认授权和隔离环境,并且不让分析账户持有生产凭证。对于不信任的软件,缺乏隔离条件时宁可止步于静态证据。

这篇文章依据官方文档整理,没有把本机安装或二进制分析写成已完成的实测。逆向工程还涉及版权、许可协议和目标系统的授权问题;工具能够读取文件,不能替使用者取得分析权限。若是准备上手,先确认来源、版本、provider 和目标授权,再要求 Agent 为每条结论留下证据,比“逆向一切”的口号更有用。

资料:REA 官方仓库 · 安装说明 · CLI 指南