REA 是什么、怎么用:给 AI 装上软件显微镜的 10 万星开源工具

REA 是什么、怎么用:给 AI 装上软件显微镜的 10 万星开源工具

一句话结论,REA 是一个把反编译器接进 AI 编程助手的开源 MCP 服务器。给它一个本地目标和一句中文提问,它会替你反汇编、读汇编、顺藤摸瓜找接口,最后把结论连同证据一并交出来。2026 年 10 月 7 日到 12 日,这个仓库的 Star 从 9319 涨到 10.5 万,而同一时刻它的关注者只有 335 个。下面拆三件事,它到底能做什么,在 Mac 上跑一遍的真实体验,以及那 10 万颗星背后的测量结果。

REA 做了什么,为什么值得写一篇

REA 全称 Reverse Engineer Anything,MIT 许可,TypeScript 编写,作者是 GitHub 用户 morluto。它自己不做反编译。Ghidra、Hopper、IDA Pro 这些工具存在了十几年,卡点在于没人能用日常语言指挥它们。REA 补的正是这一环,把反汇编输出、伪代码、调用关系、字符串和常量整理成结构化数据,通过 MCP 协议交给 Claude Code、Codex、Cursor 这类编程 Agent。

它和其他逆向工具最大的分工差别在于证据纪律。REA 返回的每条结论都带独立的 evidence_id、原文位置区间和 limitations 字段。我在本地跑出的那份结果里,47 条语义关系之外还明明白白列了 31 条 unknown,逐条写明哪个绑定无法解析、为什么无法解析。官方 DX-Ball 案例里的一个细节很能说明这种设计的价值。Agent 第一次拿到的伪代码只有一行 __ftol() 调用,看不到输入是什么。REA 同时返回了指令视图,MOV EAX, dword ptr [[EBP + 0x8]] 暴露了那个被反编译器藏起来的整数参数,Agent 才有理由继续往下追调用者,最后还原出屏幕坐标到左右声道的换算公式。

换句话说,REA 递给 Agent 的是一张可以继续追问的地图,而不是一句让你自己判断真假的话。这一点在逆向场景里尤其关键,因为模型胡说一个函数名和胡说一段汇编逻辑,代价完全不一样。

它能拆开哪些软件

官方文档列出的目标类型有十五类,覆盖范围比名字暗示的要宽。下面这张表按依赖从轻到重排了一遍。

目标类型 REA 返回什么 前置依赖
JavaScript / Electron 应用 模块、导入关系、source map、路由、IPC 通道、原生扩展 只要 Node.js
.NET 程序集 元数据、CIL 指令、声明的原生依赖 无,纯静态读取
网站 页面结构、脚本、网络请求、截图 Chrome 内核浏览器
网络抓包(HAR) 请求响应、暴露的载荷、来源位置 HAR 文件,Linux 原生抓包需 mitmdump
原生二进制 伪代码、汇编、字符串、符号、调用与引用 Hopper / Ghidra / IDA 三选一
Android APK 清单声明、类、反编译方法、引用 headless JADX 加完整 JDK
Android 设备 设备、包、进程、日志、截图、文件传输 adb
固件镜像 分区、提取结果、转交原生分析 Linux 上的 Binwalk 或 Unblob
EVM 字节码 调度选择器、字节偏移、推断参数 Linux x64 本地载体
WASM 产物 校验、段结构、导入导出 WAT 形式 WABT 1.0.42
进程行为 终端输出、交互、退出码、文件系统观察 Linux 或 macOS 原生 PTY
崩溃记录 各线程寄存器与信号、可选映射候选 Linux x64 上的 pwntools

这张表里最有实际意义的分界线是第一条和第五条。JavaScript、Electron 和 .NET 这类目标的静态分析不碰反编译器,装个 Node 就能开工。真正的原生二进制分析必须外挂一个引擎,而 Hopper 是商业软件,Ghidra 需要配 JDK,IDA 的 Linux 与 macOS headless 支持官方标注为尚未验证。这道门槛没有因为 REA 的出现而消失。

我在 Mac 上跑了一遍

我的测试机是 macOS 27.2,Node v22.22.2,满足官方要求的 22.19 以上。装 REA 名义上只要一条命令 npx rea-agents@latest setup,但这条命令会改写你其他 AI 客户端的配置文件,所以我先跑了只读的 doctor 看环境。

doctor 的输出很坦白。node 22.22.2 与 host 两项检查通过,hopper、ghidra、ida-registration 三项全部标为 missing_analysis_engine,六七个客户端注册项显示 config_drift。结论很清楚,纯 JS 分析现在就能用,原生二进制分析得先把反编译器配好。

我建了个只有两个文件的最小 Electron 项目当靶子,目录里放一个 package.json 和一个用了 electron 与 fs 的 main.js,然后执行静态分析命令。结果有几点值得记下来。

它确实读出了结构。statistics 字段显示读取 415 字节文本、解析 1 个 JS 文件、访问 77 个 AST 节点、产出 9 项发现;semantic_graph 里躺着 47 条语义关系和 4 个函数指纹;IPC 小节认出 1 个操作、1 个字面通道、1 个主进程 handler,并给每个结论标注了源码行列。

它把不确定性摊开摆着。31 条 unknown 里有一条写得很具体,Unsupported NewExpression value. Unknown value at binding.,附上 src/main.js 第 5 行的位置。这类信息对判断结论可信度极其有用,因为你能一眼看出哪些部分模型是在推断,哪些部分有据可查。

它也有真实的稳定性问题。进程在写出 351KB JSON 之后没有正常退出,退出码指向 cleanup_incomplete,原文提示 Provider cleanup could not be fully confirmed。结果本身完整地躺在 details.partial_observation 里,能用,但这一版 CLI 收尾不干净。我又拿一个 2MB 的 Electron 应用 app.asar 试了同一命令,这次直接报 Malformed ASAR during snapshot。官网演示很漂亮,落地时得对这些边角有心理准备。

完整上手教程

第一步,确认 Node 版本

REA 要求 Node 22.19 以上、24.11 以上或 26 以上的任意一条。终端跑 node -v 看版本号,低于要求就用 Homebrew 装 Node 24 LTS,或者用 fnm 装。

第二步,装 REA 并接上你的 Agent

在终端执行 npx rea-agents@latest setup。它会让你选客户端,列出准备写入的改动,给已有配置做备份,然后等你批准。批准之后必须彻底退出客户端再重开,关窗口不算。最省事的方式是把下面这句话直接丢给你的 Agent,让它自己跑安装并汇报计划。

Install REA and connect it to this coding agent using npx rea-agents@latest setup. Show me the setup plan for approval, then verify the installation.

第三步,给一个目标和一个问题

提问要具体到一条行为。官方给的示例方向是理解某个功能如何工作,展示证据,然后为自己的项目实现一个类似版本。不要问这个软件是干什么的,要问数据导出走的是哪条路径、剪贴板写入经过了哪些层、某个计算用了什么常数。

第四步,不用 Agent 也能用 CLI

静态分析 JS 或 Electron 项目可以直接从终端跑,不依赖任何 AI 客户端。常用命令是 npx -y rea-agents@latest analyze-javascript-application /绝对路径 --json。想固定用 rea 短命令就执行 npm install --global rea-agents。CLI 支持的子命令超过一百个,涵盖从提取固件、解码 Android 资源到对比两次抓包的全流程。

第五步,需要原生分析时先配引擎

用 Ghidra 的话,先导出 GHIDRA_INSTALL_DIR 与 JAVA_HOME 两个环境变量,再用 doctor --provider ghidra --json 验证,最后跑 setup。Ghidra 要求 12.1.x 加 64 位 JDK 21 以上,Windows 上只有 x86、x64 PE 文件的实验性只读支持。用 Hopper 的话 setup 会自己探测或提出安装计划,macOS 上要先手工完成首次启动的试用或激活选择,否则无人值守分析会卡住。IDA 目前验证过的组合是 Windows 加已注册的 IDA MCP 服务。

官方三个案例说明了它的上限

DX-Ball 是最能体现协作方式的一个。目标是把这个 1996 年的 Windows 游戏用可维护的 C 重写。做法是让 Agent 用 REA 逐个函数查看原程序,还原状态和依赖,再和目标代码做对照。截至项目 10 月 7 日的检查点,已经维护了 55 个 C 函数、对原代码做了 45380 次对照、33 个函数的编译字节与原程序完全一致。其中声音左右声道定位那个函数覆盖了 0 到 640 的每一个整数位置乘以五档声道缩放,共 3205 个行为用例全部通过。

CTF 案例展示了它在安全领域的直接用途。目标是一个 15248 字节、被剥掉符号的 x86-64 ELF 文件。Agent 顺着字符串找到校验函数,把 36 个字符排成 6×6 网格,还原出 26 组掩码与目标和的对应关系,写 Python 脚本交给 z3 求解,最后用进程捕获确认原程序输出了 Correct。同样值得留意的是方法,官方明确写了字符串、函数和常数是在阅读出题人源码或题解之前先分析出来的。

Notion 案例则是 Electron 应用的标准套路。Agent 从页面能看到的 clipboard.write 起手,解析 preload 里的包装函数发现它调用 ipcRenderer.invoke,拿到通道名 notion:clipboard:write,再到主进程里找到对应的 ipcMain.handle 注册点,最后落到 Electron 的剪贴板写入。整条链路都有源码位置可查。

三条真实价值,三条硬边界

价值第一条是门槛的位移。过去要读懂一段汇编,你需要同时掌握指令语义、调用约定和数据结构布局。现在你需要的技能变成了会不会提问、会不会给 Agent 补上下文。这个位移是真实的,因为 REA 把定位、取片段、整理证据这些机械动作自动化了。

价值第二条是证据可追溯。每条结论都带编号、位置和限制说明,这在安全研究和合规审查里是硬需求。一个说不清来源的结论在报告里没有分量,而 REA 的输出天然带着可复核的坐标。

价值第三条是覆盖面。同一个 MCP 接口既能看 JavaScript 和 .NET 这类不用引擎的目标,也能挂上 Ghidra 处理原生二进制,甚至还有固件、EVM 字节码和进程行为捕获。工具链统一之后,切换目标的心智成本明显下降。

边界第一条,它不还原源码。REA 给的是定位信息加代码片段,不是一份可以直接编译的完整工程。DX-Ball 那个项目是团队照着 REA 的结论从零重写再逐函数对照,不是工具自动吐代码。

边界第二条,原生分析依然贵。你得自己有 Ghidra 或 Hopper 或 IDA,得配 JDK,得处理启动超时。大二进制还要手工调 REA_GHIDRA_STARTUP_TIMEOUT_MS 这类参数。这道门槛属于逆向工程本身,REA 没有也无法替你跨过去。

边界第三条,成熟度。npm 上 rea-agents 从 7 月 12 日首次发版算起只有 31 个版本,其中 8 天内连发 11 个版本、4 天内连发 3 个 major。版本迭代这么快,一方面说明修 bug 勤快,另一方面说明接口和行为都还在动。我在一个下午就撞上了 Malformed ASAR 和 cleanup_incomplete 两类问题。

10 万颗星是怎么来的

这个项目的数据曲线值得单独看,因为它和工具本身的质量是两件事。我按发布时间戳独立复核了一遍,下面是 GitHub API 和 npm 注册表在 2026 年 10 月 12 日上午的读数。

指标 读数 对照
Star 数 105660 10 月 9 日 36003,10 月 11 日 83089
Fork 数 23266 10 月 7 日前 86 天累计约 1390
关注者(watchers) 335,占 Star 的 0.32% 只被收藏的健康仓库通常接近 2%
贡献者 105,占 Star 的 0.10% 仓库建立于 2026 年 4 月 14 日
最近 100 条事件跨度 95 秒 其中 71 条 WatchEvent、23 条 ForkEvent
npm 上周下载 73651 @modelcontextprotocol/server-filesystem 同期 447296

把 100 条事件压进 95 秒这个读数换算下来,大约每小时 2700 次关注或复刻。这个速率没有昼夜波动,德国一个技术团队在 10 月 11 日做过同样的测量,他们在 UTC 凌晨三点、六点、九点三个时点分别读到每小时 310、302、367 次复刻,连续三天夜里曲线是平的。真实读者的推送会跟着时区起伏,机器不会。

再看配套指标。10.5 万颗星配 335 个关注者,比例是 0.32%,健康仓库通常在 2% 上下。贡献者 105 人,占 0.10%。Hacker News 上关于这个仓库地址的讨论帖一共四条,最高 4 分。技术本身是货真价实的,MIT 许可、无安装钩子、无遥测上报,代码写得很扎实。但这些数字合在一起说明,Star 反映的是被推送的曝光量,而非真实使用量。判断一个开源项目值不值得投入,Star 数是最不可靠的那个指标。

合规提醒

拆别人的软件在多数司法辖区都不是纯粹的技术问题。欧盟 2009/24/EC 指令第 6 条给出的反编译例外有四个前提,信息无法从其他途径获得、行为人持有合法使用副本的授权、只针对实现互操作性所必需的部分、目的限于实现互操作。第 8 条虽然规定推翻上述例外的合同条款无效,但实际许可协议仍在这么做。美国方面,绕过技术保护措施落在版权法第 1201 条管辖范围内。REA 官方也在文档里把静态读取和运行时捕获分得很清楚,后者会以你的用户权限真正启动并操作目标程序,处理来源不明的软件之前要分清这两种模式。

还有一条容易被忽略的数据边界。REA 的分析确实在本机完成,但结果会交给你的 AI 模型,受模型厂商的数据政策约束。原始文件不出本机,不代表分析结论不外传。

常见问题

REA 能把商业软件完整还原成源代码吗?
不能。它输出的是定位信息加代码片段,加上证据和限制说明。官方 DX-Ball 案例的做法是照着 REA 的结论从零重写 C,再用 45380 次对照和编译字节比对验证,全程都需要人判断和实现。

用 REA 必须先装 Ghidra 或 IDA 吗?
取决于目标。JavaScript、Electron 和 .NET 的静态分析不需要任何逆向引擎,装个 Node 就能跑。只有原生二进制才需要 Hopper、Ghidra、IDA 三选一,其中 Windows 平台的 Ghidra 支持标注为实验性。

分析过程会把软件上传到云端吗?
原始目标文件留在本机,REA 自身没有遥测端点。但分析结果会作为上下文发送给你的 AI 模型,这部分受模型厂商的数据政策约束。涉及敏感代码时,要按这个链路评估风险。

小结

REA 解决的是一个很具体的问题,让 AI Agent 有能力观察一个它没有源代码的程序。它的证据链设计比大多数同类工具严谨,对 JavaScript 和 Electron 这类目标的上手成本也确实低。同时它不还原源码、原生分析依然依赖昂贵的反编译器、版本迭代快到边角问题不少。适合拿它做安全研究、竞品功能取证和 Electron 应用的结构摸底,不适合指望它把某个商业软件一键变成可编译工程。至于那 10 万颗星,当成一次成功的曝光事件来看更合适。


相关阅读