看到一个竞品应用里的功能做得很漂亮,想知道它是怎么实现的,手里却没有源码。过去这条路只有专业逆向工程师能走:打开 IDA 或者 Ghidra,一行一行读反编译出来的伪代码,几天时间搭进去,普通开发者根本碰不起。这周 GitHub 上一个叫 REA 的项目把这个门槛拉到了地板上。它把逆向工程的工具链打包成一个 MCP 服务,Claude Code、Codex、Cursor、Gemini CLI 这些 Agent 接上以后,可以直接检查本地应用、JavaScript 和 Electron 包、.NET 程序集乃至原生二进制文件,而且返回的不只是结论,还有每条结论背后的证据和已知限制。这个仓库 2026 年 4 月 14 日才创建,到 11 月 11 日星标数已经冲到 445,333,fork 超过 10.9 万,是今年增速最猛的开源项目之一。我把它的 README、安装文档和免责声明完整读了一遍,这篇文章回答三个问题:它到底是什么,三分钟怎么接上,以及它的能力边界画在哪里。
REA 是什么:一个 MCP 把逆向工具链接进 Agent
REA 的全称是 Reverse Engineer Anything,官方定位一句话:一个面向逆向工程的 MCP,覆盖二进制、应用和运行时行为。它的使用方式不是打开一个图形界面自己点,而是让你的 Agent 通过 MCP 协议调用它的分析工具。你向 Agent 提一个自然语言问题,比如搞清楚某个笔记应用的搜索功能是怎么实现的,展示证据,然后为我的项目写一个类似功能,Agent 就会调用 REA 去检查目标应用,追踪相关代码,把发现连同证据一起带回来,再基于这些材料解释行为、写出实现并跑测试。
项目的基础信息值得先摆出来。仓库地址是 github.com/morluto/rea,MIT 协议,2026 年 4 月 14 日创建,到本文写作时正好七个月,已经攒下 445,333 个星标和 109,932 个 fork,发布了 39 个正式版本。第三方 GitHub 趋势聚合站把 2026 年第 45 周的星增榜首记给了它,记录的单周增量约 2.5 万。这个增速在开源历史上非常罕见,官方站点是 rea.tools,npm 包名是 rea-agents,源码、文档、展示案例都在仓库里公开。
技术上它支持的 Agent 包括 Claude Code、Codex、Cursor、Gemini CLI、Grok Build,文档里还有其他 Agent 的手动接入说明。安装过程会把 REA 的 MCP 服务注册进你选的 Agent,同时写入配套的工作流指令,并且对已有配置做备份,装完需要重启 Agent 才能生效。所有分析都在本地运行,目标文件不上传到任何云端,这一点对要在公司代码或者客户系统上使用的人来说是硬要求。
它对自己的能力边界也描述得很清楚。原生二进制的深度分析依赖外部引擎,可以复用你机器上已有的 Hopper、Ghidra、IDA 或者 Kuna 安装,安装向导也可以在征得同意后替你装 Hopper。而 JavaScript 和 Electron 应用的静态分析完全不需要任何原生引擎,开箱即用。这个设计意味着零配置就能先跑起来一类任务,更深的活再接重型工具,学习曲线被拉平了不少。
上手只有三条命令
官方给出的最短路径只有一条命令。机器上装好 Node.js 和 npm 以后,执行 npx rea-agents setup,向导会让你选择要接入的 Agent,列出它准备改动的内容,等你确认之后才落盘,并且自动备份原有配置。装完重启 Agent,REA 的工具目录就出现在 Agent 的工具列表里了,整个过程不需要手动编辑任何配置文件。
bash
npx rea-agents setup
第二条命令面向不想配 Agent、只想在终端里直接跑的人。它可以检查一个解压出来的 JavaScript 或者 Electron 应用目录,也可以直接检查 ASAR 包,输出是结构化的 JSON,包含模块清单、导入关系、Electron 的进程边界,以及每一项判断对应的证据。Windows 下把路径换成类似 D:/apps/example 的形式即可,其他平台传绝对路径就行。
bash
npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json
第三条命令解决长期使用。用 npm install --global rea-agents 装一个常驻的 rea 命令,以后跑 rea --help 看全部子命令,跑 rea update 升级。更新这件事在这个项目上不是可选项,七个月发了 39 个版本,修复节奏很快,官方建议保持最新,用 npx 方式接入的人则跑 npx rea-agents@latest setup 刷新注册。用 Bun 的人注意,全局更新要求 Bun 版本不低于 1.2.17,旧版本需要先手动升级 Bun 本身。升级器对输出做了上限控制,标准输出和错误输出合计最多保留 4 MiB,超量的元数据响应会被拒绝,避免一次异常输出把终端撑爆。
还有一个细节值得单独说。通过 npx 这类包装器运行时,要保留它的缓存条目,并且从目标项目之外的可信目录执行获取命令。这两条写在安装文档里,目的是让供应链审计和权限边界保持清晰,别把分析工具的可执行文件顺手扔进被分析的项目里,否则后续排查问题时连工具本身的来源都说不清。
四类分析对象,依赖各不相同
REA 官方列出的分析对象分四类,每类的返回内容和额外依赖差别很大,动手之前先对照这张表判断自己的场景落在哪一行。
| 分析对象 | 返回内容 | 额外依赖 |
|---|---|---|
| 原生二进制文件 | 反编译结果、调用关系与逐条证据 | Hopper、Ghidra、IDA、Kuna 四选一,可复用已有安装 |
| JavaScript 与 Electron 应用 | 模块清单、导入关系、Electron 进程边界与证据 | 无,静态分析开箱即用 |
| .NET 程序集 | 程序集结构与行为分析 | 视目标而定,以官方文档为准 |
| 网站与前端应用 | 前端代码与运行时行为检查 | 视目标而定,以官方文档为准 |
表里最该盯住的行是第二行。JavaScript 和 Electron 方向不需要任何重型依赖,意味着今天桌面上大量的 Electron 应用都在零配置射程之内,官方给出的终端示例恰好也是这一类,一条命令就能拿到模块图和边界清单。而第一行的原生二进制分析才是传统逆向的主战场,REA 在这里扮演的不是替代者,而是调度者:它不自己实现反编译器,而是把 Hopper、Ghidra、IDA 这些成熟引擎接到 Agent 手上,让 Agent 学会什么时候该调用哪个工具、怎么把多个工具的输出拼成一条完整的证据链。
这个取舍很务实。反编译器是积累了几十年功力的领域,重写一遍没有意义,真正的增量在编排层:让 Agent 理解任务、选对工具、读懂输出、继续追问。对使用者的直接收益是,你不需要先成为 Ghidra 专家才能从 Ghidra 里拿到答案,Agent 会替你完成中间那一大段机械劳动,而你只需要判断结论和证据是否站得住,把省下来的时间花在真正需要经验的地方。
它改变的不是工具,是逆向的门槛
传统的逆向工程是安全研究员和逆向工程师的手艺活。面对一个没有源码的二进制,专家打开反编译器,从入口点开始读伪代码,识别库函数,还原数据结构,标记关键路径,整个过程高度依赖个人经验,一个熟练专家和一个新手做同一个目标,产出能差出一个数量级。这个领域的核心工具几十年没有本质变化,变化的只是谁有资格使用它们。
REA 这类项目改变的是门槛而不是工具本身。反编译还是那些反编译器在做,但调度权从专家手里交到了 Agent 手里。Agent 不知道疲倦,可以同时开几条调查线,把不同工具的输出交叉验证,把中间产物整理成结构化的发现。人在这个流程里的角色也变了:从亲自读每一行伪代码,变成提出好问题、审查证据链、判断结论是否成立。判断力还在人这边,机械劳动去了机器那边,分工反而更清楚了。
这个变化对普通开发者的实际意义可以列得很具体。想搞清楚一个老旧内部系统的某个行为,源码早就失传,可以直接让 Agent 去检查。想知道某个依赖库在运行时到底干了什么,不用等供应商回复,自己先看一遍。做互操作或者系统迁移项目时,可以先把对方的行为摸清楚再动手写代码。这些场景过去都要排队等专家,现在可以先自助完成第一轮摸底,把专家时间留给真正需要判断力的部分,项目排期也能因此往前挪。
设计上最值钱的两点:证据和边界
读完整个 README,我认为这个项目最值钱的不是接了多少种工具,而是两条贯穿始终的设计原则。
第一条是证据。官方反复强调,分析结果会带上每条结论背后的证据和已知限制,这在 Agent 场景里是刚需。大模型会犯错,工具会误判,如果 Agent 只吐回一个结论,用户根本无法判断该不该信。把证据一起返回,意味着 Agent 可以拿着证据继续追问,用户可以抽样核对,结论的可信度变成了可以检查的东西。官方给出的调查流程图也是这个结构:Agent 提问,REA 检查目标并追踪代码,返回代码位置、引用关系和明确的未知项,Agent 基于这三样东西去解释、实现和测试。未知项被显式列出来,这一点比很多只报喜不报忧的 Agent 工具诚实得多。
第二条是边界。README 开头专门有一段醒目提示:只从 github.com/morluto/rea、rea.tools 或者 npm 的 rea-agents 包获取 REA,名字相似的仓库或者被复制的 README 都不能证明下载来源是官方的。一个四十多万星的项目把仿冒警告写进 README 开头,说明供应链仿冒已经是真实存在的威胁,这个提醒本身就是值得每个开发者记住的常识。免责声明部分则把合法用途写得明明白白:合法研究、教育、互操作、软件保存,以及分析你自己拥有或获得授权的软件。对于 IDA Pro、Hopper、JEB 这类商业工具,文档明确说 REA 不授予任何许可,你必须合法获得授权,破解版和共享密钥不在授权范围内。把丑话写在前头,反而是成熟项目才有的底气。
上手前要知道的几个坑
文档里散落着几个容易踩的坑,集中捞出来省得再翻。
Node.js 版本要求卡得很死,只认 22.x 且不低于 22.23.4、24.x 且不低于 24.22.1,或者 26.12.1 以上,不在这个清单里的版本直接不可用。装之前先用 node --version 对一下,版本不对先去升级 Node,别在安装向导里报错之后才回头查原因。
Linux 用户有一个额外的前置条件。Ghidra、JADX、固件工具启动以及 JavaScript 和 Electron 静态分析,都要求系统 PATH 上有一个兼容 procps 的 ps 命令,用来做进程归属检查。在精简的容器或者发行版里这个命令可能缺失或者行为不同,安装文档的 Linux owned-process prerequisite 小节给了恢复步骤,遇到相关报错直接去那一节找,不要自己猜。
MCP 的上下文开销有两个调节旋钮。默认使用紧凑的输入 schema 来减少上下文占用,需要完整字段说明和嵌套校验细节时,在 MCP 注册里把 REA_MCP_INPUT_SCHEMA_PROFILE 设为 full。输出 schema 默认完整广播,如果你的客户端对工具列表响应有大小限制,把 REA_MCP_OUTPUT_SCHEMA_PROFILE 设为 compact 或者 off。两个开关都不影响服务端的完整校验和结构化返回,只是控制广播出去的 schema 体积,上下文敏感的长会话保持默认紧凑模式就够用。
还有一条建议是上手顺序。先用 JavaScript 或者 Electron 的静态分析练手,这条路零依赖、反馈快、输出结构直观,适合建立对证据格式的感觉。确认 Agent 接入正常、证据读得懂之后,再去配 Ghidra 或者 Hopper 做原生二进制的活。一上来就啃原生分析,同时面对新工具和新引擎两重陌生,出了问题很难定位是哪一层的责任,排错成本会翻倍。
逆向工程这件事正在从一门专家手艺变成一项 Agent 可调用的基础设施。REA 的意义不在于它学会了多少种文件格式,而在于它证明了这条链路上的每一环都可以被工具化、被编排、被要求交出证据。对普通开发者来说,下次再遇到想弄明白却没有源码的东西,可以先让 Agent 上去看一圈,看清楚证据再决定要不要自己下场。