10 月 6 号之前,morluto/rea 这个仓库还不到 1 万星。到 10 月 12 号,几个中文信源给的口径是大约 11 万,也有写 12 万、13 万的。六天涨十万上下,日均一万七。Star History 那周(10/4 到 10/10)新增 78,800 星,当周所有 GitHub 项目里排第一。
先交代个态度。我不打算写"173,427 星"这种数。素材翻遍了,没有任何来源能证实它,候选里那几个特别整的数字,17 万、单日 3 万,都对不上。站得住的就一句:一周约十万星,霸榜 GitHub Trending。单日新增各源在 1.5 万到 3 万之间晃,掐一个精确值当定论没意思。
找个参照系更有感觉。年初 OpenClaw 爆发,第三天累计加了约 6 万星,那会儿就有人形容 REA "大有年初 OpenClaw 的来势汹汹"。还有一条能比的数是 npm 下载量,闭源的 Jev 没法比星标,只能这么比:Jev 前三天下载约 3.5 万次,REA 累计约 4.4 万次。
传播路径这个细节我记一下。REA 主要靠 AI 博主和科技账号扩散,不是安全社区。这既解释了它为什么热得这么快,也解释了技术圈为什么对它争议这么大。
它不是反编译器,是反编译器的调度层
先把最容易搞混的地方说清楚。REA 全称 Reverse Engineer Anything,纯 TypeScript,MIT 协议,npm 包名 rea-agents,官方注册名 io.github.morluto/rea。
它不是一个新反编译器。官方在仓库里写得挺直白:不声称能还原原始源码,不自动克隆整个应用,自己也不带反编译器。它的位置是桥。把已经存在的那些逆向引擎(Ghidra、IDA Pro、Hopper、JADX、Binwalk)封成 MCP server,让 AI Agent 直接调。
MCP 是什么?Model Context Protocol,Anthropic 那套让模型调用外部工具的协议。你在 Claude Code、Cursor、Codex、Gemini CLI 里配一个 MCP server,Agent 就多了一只手脚。REA 干的活就是把这只手脚接到逆向引擎上:Agent 用自然语言下指令,REA 翻译成对 Ghidra 或 Hopper 的调用,再把结果结构化地递回来。
图:REA 官方仓库社交预览卡:Reverse engineer anything with agents, from app behavior down to native binaries,概括了 REA 从应用行为到底层原生二进制的逆向定位。(图源:GitHub 仓库页 og:image(morluto/rea 官方社交预览图) repository-images.githubusercontent.com/1209966933/…
支持的目标清单比想象里全:
- 原生二进制:Mach-O / ELF / PE,macOS 的 .app
- 归档包:ZIP / APK / IPA / ASAR
- Electron / JavaScript
- .NET 程序集
- 网站(走本地 Chrome DevTools 端点)
- 固件、网络抓包、WASM / EVM 字节码
深度原生分析要求本机已经装了 Hopper、Ghidra 或 IDA。纯 JS 和 .NET 的静态分析不需要额外引擎,装完就能用。
图:README 展示 REA 在 Hopper 中启动分析桥接、检视原生二进制的实机截图,直观呈现 MCP 连接层如何驱动既有逆向引擎。(图源:GitHub README 正文配图(morluto/rea docs/assets) github.com/morluto/rea…
真正让它跟一堆"一键反编译玩具"拉开距离的,是证据模型。REA 返回结论时给每条打标签,observed / derived / inferred 三档:工具直接给出的事实、由事实推导出来的、以及 Agent 自己的推断。每条还附证据,文件摘要(digest)、字节范围、内存地址、JSON 指针。同时把"我确定不了的部分"显式列出来,不静默脑补。
这东西的价值,写过逆向的人都懂。伪代码最坑人的地方,就是它看起来像源码,其实不是。原始变量名、类型、注释、宏、构建脚本,基本回不来。REA 把"这是我从指令里读出来的"和"这是我猜的"分开摆,等于把判断权交回给人。
上手:三步装好,然后问人话
装之前先看 Node 版本,这里最容易翻车。要求是 22.x(>=22.19)、24.x(>=24.11)或者 26+。注意不是笼统的"Node 22+",22.0 到 22.18 这一段会被卡掉。
node -v
# 得落在 22.19+ / 24.11+ / 26+ 三档里,另需 npm
npx rea-agents setup
# 或者 npx -y rea-agents@latest setup
setup 干的事比一般装包脚本讲究。它会自动探测你装了哪些 Agent(Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI、Windsurf,Grok Build 也会注册),先把要改的计划摆出来让你批准,批了才写。写入前备份原配置,用原子替换,把 MCP 注册钉死在确切版本上。对 Codex 还会额外加一行 startup_timeout_sec = 30。
装完必须重启 Agent,这一步别漏。想升级用 rea upgrade,卸载用 rea uninstall,想体检当前状态就跑 rea doctor --json(只读,不改任何东西)。
不想用 setup 脚本、要手动配的,各家客户端配置字段不太一样,核心就是把 rea-agents 注册成一个 MCP server,形态大致是这样:
{
"mcpServers": {
"rea": {
"command": "npx",
"args": ["-y", "rea-agents", "mcp"]
}
}
}
配好之后,在 Agent 里就是讲自然语言了。比如:
帮我分析这个 Mach-O,找出负责音效左右声像(panning)处理的函数,
告诉我它的字节范围,以及你判断的依据是什么。
Agent 会把这句话拆成一串 MCP 调用,REA 去驱动底下的引擎,回来的结论一条条带证据,说不准的地方它会标出来。
问法上有个心得:把"我要什么证据"写进问题里。DX-Ball 那个案例最有价值的一点,是它演示了单次提问根本不够。第一次拿到的产物只是个类型转换函数,离真相还差好几步。所以别指望一句话出结果,把它当成一个能陪你把调用链一层层往下挖的助手:先让它定位候选函数,再让它查调用方、确认入参含义、读内存常量。每一步都要求它给出字节范围和判断依据,拿到的东西才经得起核对。
一个能逐字核对的案例
官方 README 挂的招牌演示是 DX-Ball,1996 年那款 Windows 打砖块。
被还原的是里面一个很小的例程:把砖块的水平位置换算成音效的左右声像(panning)。用 C 重建出来的代码,跑过了 3205 组原始 x86 测试用例,重编译后跟原版函数有 63 个字节完全一致。
这里有个传播中经常被写错的点。那 63 是字节,属于单个函数,不是 63 个函数。原文写的是 "reproduces all 63 compiled function bytes",指的是这个函数编译出来的 63 个字节。被标题党和二手转述带跑的人不少,核对的时候注意。
而且这案例也不是一次反编译就成功的。按 lucadidomenico.studio 那篇复盘的记录,第一次跑出来的产物只是个类型转换函数,根本不像 panning。Agent 得接着往下查底层指令、找调用方、还原入参的真实含义、读内存里的常量,才写出能维护的 C 代码。之后还得用同一批输入在新旧代码上对跑,再拿当年的历史编译器去核对生成的机器码。
再补一个进度层面的数字,很多人不知道。一个更完整的 DX-Ball 重建项目(检查点 2026-10-07)维护了 55 个 C 函数,跟原程序跑了 45,380 次对比,其中只有 33 个函数达到了"编译产物字节匹配"。
所以别读成"AI 能克隆整个程序"。单函数级别的字节级还原,跟整个程序能不能克隆,中间隔着一条很宽的河。官方自己也反复强调,这是一个函数,不是整个程序。
跟已有的 MCP 工具比,差在哪
技术圈对它的质疑不小,而且质疑得有道理。
《Practical Reverse Engineering》的合著者、安全研究者 Elias Bachaalany 直接把这波热潮叫 "hype",指出 GhidraMCP、IDA Pro MCP 这类工具早就存在了。他说 REA 的差异不在技术,在"把门槛降下来了"。一条命令,非专家也能让 Agent 出证据、写出相似实现。
这话我认为基本成立。REA 没发明任何新算法,它的贡献在工程和产品层面:安装顺滑、证据规范、多引擎统一接口。对天天用 IDA 的老手,增益有限;对从没开过反编译器的人,它把门槛从"学会用 Ghidra"降到了"会打字"。
安装体验本身就是个例子。setup 那套先展示计划再写、备份、原子替换、钉版本的做法,比大多数 MCP 工具的"自己往配置文件里贴一段 JSON"成熟。这活儿不难,但做的人少,看得出作者是在认真打磨,不是赶热度。
争议:洁净室那堵墙被拆了
这波讨论里真正有分量的,是法律层面。
版权其实不保护"函数功能"本身,保护的是表达。洁净室开发(clean-room)之所以能合法做兼容实现,靠的是一堵人墙:一拨人读原代码、写规格说明,另一拨没读过原代码的人照规格写新代码,两边物理隔离。
REA 把这堵墙拆了。同一个 Agent 既读反编译产物,又写新代码,隔离没了。Hacker News 上有人把这过程叫 "IP laundering"。
法律辖区的差异大得离谱:
- 美国:Bowers v. Baystate 这类判例支持用合同(EULA)禁止逆向
- 欧盟:认定"禁止为互操作性而反编译"的合同条款无效
- 中国:2020 年司法解释允许对公开取得的产品做拆解分析,著作权法第 50 条对软件逆向研究有豁免,但明确禁止向他人提供规避手段
行业反应也很直接。据 Destructoid 报道,一个浏览器版的 GTA 5 网站上架几个小时后就被下架了,Rockstar、Activision、Bethesda 的法务团队动作都很快。而多数商业软件的 EULA 本就禁止反编译,把反编译出来的片段发给模型厂商,还可能踩到保密义务。
反方的声音同样值得听。创业公司 ArtCraft 的 Brandon Thomas 正在做洁净室的 Adobe 克隆,他的态度是明确拒绝使用 REA,理由就是怕版权诉讼。
它能做到的,和做不到的
边界这块最实在,能替不少人省下试错时间:
- 对未加壳、轻加壳的程序够用,碰上 VMP 这类强保护就吃力
- 缺少动态调试能力(虽然有个会真实执行目标的运行时抓取模式,但那跟调试器不是一回事)
- 碰不到服务端逻辑,只在你本机的东西上打转
- 工具描述本身会挤占 Agent 的上下文窗口
还有个特别容易忽略的点:本地执行不等于数据不出本地。REA 的分析确实在本地跑、不上传文件,但它把结论递给对接的 Agent 和模型,这一步就归模型厂商的数据政策管了。官方也提示了这一点。
另外要分清两种模式。静态分析 JS / .NET 是只读文件、不运行程序;运行时抓取会以你当前的权限真的启动或交互目标程序。分析来路不明的样本之前,先把这两者分清楚,别在沙箱外面手一抖把它点开了。官方免责声明把合规责任全归到发起命令的用户身上。这话不是套话,是真会落到你头上。
最后说两句
REA 这波热度里,我一直没太想明白的是它为什么火在 AI 圈而不是安全圈。同类的 MCP 工具早就在了,技术上也谈不上新,真正变的只有一件事:门槛。门槛一降,参与的人就从"会逆向的工程师"变成了"会打字的任何人"。
这大概也是争议的根源。护城河这件事,多数报道的共识是它从"你看不到我的代码"挪到了"你拿不走我的服务能力和业务理解"。这话对不对,现在没人拿得出证据,只能等下一批真实案例。哪天有人拿 REA 把某个还在卖钱的闭源软件啃出可维护的工程,那个答案才算落地。
参考链接
- GitHub:morluto/rea 仓库主页与官方定位说明 github.com/morluto/rea
- GitHub Raw:REA 官方安装文档(Node 版本、setup 行为与手动 MCP 配置) raw.githubusercontent.com/morluto/rea…
- mallory.ai:REA 证据模型 observed/derived/inferred 与本地执行边界 mallory.ai/stories/01a…
- lucadidomenico.studio:DX-Ball 音效声像函数还原复盘与项目进度数据 lucadidomenico.studio/en/blog/rea…
- 36氪:REA 星标增速与各源口径差异 36kr.com/p/402239499…
- 投资界:REA 与 OpenClaw、Jev 热度对比及传播路径 news.pedaily.cn/202610/5701…
- 36氪(英文版):洁净室争议、法律辖区差异与能力边界 eu.36kr.com/en/p/402284…
- 投资界(第二篇):Bachaalany 质疑与 Brandon Thomas 拒绝使用 REA news.pedaily.cn/202610/5700…