REA:给 AI Agent 装上逆向工程工具箱,从应用行为一路追到原生二进制
摘要
REA(Reverse Engineer Anything)是 MIT 协议开源的逆向工程 MCP 服务器与命令行工具,让 Claude Code、Codex、Cursor 等 Agent 直接调用 Hopper、Ghidra、IDA 以及 JavaScript/Electron、.NET、网页、APK、固件等分析能力,在本地检查没有源码的应用,并把每个结论连同证据、推断和未知项一起交回给 Agent。
本文目录
图片来源:GitHub 项目仓库
背景:看到一个好功能,却不知道它是怎么做出来的
做产品的人大概都有过这种时刻:在某个应用里看到一个设计得很巧的功能,想在自己的项目里做一个类似的,却只能靠猜。对方没有开源,文档也不会写实现细节,真想弄清楚,就得把应用拆开来看——这就是逆向工程。
问题在于,逆向工程的门槛一直很高。原生二进制要用 Hopper、Ghidra、IDA这类反汇编和反编译工具,Electron应用要解包 ASAR、翻打包后的 JavaScript,网页要盯着网络请求和脚本,Android应用又是另一套工具链。每种目标一套工具、一套操作习惯,结论往往散落在笔记和截图里,很难说清哪句话有证据支撑、哪句话只是推测。
AI编程 Agent普及之后,一个自然的想法是:能不能让 Agent来做这些繁琐的检查?但 Agent本身没有“看”二进制的能力,它需要一组可靠的工具,并且工具返回的结果要足够结构化,让 Agent分得清事实和猜测。REA想解决的正是这件事。
REA是什么
REA全称 Reverse Engineer Anything,即“逆向一切”。项目在 README中的定位是:一个用于逆向工程的 MCP,覆盖二进制、应用程序和运行时行为。它的口号是“看到一个喜欢的功能,就去弄懂它是怎么实现的,一直深入到二进制层面”。
具体来说,REA把你的 Agent连接到一组检查工具上,可以分析原生二进制、JavaScript和 Electron应用、.NET程序集以及网站。同样的工具也能直接在终端里通过命令行使用。分析在本地进行,返回的结果会附带每个结论背后的证据和局限。
官方给出的典型用法是:让 Agent在没有源代码的情况下检查目标应用,解释某个功能是如何工作的,展示证据,然后为你的项目构建一个类似的实现。
REA以 npm包 rea-agents发布,主语言为 TypeScript,采用 MIT协议。在原生分析方面,它可以使用你已经安装的 Hopper或 Ghidra,安装流程也可以在你批准后帮你安装 Hopper;而静态 JavaScript分析不需要任何原生分析引擎。

图片来源:GitHub 项目仓库
它是怎么工作的
REA的工作流程并不复杂。你的 Agent通过 MCP调用 REA,去检查目标并追踪相关代码;REA返回带证据的发现;Agent再根据这些发现提出后续问题、解释行为,或者编写并测试一个实现。命令行工具使用的是同一套工作流。
官方流程图把这个过程分成四步:第一步,你的 Agent针对本地目标(应用、二进制或浏览器页面)提出问题;第二步,REA通过 CLI或 MCP、借助本地分析适配器进行检查和追踪;第三步,阅读返回的证据,包括代码、引用关系和未知项;第四步,Agent利用这些结论去解释、实现和测试,必要时再追加问题,形成循环。
图片来源:GitHub 项目仓库
这里面一个核心概念是 Evidence(证据记录)。按照 CLI文档的说明,Evidence记录会保留产物身份、源码位置、观察结果、推断以及未解决的发现。项目的 MCP引导提示也会要求 Agent把观察、推断和未知项分开对待。对逆向工程来说,这一点很关键:反编译出来的伪代码往往是不完整的,能明确区分“看到了什么”和“推测是什么”,才能避免 Agent把猜测当成事实写进代码里。
除了工具本身,REA还通过 MCP的 prompts能力提供了六个与具体分析引擎无关的引导式调查流程:追踪功能实现的 investigate_feature、比较两个应用版本的 compare_application_versions、验证重建结果的 verify_reconstruction、关联崩溃症状的 trace_crash、审计剩余未知项的 audit_residual_unknowns,以及设计受控进程实验的 prepare_bounded_process_capture。这些提示只给出建议的起点,并不会自己调用工具,Agent可以按需取舍。
可以分析哪些目标
REA的覆盖面是它最引人注目的地方。根据 README中的能力表,目前支持的目标包括以下几类。
原生二进制:返回伪代码、汇编、字符串、符号、调用和引用关系,需要 Hopper、Ghidra或 IDA其中之一。其中 IDA是通过适配已有的 ida-pro-mcp服务器接入的,REA不负责安装或授权 IDA。Ghidra还支持16位 DOS程序分析,Windows上的 Ghidra支持则处于实验阶段。
JavaScript与 Electron应用:返回模块、导入关系、source map、路由、IPC以及原生插件之间的关系,只需要 Node.js和 npm。网站:返回页面结构、脚本、网络观察结果以及按需截图,需要一个 Chrome系浏览器。保存的网络抓包:支持 HAR,在 Linux上可通过 mitmdump读取 mitmproxy抓包,返回请求、响应、暴露的载荷和源码位置。
.NET程序集:静态检查元数据、CIL指令、声明的原生依赖并进行构建比较。Android APK:返回清单声明、类、反编译方法和引用,需要在 Linux或 macOS上配合无界面的 JADX和完整 JDK。固件:返回区域、提取结果并交接给原生分析,需要 Linux上的 Binwalk或 Unblob。
此外还有一些更专门的能力:离线分析 ELF的节、段、原始符号与重定位以及静态缓解措施候选项;离线解析 EVM字节码的分发选择器和推断参数;读取已记录的 Linux崩溃转储中每个线程的寄存器和信号;检查软件包与资源,包括文件清单、摘要、plist和 Apple应用包结构;以及在 Linux和 macOS上通过原生 PTY捕获进程行为,记录终端输出、交互、退出状态和文件系统变化并比较不同运行。
需要注意的区别是:静态 JavaScript和 .NET检查只读取你提供的文件,不会运行应用;而运行时捕获会以你的用户权限运行或操作所选目标,每份运行时指南都会说明它的影响。
关键特性
第一是 Agent原生。REA的主要使用方式就是作为 MCP服务器被 Agent调用。安装流程支持 Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI、Windsurf、Devin、OpenCode、Antigravity、GitHub Copilot CLI、Command Code、VS Code和 Grok Build,其他支持本地 MCP服务器的客户端也可以手动注册。
第二是 CLI与 MCP行为一致。路线图文档明确提出,CLI和 MCP必须暴露等价的行为。这意味着你可以先在终端里手动验证,再交给 Agent自动化,或者把命令写进脚本。
第三是分析快照。快照会保存成功的分析结果,当目标字节、操作、参数、分析引擎和设置都完全一致时,REA会直接复用之前的结果。快照文件保存在本地,权限仅限文件所有者。
第四是证据的导入、导出与比较。你可以校验一个证据包,导出其规范形式,或者比较两个证据包,这对于对比应用的不同版本很有用。
第五是谨慎的安装流程。setup会先给出计划,列出将要修改的每个 Agent配置路径、技能安装位置、外部软件和包管理器命令,在你批准之后才会写入。写入配置时会保留无关条目和注释、创建备份、采用原子替换并校验结果;拒绝或按 Ctrl-C则不会做任何改动。
安装与使用
REA需要 Node.js 22.x(不低于22.19)、24.x(不低于24.11)或26及以上版本,以及 npm。Node.js 23、25和预发布版本不受支持。在满足条件的机器上,运行下面这条命令开始引导式安装:
npx rea-agents setup接下来选择要配置的 Agent,检查拟议的改动并批准。安装流程会添加 REA的 MCP服务器和配套的工作流说明,并备份已有配置。完成后重启你的 Agent,就可以直接用自然语言提问了。官方给出的示例是:“弄清楚 Notes应用里的搜索是怎么工作的,给我看证据,然后为我的项目构建一个类似的功能。”把 Notes换成你的目标应用和想了解的功能即可。
如果只想在终端里分析一个已解包的 JavaScript/Electron应用目录或 ASAR文件,可以直接运行下面的命令,结果会包含模块、导入关系、Electron边界及其证据:
npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json需要长期使用的话,可以全局安装 rea命令:
npm install --global rea-agents原生分析需要先配置分析引擎。以 Ghidra为例,分析概览、搜索、查看函数、反编译、交叉引用和追踪分别对应 analyze、search、function、decompile、xrefs、trace等子命令,例如:
rea decompile /absolute/path/to/program 0x1000 --provider ghidra --json
当多个引擎都支持同一目标时,需要用 --provider明确指定,也可以通过环境变量 REA_ANALYSIS_PROVIDER设置默认偏好。想检查某一项准备情况时,可以用 rea doctor做有针对性的诊断,例如只检查 Ghidra:
rea doctor --provider ghidra --json
REA更新频繁,官方建议经常升级。通过 npm全局安装的版本运行 rea update;通过 npx使用的,则重新运行 npx rea-agents@latest setup刷新 Agent注册。卸载时 rea uninstall只移除 REA自己的 Agent注册和技能文件,加上 --purge-data还会删除 REA的缓存和状态目录,但会保留 Hopper、Node.js、证据文件和抓包等内容。
实际案例
README列出了三个展示案例,可以直观看到 REA能做到什么程度。
第一个是经典打砖块游戏 DX-Ball。REA从一次声音调用追踪到根据位置计算声像的辅助函数,检查指令,再把不完整的伪代码整理成 C代码。重建后的代码通过了3205个原始 x86用例的比对,并且编译后完整复现了全部63个函数字节。
图片来源:GitHub 项目仓库
第二个是 Notion。REA找到渲染进程中的剪贴板 API,沿着 preload和 IPC一路追踪到主进程,并检查了富文本剪贴板格式。这类分析正好对应 REA在 Electron方向的能力。
第三个是 PC-98平台的游戏 TH04。REA检查了原版游戏的16位指令,恢复出固定角度和瞄准角度两种子弹环的计算方式,并把重建出的 C++ 代码与历史编译器的输出进行比较。
适合哪些场景
从项目文档来看,REA比较适合几类人:想研究竞品或参考应用中某个功能实现思路的产品工程师;需要排查第三方桌面应用、Electron应用行为的开发者;做安全研究、CTF或二进制分析的工程师;对老游戏、老软件做考古和重建的爱好者;以及需要对比同一应用不同版本之间变化的团队。
对已经习惯用 Claude Code、Codex、Cursor写代码的开发者来说,REA的意义在于,它把“理解别人的实现”和“写出自己的实现”放进了同一个 Agent工作流里,中间有证据链衔接。
限制与注意事项
首先是合法性。README的免责声明写得很清楚:REA提供的工具用于合法的逆向工程研究、分析和重建,获取必要授权、遵守相关法律是使用者自己的责任。
其次是安全边界。SECURITY.md说明,REA为每个本地分析桥接会话使用随机能力令牌和仅当前用户可访问的 Unix套接字,但这不是沙箱,无法防御已经以同一系统用户身份运行的恶意进程。打开不受信任的二进制文件,等于把解析和分析交给所选的本地分析引擎,以你的用户权限执行。路线图也提到,本地操作使用当前用户的系统权限。
第三是数据去向。REA在本地分析目标,但 Agent会收到工具结果,而 Agent背后的模型服务商有自己的数据政策,分析敏感目标时需要考虑这一点。
第四是第三方依赖。深度原生分析需要 Hopper、Ghidra或 IDA。Hopper是商业软件,免费演示版有厂商设定的限制;IDA需要你自己安装和授权;Ghidra当前要求12.1.x版本和 JDK 21或更新版本。APK分析和固件分析也有各自的平台要求,并非所有能力都能在所有系统上使用。
第五是版本差异。项目迭代非常快,仓库主分支的文档描述的是当前代码,部分新功能可能尚未进入 npm发布版。官方建议用 npm view rea-agents dist-tags.latest查看已发布版本,并以 Agent实际连接到的工具列表为准。另外,项目方特别声明从未发行或背书任何加密货币或代币,使用 REA名称的代币与项目无关。
项目信息
项目地址:https://github.com/morluto/rea
官网与指南:https://rea.tools
开源协议:MIT
分发方式:npm包 rea-agents,截至2026年10月9日 npm最新版本为6.1.0
主要语言:TypeScript,另有 Java、Python、Swift等桥接代码对接 Ghidra、JADX、LLDB等工具
热度:截至2026年10月9日,GitHub约3.5万 Star、约4800 Fork,当日位列 GitHub Trending日榜第一