ARTICLE · 1206501
号称能“逆向一切”的 AI 工具爆火,狂揽近 30 万 Star:软件开发的护城河守得住吗?
2026 年 4 月 14 日,一个叫 morluto/rea 的仓库被创建,然后安静了半年。
10 月 4 日,它第一次出现在 GitHub Trending 上,当天新增 1,400 个 star。此后开始复利式爬升:10 月 7 日单日 5,602,10 月 9 日 19,375,10 月 10 日 26,572,10 月 11 日 31,255。

到 10 月 15 日,累计 257,191 star,64,641 fork。10 月 6 日到 12 日的七天里,它有五天坐在 Trending 第一的位置上。
项目名字很野——REA,Reverse Engineer Anything,逆向一切。标语是"看到你喜欢的功能,理解它怎么工作的,一直到二进制层面"。
但把包拆开看,会看到一个和名字不太匹配的事实:它一个反编译器都没写。
Ghidra 还是那个 Ghidra(美国 NSA 2019 年开源的反汇编器),IDA Pro 还是那个 IDA Pro。REA 做的是别的事。
一、它到底是什么:一句话和四层链路
先给一句话定义:REA 是一个本地运行的 MCP 服务器,把各种逆向工程后端包装成一套统一的工具,交给你的编程 Agent 调用。
MCP(Model Context Protocol)是让 Agent 调用外部工具的协议。装上 REA 之后,你的 Claude Code、Codex、Cursor 或 Gemini CLI 就多了一批工具——可以打开一个没有源码的程序,读它的伪代码、调用关系、字符串、网络行为。
整个链路是四层:
装它只要一行:
# 前提:Node.js 22.19+ / 24.11+ / 26+(23 和 25 不支持)+ npmnpx rea-agents setup# 然后重启你的 Agent。配置改动会先备份再写入。它会交互式地问你要接入哪些 Agent,展示将要做的改动,你确认后才写入——文档明确支持的客户端有 Claude Code、Codex、Cursor、Gemini CLI、Windsurf、Grok Build 等十余个。
用的时候就是一句人话:
搞清楚备忘录 App 里的搜索是怎么做的,把证据给我看,然后给我的项目做一个类似的功能。注意这句话里有个关键词是官方示例里刻意加上的:"show me the evidence"(把证据给我看)。这不是修辞,后面会讲它为什么重要。
二、它没造引擎,它造的是接线
REA 对外暴露 207 个工具,覆盖原生二进制、Go / Rust 二进制、.NET 程序集、JavaScript 与 Electron 应用、Android APK 与设备、Flutter 应用、WASM、EVM 字节码、SQLite、固件、抓包文件、逻辑信号录制,甚至网站和进程行为。
但这 207 个工具没有一个是自己实现分析算法的。它们做的事是:判断目标是什么类型,然后路由到已经存在的那个工具上。
理解这一点,就能理解它和同类方案的区别。
| REA | 按目标类型选后端 | 一个接口覆盖十余类目标 |
值得留意的是其中两类目标完全不需要外部引擎:JavaScript / Electron 的静态解析,和 .NET 程序集的 CIL 读取,都是 REA 内置实现的。这意味着只想看一个 Electron 应用的模块结构和 IPC 边界,零依赖就能跑。
所以 REA 的角色是什么
它不是"更好的反编译器",是逆向工程领域的适配层——把一堆各说各话的专业工具,翻译成 Agent 能稳定调用、且能判断可信度的接口。这类"给已有工具加 Agent 契约"的活儿,正在成为 MCP 生态里最值钱的位置。
三、真正的设计:证据契约
这一节是整篇文章我认为最值得看的部分。
REA 的文档里反复出现一个词:Evidence(证据)。每个工具的返回结果,都携带一个结构化对象,大致包含四样东西:
四个字段里,前三个都不难理解。真正少见的是第四个:coverage。
它会明确声明这次分析是 complete(覆盖完整)还是 unknown(存在未覆盖)。前者说"这段二进制我处理全了",后者说"这里我没能确定"。
这个字段为什么值钱?因为大语言模型天然会把"没找到"讲成"不存在"。
你问 Agent "这个函数有没有做边界检查",如果工具什么都没返回,Agent 很可能回答"没有边界检查"——而真实情况可能是反编译器没能处理这段代码,或者符号被剥离了,或者分析超时。中间的差别,在安全分析场景下就是事故和没事的差别。
coverage: unknown 这个字段,就是把这个幻觉堵在产出之前。
配套的三分离纪律
文档给 Agent 的指令很短:把观察(observations)、推断(inferences)、未知(unknowns)分开。
- 观察
是工具实际读到的字节、指令、字符串——不允许掺入猜测; - 推断
是 Agent 基于观察得出的结论——必须能指回具体的观察; - 未知
是这次分析没能确定的部分——被列成一等公民对象。
最后一条尤其有意思。REA 有六个引导式工作流(通过 MCP 的 prompts 能力暴露),其中一个是 audit_residual_unknowns——专门用来清算"还剩哪些没搞清楚"。六个工作流分别是:
investigate_feature | |
compare_application_versions | |
verify_reconstruction | |
trace_crash | |
audit_residual_unknowns | 清算剩余未确定项 |
prepare_bounded_process_capture |
这些工作流不增加也不减少工具,只是给 Agent 一个调查顺序的建议——Agent 随时可以直接调工具。
这一节要带走的判断
如果只能记住 REA 的一件事,记这个:它把逆向工程从"给人看的结果"改造成了"给机器读的契约"。过去的反编译器输出是给人类分析师看的(GUI、伪代码窗口、交叉引用图),人可以自己判断哪里不确定。而 Agent 没有这个直觉,所以合同里必须把"哪里不确定"写进去。
四、三个案例,看它到底能做到哪一步
官网公开了三个可独立复现的端到端案例。它们比任何演示视频都更能说明真实能力边界。
DX-Ball:63 个字节,3,205 个测试用例
1996 年的 Windows 共享游戏,用 Visual C++ 4.0 编译。Agent 跟着一个声音调用找到了 0x00406400 处的辅助函数,认出浮点常量 1.5625、500.0 和 1.0,把不完整的伪代码补成了 C。
关键在最后一步:重建出来的函数通过了 3,205 个原始 x86 测试用例,并且复现了全部 63 个编译字节。这是"等价",不是"形似"。
Notion:穿过 Electron 的三层
从渲染进程的 clipboard API 出发,穿过 preload 脚本和 IPC,一路追到主进程,最后定位到富文本剪贴板的实际格式。这个案例不需要反编译引擎,纯静态分析。
TH04:1994 年 PC-98 的 16 位代码
《东方封魔录》的弹幕环计算例程,2,139 字节,完整可执行文件 156,258 字节,Turbo C++ 4.0J 编译。从 16 位指令里恢复出固定角度与瞄准角度的计算,再和历史编译器的输出比对。
三个案例的共同点,比案例本身更重要
把它们并排看,会发现同一个套路:窄问题 → 追踪定位 → 重建实现 → 用原始二进制验证。
问题都是"一个函数"或"一条数据通路"这种窄到能被证伪的粒度; 最后都有一个可验证的答案——要么跑原始测试用例,要么和编译器输出比对。
第 ④ 步才是让结论可信的东西。那些"一句话复刻整个应用"的演示之所以好看,恰恰是因为这一步被省掉了——没有验证,剩下的就只是长得像。
五、25 万 star 是怎么来的
有意思的是:没有一篇引爆它的文章,也没有一条病毒式推文。多家追踪这件事的报道都提到,找不到单一解释。
我倾向于认为是两股力量叠加:
- 那个承诺太好懂了。
"看到别人 App 里一个你喜欢的功能,让 Agent 给你讲清楚它怎么实现的"——这句话对任何一个抄过竞品、救过遗留系统、好奇过老游戏算法的人,都直接命中。不需要理解 MCP 是什么。 - 演示视频的传播。
Agent 从二进制重建桌面应用的录屏在社交平台上扩散得很快,配上"软件开发结束了"这类熟悉的说法。
同时版本节奏也推着它往前:v4.0 在 10 月 5 日,v5.0 在 10 月 7 日,v6.0 在 10 月 8 日,v6.1 到 v6.4 落在 10 月 9–11 日之间,v6.5 紧随其后。十一天发了七个版本。其中 v6.5 加入了 Frida 运行时插桩,让 Agent 不只读静态二进制,还能追踪和修改活动进程。
一个冷静的读法
有评价说得挺准:REA 是一个包装得很好的连接器,连接的对象是那些早就存在的逆向工程工具。这话不是贬义——把二十多个专业工具统一到一个契约后面,本身就是实打实的工程量。只是它和"逆向工程被 AI 取代了"之间的距离,比 star 数暗示的要远。
六、六个该打问号的地方
1. "复刻整个应用"是演示,不是能力
如上所述。能做到的是"一个函数、一条通路"级别的重建,并且需要可验证。整应用级别的产出目前只是形似。
2. 本地执行不等于沙箱
这是最容易被忽略的一条。REA 的运行时捕获会真的把目标程序跑起来,而且用的是你当前用户的权限,和你的 Agent 处在同一权限之下。文档自己也在提示:它不是沙箱。
3. 结果会发往模型供应商
REA 不上传你的目标文件,但工具返回的结果会进 Agent 的上下文,也就进了模型供应商。官方 FAQ 写得很直白:那部分遵循供应商自己的数据政策。分析涉密程序之前,这条要算清楚。
4. 商业工具授权是你的责任
IDA Pro / Hex-Rays、Hopper、JEB 这些商业工具,REA 不提供许可证、密钥或激活权利,也不会帮你安装或更新。README 里花了不小篇幅讲这件事:破解版、盗用密钥、绕过许可限制都不被允许。
5. API 还在剧烈变动
十一天七个版本意味着工具签名、工作流、返回结果都可能在你没注意的时候变了。CLI 文档里能查到 REA_GHIDRA_STARTUP_TIMEOUT_MS 这类环境变量——大型二进制需要调高引擎启动超时,这也是"还不够稳"的侧面证据。
6. star 数不等于使用量
25 万 star、6.4 万 fork。fork/star 比约 25%,这个比例本身不算离谱,但十天内的 star 有相当一部分来自"先收藏再说"。真正跑过一次完整分析的,大概率是其中很小的比例。
七、上手:三步和一个前提
# 1. 接入(Node.js 22.19+ / 24.11+ / 26+)npx rea-agents setup# 选择你的 Agent,确认改动,重启 Agent# 2. 不依赖任何引擎,先看一个 Electron 应用npx -y rea-agents@latest analyze-javascript-application /path/to/app --json# 返回 modules / imports / Electron 边界及其证据# 3. 想长期用,装全局 CLInpm install --global rea-agentsrea --helprea update # REA 变得很快,先更新再报 bug原生二进制分析需要先有 Hopper、Ghidra 或 IDA 中的一个。Ghidra 路线要求 12.1 以上配 JDK 21+;Linux 上还需要 PATH 里有兼容 procps 的 ps。
那个前提
动手之前先问自己一句:我对这个目标有分析授权吗?README 的免责声明写得很清楚——REA 用于合法研究、教育、互操作性、软件保存,以及你拥有或被授权检查的软件。技术能力边界之外,还有一条法律边界。
写在最后
回到开头那个数字。
25 万 star 里,我相信有相当一部分人是冲着"一句话复刻一个 App"来的。这个想象很诱人,但它不是 REA 真正在做的事,至少不是它现在能做好的事。
REA 真正做成的,是一件更小、但可能更重要的事:它让逆向工程的结果,第一次被设计成给机器读的。
过去二十年,反编译器的输出都是给人看的。人坐在 Ghidra 前面,看伪代码,看交叉引用,凭经验判断"这段我信得过"还是"这里大概是反编译器没解开"。这个判断力是人类分析师的一部分,而 Agent 没有。
所以 REA 在结果里加了一层合同:这是什么(归一化解释)、凭据在哪(原始输出 + 稳定 ID)、以及哪里我不知道(coverage: unknown)。
把一个领域的产出从"给人看"改造成"给机器读",这件事的难度和價值常常被低估。它不需要重新发明轮子,但需要非常清楚这个领域里,哪些不确定性必须被显式写出来。
207 个工具会过时,版本号会继续跳,那 25 万个 star 里会有很多再也不打开这个仓库的人。但那个 coverage 字段——以及它背后"把未知列成一等公民"的思路——大概率会被后来做 Agent 工具的人抄走。
我觉得那才是这个项目值得被记住的部分。















































































