REA:把逆向工具接到 Agent 手上之后

AI项目5小时前更新 onemo
5 0

REA 的全名是 Reverse Engineer Anything,仓库上挂着 400,000 颗星、MIT 授权。它把散在逆向工作流里的老工具接到 AI 编程助手后面,让 Agent 自己判断什么时候该用哪一个。值不值得跟,取决于你想要的是「少点几下」,还是「真的会逆向」。

README 里的示例:Hopper 中打开的 Mach-O 文件,REA 调用的就是这类工具
README 里的示例:Hopper 中打开的 Mach-O 文件,REA 调用的就是这类工具

它没发明逆向,它做的是接线

官方用一句话概括自己:一个 MCP 服务,覆盖二进制、应用与运行时行为。翻成中文就是——原生程序、JS/Electron 应用、.NET 程序集、网站,都能从同一个入口查。

关键在动词。它不是新的反编译器,也不是新的分析引擎,而是把 Hopper、Ghidra、IDA、Kuna 这些早就在用的工具包装成 Agent 能调的接口,再补一层「什么情况该用什么工具」的流程说明。

换句话说,它卖的是调度,不是算法。

四类目标,四种代价

能碰的目标有四类,但成本完全不一样。静态的 JS 与 .NET 分析只读文件、不运行程序;运行时捕获则要真把应用跑起来,才能观察行为。

原生二进制那条最重:先配好 provider,Linux 上还要 Ghidra、JADX 和固件工具能正常启动,依赖一个 procps 兼容的 ps 出现在 PATH 里。任一条不满足,那条路就是断的。

装起来一条命令,跑起来不止

安装确实只有一条:npx rea-agents setup。它往你的 Agent 里写 MCP server 配置和配套的工作流说明,覆盖 Claude Code、Codex、Cursor、Gemini CLI、Grok Build 等,改动前会备份原配置。

但装完不等于能跑。第一次做原生分析时,它会下载 Ghidra;为了跑 Ghidra,还要再拉一套 JDK。点按钮的那一刻,并不知道这些在后台发生。

另一个容易忽略的是上下文成本。工具接口很多,全挂上会吃掉大量 context:慢、贵,而且容易让模型分心去调不该调的工具。README 给了压缩方案,也就是用环境变量切换紧凑的输入 schema,默认就开着。

加法实验暴露了它真正的分工

有位 UP 主做了个很干净的对照:用 C 写一个 7 + 5 = 12 的加法程序,编译成 a.out,删掉源码,再让装了 REA 的 Agent 还原成 C。

结果几乎一模一样。打开工具调用看,过程是三步:先用 file 认出这是 macOS 上的 64 位 arm 可执行文件;再用 Ghidra 反编译出接近源码的伪代码;最后让大模型整理成好读的 C。

三步里,前两步是用了二十年的老工具,第三步是语言模型。REA 的贡献在第零步——让 Agent 知道这三步该怎么串起来,以及每步的输出该怎么读。

变量名的误会

Ghidra 反出来的名字通常是 param_1、param_2,Agent 交回来的却是 a、b、result。看上去像「把原始变量名读回来了」。

那位 UP 主又做了一次对照:故意改掉源码里的变量名,加些无用代码,重新编译。Agent 还原出来的还是 a、b、result 这类常见命名。

结论挺清楚:编译之后名字本来就会丢,模型是在根据程序行为猜一个「人类常写」的名字。读起来舒服,但这不是从二进制里读回来的事实。凡是把这类命名当证据的评测,结论都站不住。

谁真的受益,谁不必换

已经会 Ghidra 或 IDA 的人,收益可能是负的:多一层等待、多一份输出要读、多一套配置要维护。原本点两下就能看的东西,现在要先说服一个模型去点。

真正的受益者是另一批人——知道自己想搞清楚什么、但不会读汇编的人。问一句「这个功能是怎么触发的」,拿回一份带证据的报告,比从零学 Ghidra 快得多。

还有批量场景:同一套流程要跑几十个样本时,把排期交给 Agent 比人肉重复点界面划算。

它能替代 Ghidra 吗?

不能。它调用 Ghidra。Ghidra 缺席时,原生分析那条路直接走不通;而它给出的每条结论,最终证据仍落在 Ghidra 的输出上。

REA 值得看的不是「逆向一切」这个口号,而是它示范了一件事:把专业工具的调用顺序写成 Agent 能执行的流程,比重新训练一个模型见效快得多。至于 400,000 颗星里有多少是冲着「两句话拆软件」来的,那部分期待多半会落空。胖桃AI 的开发效率栏目里也收过几款同类工具,可以放在一起对照。

© 版权声明

相关文章