一条命令给 AI Agent 装上反汇编能力:REA 逆向工程从入门到复现二进制的实战
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
在别人的 App 里看到一个想复刻的功能,却没有源码,也不想靠猜?REA(Reverse Engineer Anything)把 Hopper、Ghidra、IDA 这些反汇编引擎,连同 JavaScript、Electron、.NET、Android 包的分析,统一接成 AI Agent 能直接调用的工具:一个 MCP 服务加一套 CLI 命令。下面用一个真实案例,带你在一条命令配好环境之后,自己把「打开二进制 → 反编译 → 验证行为真的变了」这条链路完整跑通。
上图是一次典型的运行状态:Agent 在上面发号施令,Hopper 在下面老老实实干活。右侧是文件信息面板(Mach‑O、arm64、AAPCS 调用约定),底部是逐段反汇编的进度日志。你不需要打开 Hopper 的菜单,也不用记它的快捷键。
最短链路:从 0 到第一次出结果只要三步
很多人卡在「环境」。REA 把三件本来要分开做的事并进了一个命令:给 Agent 注册 MCP、登记引擎路径、按需装可选组件。
先跑 setup,它会在写入前先给你看一份改动计划,你确认后才会动配置文件和(可选的)Hopper:
npx rea-agents setup # 注册 MCP + 装工作流指令,可选安装 Hopper,改前需你确认拿不准环境有没有坑时,跑一个纯只读的体检,它逐个读主机、依赖、引擎可用性和各 Agent 的注册情况,不改任何东西:
npx -y rea-agents@latest doctor # 只读环境体检 npx -y rea-agents@latest doctor --provider ghidra # 只体检某一个引擎平台要求和手动注册引擎的细节在 docs/installation.md。
出第一个结果最省事的方式是静态分析一个 JavaScript / Electron 应用——这条路不碰任何反汇编引擎,前提是 Node 22.19+ / 24.11+ / 26+:
npx -y rea-agents@latest analyze-javascript-application /绝对路径/to/app --json # 直接返回模块、导入、Electron 边界💡 想要一个长期可用的
rea命令,装一次全局就行:npm install --global rea-agents,之后rea --help看所有子命令。临时用也可以直接npx -y rea-agents@latest <命令>。
对原生二进制,装好全局命令后再选一个引擎。下面这条命令链就是完整的「打开 → 反编译」:
rea analyze /绝对路径/to/program --provider ghidra --json # 概览:符号、字符串、段 rea decompile /绝对路径/to/program 0x1000 --provider ghidra --json # 取某函数的伪代码命令和输出契约的完整清单见 docs/cli.md,能力源码在 src/application/。
目标不全是二进制:REA 覆盖的应用类型
Hopper、Ghidra、IDA 的主场是原生二进制(Mach‑O / ELF / PE),但 REA 能接的目标比这宽得多。不是每个目标都要先装反汇编器:
| 目标类型 | REA 怎么处理 | 需要原生引擎吗 |
|---|---|---|
| 原生二进制 | 接 Hopper / Ghidra / IDA 之一,取伪代码、汇编、字符串、交叉引用、调用图 | 需要,至少一款 |
| JavaScript / Electron | 静态梳理模块、导入、Source Map、IPC 通道,不启动应用 | 不需要 |
| .NET 程序集 | 读元数据与 CIL 指令,可做不同构建的对比 | 不需要 |
| Android APK | 无界面 JADX 反编译后静态检查 | 不需要 |
| 网站 / 浏览器 | 经 CDP 观察页面结构、请求、脚本并截图 | 不需要 |
| 固件 | 纳入同一分析框架,做分区与提取 | 视目标而定 |
除了这几类,它还能静态看 Go / Rust 二进制、SQLite 快照、WASM、EVM 字节码、录制的崩溃和抓包,详见 docs/index.md 的完整目标表。
两句话划清楚边界:没有引擎、甚至目标根本不是二进制时,分析照样能跑;静态这条路只读你给的文件,不会替你启动或运行目标应用。
三个引擎怎么选:会不会替你乱挑
深度分析三选一:Hopper、Ghidra、IDA Pro。这里最容易踩坑的是「我到底用的哪个引擎」,结论的可信度直接取决于它。REA 的态度很明确——它是 A 而非 B:它不会背着你偷偷挑一个,显式传入的--provider优先级最高;多台引擎同时可用而你又没指定时,它直接报错,把候选列出来让你选,保证「结论出自哪款引擎」始终说得清。
想先看看手头能用谁:
rea providers --json # 列出可用的引擎及其支持的操作 rea capabilities --json # 看当前路由下的能力💡 想固化偏好可以设环境变量
REA_ANALYSIS_PROVIDER,但一次性的--provider会盖过它。选错或不支持的引擎,错误会带上原始原因返回,而不是默默换一家。
IDA 的接入契约在 docs/ida-provider.md,原生分析的具体命令在 docs/native-investigation.md。
结论怎么信:证据链、前后对比与 pass / fail / unknown
纯 GUI 分析给你的是屏幕上的反汇编视图,值不值钱取决于你盯着看了多久。REA 的每次分析都带一份 Evidence 证据链——结论来源、引擎版本、目标摘要、置信度和局限,于是「怎么知道它真的对了」有了抓手:
- 对比改动前后:
rea compare 左.json 右.json比两份证据,看改了之后哪些地方变了。 - 把结论固化:
rea evidence-import/rea evidence-export把语义结果存成文件,下次复用不必重新拉起引擎。 - 重建验证诚实报结果:验证只给
pass/fail/unknown,证据缺口就老实标unknown,从不把缺证据伪装成通过。
这里有个值得说透的诚实细节:函数文本对比里的changed只证明「文本不一样」,不等于行为变了。地址、生成名的变化也可能让文本维度改变而控制流没动。所以「行为确实变了」要靠另一条证据链来坐实——官方 DX‑Ball 案例里,一个 63 字节的 Windows PE 函数被还原成 C 之后,跑了 3,205 组「原始 x86 差分用例」,并逐字节复现了编译产物的全部 63 字节,这才敢说行为对齐。证据契约与对比语义见 docs/mcp-contracts.md。
把分析结果变成资产,卸载时只拆 REA 自己
分析结果本质是文件,不只是屏幕视图。把证据导出后,你的调查资产(结论、交叉引用、反编译产物)就和具体引擎解耦了:日后从 Hopper 换到 IDA、或升级引擎版本,已固化的结论照样能读,不必推倒重来。快照还能做命中复用——同样的目标字节、操作、参数、引擎和设置,直接读回上次的结果,不用重新冷启动引擎。
整个过程都在你自己机器上跑,目标软件不会被交给任何托管分析服务。卸载也收得干净:
rea update # 更新拥有当前 CLI 的全局安装 rea uninstall # 只删 REA 自己的注册项与生成文件 rea uninstall --purge-data # 额外清掉 ~/.rea 下的缓存与状态卸载会保留你的 Hopper、Node、证据文件、抓包记录、无关技能和其它 MCP 服务。维护与排障的完整说明在 docs/installation.md 的「Diagnose, update, and remove」一节。
谁该上手,谁该直接上原生引擎
适合你:想让 AI Agent 替你走完「单个二进制 → 可运行复刻」的逆向流程,又要结论可复核、目标覆盖全栈、数据留在本地——把 REA 放在工具链最前面。
不适合你:只想安安静静盯着窗口看反汇编的人。Hopper、Ghidra、IDA 本体就是好引擎;REA 是跑在它们之上的编排与连接层,是调度者,不是替代品。它也不承诺替你解决每个二进制——目标格式、主机和权限边界,各引擎指南里都写得很清楚。
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考