Concitech AI · 深度长文
2026/10/09 09:52
REA:AI 编程助手的逆向工具箱,应用行为的证据链
开源项目 REA 连接 AI 编程助手与逆向分析引擎,支持 JavaScript、Electron、APK 和原生二进制等目标。Notion 剪贴板案例展示调用关系的追踪过程。文章介绍工具分工、安装要求、证据边界与数据隐私。

一个复制按钮,背后有多少层代码?
页面调用、预加载脚本、进程通信、主进程处理、系统剪贴板,构成一条跨越应用边界的路径。开发者需要识别入口、寻找接收方、核对参数,解释这个按钮的行为。
开源项目 REA(Reverse Engineer Anything) 提供了一个工具入口。它连接 AI 编程助手与软件分析工具,支持应用结构检查、调用关系追踪、反编译结果读取等工作。Claude Code、Codex、Cursor 等客户端属于其配置支持范围。
REA 的价值是工具协作:模型负责提出问题、组织调查,分析引擎提供结果,文件位置和原始响应提供核对依据。
项目名称表达了目标,实际能力取决于目标类型、分析引擎、平台和版本。源码恢复、行为解释与实现重建,属于三种不同结果。
AI 提问,工具提供证据
理解一个陌生应用,需要回答具体问题。一个导出按钮调用哪个模块?一个跨进程消息由谁接收?一个二进制函数引用了哪些字符串?
聊天模型的知识提供背景解释,目标文件提供这个应用的事实。两者之间需要工具。
REA 使用 MCP 连接编程助手。MCP 是模型客户端与外部工具之间的协议。REA 提供分析接口,底层引擎承担文件解析、反汇编或反编译,模型读取返回结果、选择调查方向。
这一分工有三个角色:编程助手负责问题与解释,REA 负责调用与结果组织,分析引擎负责专业处理。一个角色的成功,缺少对其他角色的质量担保。

图:REA 的工具分工示意。模型解释需要文件位置、引擎结果和验证记录的支持。
文件位置帮助开发者检查解释。反编译输出展示程序的派生表示,字符串引用提供线索,调用关系描述结构。它们回答的问题各有范围。
一份合格的调查结果需要保留目标身份、工具版本、相关位置和未知项。模型生成的流畅叙述缺少这些信息,核对工作失去入口。
三类目标,三套准备工作
REA 的分析对象包含多个软件家族。JavaScript、Android 和原生二进制,体现了三种不同的工具依赖。
| 目标 | 主要调查对象 | 环境要求 |
|---|---|---|
| JavaScript / Electron | 模块、导入关系、源码位置、进程通信 | Node.js 与 npm;目标目录或 ASAR 文件 |
| Android APK | 清单、类、方法、静态引用 | 完整 JDK 17+ 与指定的 headless JADX;Linux / macOS |
| 原生可执行文件或库 | 汇编、伪代码、函数、字符串及引用 | Hopper、Ghidra 或 IDA;引擎对应的平台与目标支持 |
JavaScript 静态分析读取文件和结构。它适合调查模块归属、导出逻辑与 Electron 的 IPC 通道。动态生成的名称、复杂包装和模糊的接收关系构成识别难点。
Android 分析依赖 JADX。类与方法的输出属于反编译表示,静态引用属于结构关系。实际执行顺序需要运行证据。APK 检查、签名验证与设备运行捕获属于不同能力,文档列出了各自边界。
原生二进制需要专业引擎。REA 组织工具访问,Hopper、Ghidra 或 IDA 提供相应分析能力。操作系统、文件格式、指令集与引擎配置影响可用性。Windows Ghidra 支持具有实验性边界。
这张表提供的是准备清单。一个项目的支持范围,缺少对每个应用、每种平台和每条代码路径的成功承诺。
Notion 案例:复制按钮背后的进程边界
REA 官方案例调查了 Notion 的剪贴板逻辑。桌面部分的对象是 Notion Desktop 7.6.1;案例记录使用了 REA 4.1.0。它展示的是项目方的分析记录,本文缺少独立复现实验。
页面获得一个剪贴板接口。预加载脚本的包装函数调用 ipcRenderer.invoke,主进程使用 ipcMain.handle 注册接收方。双方共享通道名 notion:clipboard:write。
主进程检查发送方身份,符合检查要求的请求触发 Electron 的 clipboard.write(data)。接口名、通道名与处理函数构成调用关系的核对线索。

图:REA 官方案例的调用关系整理。图示呈现静态调用关系,桌面运行捕获属于另一类证据。
案例包含富文本块的调查。系统剪贴板保存文本与 HTML,HTML 中的复制 ID 关联 Notion 保存的结构化块数据。匹配的 ID 支持块数据恢复。
这部分记录来自 2026 年 7 月 13 日缓存的网页资源,证据包含抽取模块的测试;它与桌面应用包具有不同的版本范围。
这里的收获是调查方法:一个可识别的通道名连接发送方与接收方,代码位置帮助人核对包装函数,模块测试帮助人检查局部行为。一个“复制”动作,获得了可检查的解释。
安装命令之外,需要检查什么
项目提供一条配置命令:
npx rea-agents@latest setup
Node.js 的支持范围是 22.x(22.19 起)、24.x(24.11 起)和 26+;npm 属于必要工具。配置过程涉及 MCP 注册与配套调查指令,修改计划需要用户审核。客户端重启或重连完成工具接入。
原生分析引擎、Java 与 JADX 具有各自的准备要求。安装一个 Skill 与接入分析工具属于两件事:指令描述工作方法,MCP 注册提供工具入口,底层引擎提供执行能力。
JavaScript 的静态检查有独立 CLI 入口:
npx -y rea-agents@latest analyze-javascript-application \
/absolute/path/to/app --json
路径需要指向目标目录或 ASAR 文件。命令返回分析结果,模型接入属于另一个步骤。本文的验证范围是官方文档、案例与包版本核对,缺少命令执行测试。
版本核对有一个易忽略的区别:GitHub 主分支描述当前代码,npm 的 latest 指向发布包,客户端的 MCP 注册固定具体版本。三者需要核对。本文核对的日期是 2026 年 10 月 9 日,npm latest 为 6.1.0。
“文档出现某个功能”与“当前客户端获得该工具”具有不同含义。实际连接的工具目录、输入结构和引擎状态,决定本次调查的可用入口。
本地工具与数据隐私,是两个问题
REA 的 FAQ 说明:目标分析发生于用户机器,编程助手接收分析结果,模型服务商的数据政策适用于这些结果。
本地分析的位置,缺少对结果传输边界的保证。工具输出包含代码片段、字符串或相关元数据,模型客户端的连接方式决定它们的后续去向。
企业应用、内部组件与客户材料需要数据分类。调查范围需要明确允许读取的文件、允许提交的结果,以及允许使用的模型服务。敏感信息的处理规则属于分析准备的一部分。
执行边界需要另一份检查。静态分析读取文件;运行捕获涉及启动或操作目标。它们对系统状态、网络请求和文件写入具有不同影响。一个静态分析结论,缺少实际执行的证明。
REA 的 MIT 许可证描述 REA 自身的使用许可。目标软件、第三方引擎和目标数据具有各自的授权要求。对象授权、工具许可与数据边界需要各自的确认。
一个行为,一个调查目标
REA 适合明确的调查任务:自有旧系统的行为梳理、获得授权的兼容性研究、应用边界检查。一个具体行为提供调查终点,模糊的“分析整个应用”留下范围空白。
一个自有 Electron 应用的导出功能需要解释:入口调用哪个 API,IPC 接收方是什么,输出文件由谁写入,错误处理包含哪些分支。调查结果需要对应代码位置与验证记录。
实现重建是另一个任务,需要独立验收。输出格式、边界输入、失败处理与版本差异构成检查对象。伪代码、源代码位置和静态关系提供材料,测试决定重建结果的适用范围。
REA 提供调查工具,证据约束模型解释,验证界定结论范围。
代码生成与既有系统的理解构成 AI 编程助手的两类工作。REA 展示了后一种能力的工具化方向:一个关于应用行为的问题,拥有文件、调用关系与验证记录组成的证据链。
