用 MCP 让编程助手拆解应用功能
REA 通过本地 MCP 服务,让编程助手检查二进制、JavaScript、Electron 等应用,并为分析结论提供证据与局限说明。教程介绍与 Claude Code、Codex、Cursor 的连接方式,以及三个实际分析任务。
AI 深度解读
看到别人的应用里有个好用的搜索功能,想知道它怎样实现,难点往往是拿不到源码,也缺少文档。REA(Reverse Engineer Anything)的思路,是把逆向分析工具接入编程代理,让代理先收集证据,再解释功能,最后在你的项目里实现类似能力。
它值得关注的地方,是把「分析现有应用」和「编写新代码」串成了一条工作流。不过,原文提供的是安装步骤与任务示例,没有展示完整分析记录或复现结果,工具能力和实际效果需要分开看。
REA 给编程代理补上了什么
REA 提供一个 MCP server,让 Claude Code、Codex、Cursor、Gemini CLI 等支持本地 MCP 的代理调用逆向工具。MCP 可以理解为代理访问外部工具的一套接口;这里接入的是反汇编、模块分析和元数据读取能力。
面对原生程序,REA 可以借助 Hopper、Ghidra 或 IDA,返回伪代码、汇编、字符串、符号和调用引用。面对 JavaScript 应用,它返回模块及其连接关系。两类输出的用途不同:前者帮助推断程序做了什么,后者更适合梳理代码组织和功能边界。
原文列出的读取对象还包括 Electron、.NET、网站、Go 和 Rust 二进制、GGUF 与 safetensors 模型头、Godot PCK,以及 Unity IL2CPP 的 global-metadata.dat。
能读取一种文件,不等于能完整还原其中的功能。
REA 强调每项结论附带证据和局限。对程序员来说,关键是能继续追问:结论来自哪段代码、哪个符号或哪条调用关系,有没有尚未覆盖的路径。
先装对环境,再接入日常代理
原文要求 Node.js 22.x(22.23.4+)、24.x(24.22.1+)或 26.12.1+,以及 npm。Linux 还需要 PATH 中存在兼容 procps 的 ps,供 Ghidra、JADX 和静态 JavaScript 分析使用。
安装入口如下,它负责注册 MCP server 和安装配套工作流指令:
npx rea-agents setup
注意这里的 setup:执行后还要选择代理、检查拟议改动并批准。工具会先备份已有配置,完成后需要重启代理。
若要直接在终端使用,可以执行 npm install --global rea-agents,再用 rea --help 查看命令。更新使用 rea update;通过 npx 安装的,可以重新运行 npx rea-agents@latest setup。
原文提醒存在仿冒仓库,应从 morluto/rea、rea.tools 或 rea-agents npm 包获取。
静态 JavaScript、Electron、.NET 和 IL2CPP 元数据检查不依赖上述反汇编器;深度原生分析才需要。Ghidra 免费,IDA 和完整版 Hopper 收费。macOS 上的 Hopper 还可能弹出首次运行对话框,需要先在同一用户会话中处理。
三种任务,分别能拿到什么
第一种是从功能反推实现。原文给出的任务是理解 Notes 应用的搜索,展示证据,再为自己的项目构建类似功能。
代理按这个目标检查应用、追踪相关代码、收集证据,再解释行为并编写和测试实现。这里应关注「类似」的具体边界:原文没有交代搜索是否涉及排序、分词或索引,也没有给出最终实现,不能据此认为它已验证整套搜索复现能力。
第二种更贴近前端开发者:梳理 Electron 应用。这条命令可以分析已提取的应用目录或 .asar 文件:
npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json
注意 --json:输出会列出模块、导入关系,以及 main、renderer 和 preload bridge 等 Electron 边界,并附带证据。先看清主进程、渲染进程和桥接层怎样连接,再定位某个功能,会更有方向。Windows 路径可使用 "D:/apps/example" 这样的写法。
第三种是静态读取 Unity IL2CPP 元数据,无需安装 Unity。原文称支持版本 24、27、29、31、39,可以从 Game_Data/il2cpp_data/Metadata 下的 global-metadata.dat 列出程序集映像、类型名、方法名和索引范围,再查找与存档相关的条目。它能帮助确认构建包含什么,但名称和元数据本身不足以证明完整运行行为。
我的判断
我认同「先拿证据,再让代理解释和实现」这个顺序。它让开发者有机会检查推断过程,也比只给模型描述一个界面更适合研究内部行为。
但原文没有提供与手动解包、直接阅读 JavaScript、单独使用 Ghidra 等做法的耗时或准确率对照。它展示的是工作流,尚不足以证明效率提升。对于能直接阅读的 JavaScript,代理能否减少工作量,仍取决于模块规模和输出质量。
原文还声称项目已超过 300,000 GitHub stars,没有给出统计时间或佐证,这个数字不宜充当效果依据。
另外,分析在本地运行,工具结果仍会发送给代理的模型供应商。检查敏感软件前,需要确认数据政策和分析授权。许多应用、游戏的条款限制逆向,不能把本地可读取当成允许分析。
默认 MCP 输入 schema 较紧凑,用于节省上下文;确实缺少字段说明时,可在 MCP 注册配置中设置 REA_MCP_INPUT_SCHEMA_PROFILE=full。
能拿来做什么
- 分析获准检查的 Electron 应用时,先生成模块与进程边界清单,再围绕一个具体功能追踪调用关系,避免一开始就要求代理解释整个应用。
- 为自己的项目借鉴功能时,把任务拆成「解释行为、列出证据、标明未知项、编写并测试实现」,先审查分析结果,再接受生成代码。
- 检查 Unity 构建内容时,用元数据定位程序集、类型和方法,把这些结果当作后续分析线索,继续核实实际行为。