金属板上的 REA 三个字母,一道红色裂纹斜穿过去

今天花一整天,实测了一个开源的逆向分析工具。

最近 REA 火得离谱。10 月 6 号还不到 1 万星,10 月 12 号已经 11 万——六天涨了十万。我写这篇文章的时候,它已经过了 20 万;等我把它发出来,GitHub 上已经是 43 万。

REA 的 GitHub star 增长:10 月 6 日不到 1 万,10 月 12 日 11 万,11 月 4 日 20 万+,11 月 5 日 43.2 万

六天涨十万——我还没测完,它又翻了一倍

它的介绍里写得更响:agent 优先、两百多个原子能力、可以分析「任何二进制」。我拿手上一份单片机固件去试。

结论是:它没有宣传的那么神;而它承诺的那些事,大模型自己做得更好。

三个实测结果

同一份固件,它的分析接口报出 87 个函数;我绕开它,直接用 Ghidra 无头模式强制导出,是 343 个。差的不是精度,是视野——它的工具集里没有「强制反汇编」、没有「创建函数」、也没有「修正语言规格」。Ghidra 没认出来的,它就永远看不见。

那份 3.5KB 的引导程序有 46 项中断向量表,Ghidra 只认出 1 个函数,它也只能报 1 个。

批量反编译,多数返回「没有已加载的源码映射」。

我喂它一个校验完全合法的 HEX 烧录件,它直接报「不支持的二进制格式」——而它自己的文档写着支持 HEX。

我把它的仓库交给 AI 读了一遍

光凭现象下判断不够。我把它的仓库交给 AI,让它从入口一层层往下读。读出来的结构很清楚:src/ghidra、src/hopper、src/ida 是三个引擎适配层,src/application 负责「先调谁、结果存哪、编号怎么记」,src/domain 里没有一行反汇编。它自己的开发文档也是这么写的——依赖从领域逻辑流向契约、引擎适配、工作流,再落到底层的命令行和 MCP 接口。

它那两百多个工具,本质全是转调——反编译交给 Ghidra,调试交给 GDB,动态插桩交给 Frida。它只负责发指令、收结果、编号存档。整个工具里,一行反汇编代码都没有。

发动机是别人的,它是仪表盘。

仪表盘的问题在于:只能显示发动机已经算出来的东西。

电路板中央嵌着一个仪表盘,指针亮着,线路从表盘向四周铺开

表盘能读出发动机的读数,读不出表盘之外的东西

换句话说,它是一个把三个引擎接进同一个入口的调度器。它最想卖给你的东西,就是排顺序。

所谓「编排」,正是大模型的本行

判断这段代码在做什么、这两个校验函数是不是同一套协议、状态变量为什么只有 0、1、2 三个取值——这些是推理,不是接口。

所谓「编排」,就是挑工具、读输出、决定下一步。这件事我让它干和我自己干,后者更灵活:它不会去追一条自己没预料到的线索。

它真正有价值的地方

不是分析深度,是可复核。每个操作都钉死输入哈希、引擎版本、参数和证据编号,同一份固件谁都能重跑一遍。交接和跨版本对比时,这是真本事——但它保证的是「这段输出来自这次操作」,不是「这个结论是对的」。

一天下来我把它卸了,只留下它那条可复核的流程,写进自己的技能里。

这就是我卸掉它的原因:REA 看起来很神,其实干的是大模型早就知道的逆向常识——把 Ghidra、GDB、Frida 包成一个入口,替我挑工具、读输出、记步骤。

真正值钱的只有那条可复核的流程。


网友朋友们,难道是我的打开方式不对?

要不你把我这篇文章复制给自己的 AI,让它评一评:是我要求太高,还是它真的过誉了。它要说这工具确实能逆向一切——那我认栽,把它装回去。它要说得跟我差不多,麻烦你回来说一声,好让我知道今天这一天没白花。