rea AI 逆向 CLI 完整教程:一条命令逆向二进制,追出 main 的全部证据
rea AI 逆向 CLI 完整教程:一条命令逆向二进制,追出 main 的全部证据
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
手头有陌生的二进制或 Electron 应用?rea 是一条命令在本地完成二进制逆向的逆向 CLI,支持 AI 逆向:符号、函数、引用连同原始证据一起返回,全程不用打开 IDA 或 Ghidra 图形界面。这篇教程按"从 0 到第一次追出 main"的真实路径,把安装、引擎配置、编译目标、命令拆解、输出解读、排错合成一条能照着敲的流程线。
rea doctor 自检:一条命令确认环境就绪
先跑一次只读体检,逐项核对宿主平台、Node 版本、引擎可执行文件与 Agent 配置,失败项后面直接附修复命令:
npx -y rea-agents@latest doctor --jsonNode 版本卡得很死:22.x 需 ≥22.19,24.x 需 ≥24.11,或 26+;23 和 25 不在支持列表里。安装分三档,按使用频率挑:
- 跑一次分析:保持
npx -y rea-agents@latest ...原样跑,零全局安装; - 当日常命令用:
npm install --global rea-agents,之后直接敲rea——包同时注册了rea与rea-agents两个可执行名,细节见安装文档; - 接自己的 Agent:
npx rea-agents setup注册 MCP 与工作流指引,支持 Claude Code、Codex、Cursor、Gemini CLI 等十余种客户端。它只写配置,外部依赖一律自己装。
Ghidra 命令行逆向:三步配好纯终端驱动
⚙️ 已有 Ghidra 安装?导出环境变量指认它:
export GHIDRA_INSTALL_DIR=/absolute/path/to/ghidra_12.1.4_PUBLIC rea doctor --provider ghidra --json从此 Ghidra 就是纯命令行驱动,不需要 GUI。想确认当前环境到底能干什么,别再靠猜,直接查清单:
rea providers --json rea capabilities --json输出的是能力清单。引擎本身可插拔:原生二进制深分析在 Hopper、Ghidra、IDA 里三选一,--provider显式指定或自动挑选;JavaScript/Electron 静态分析与 .NET 分析则完全不依赖引擎。终端直敲和 Agent 走 MCP 两个入口共用同一份命令。
编译一个没有符号表的练手目标
仓库自带scripts/fixtures/binary-layout.c:两个全局变量、一个read_values()辅助函数和main,是覆盖符号、字符串、函数、引用四个概念的最精简样本。还没有源码就先克隆仓库:
git clone https://gitcode.com/GitHub_Trending/rea2/rea编译两份:调试版留作对照,stripped 版没有符号表、函数边界全靠引擎自己找,才是硬骨头:
gcc -O0 -g -o hello_debug scripts/fixtures/binary-layout.c gcc -O0 -s -o hello_stripped scripts/fixtures/binary-layout.c追出 main 的完整档案:rea analyze 全流程
⚡ 从 stripped 版开跑。rea analyze走binary_overview工作流,一次给回架构与格式、符号表、字符串清单、函数清单和调用关系:
rea analyze ./hello_stripped --provider ghidra --json接着给main建档案:rea function返回入口地址、调用者与被调用者、控制流图,外加最多 3000 条 p-code 操作和 12000 条 def-use 边:
rea function ./hello_stripped main --provider ghidra --json想看伪代码,rea decompile传main的实际入口地址(analyze 输出里能查到);只看不启反编译器的原始指令,换rea instructions。追到read_values的调用边后,rea xrefs给一份有上限的引用列表——调用、跳转、数据、读写、间接、条件这些分类保留原始 ReferenceManager 类型;最后用rea search定位字符串"source-owned"的落点,加--mode regex --kind procedures还能按 Java 正则搜过程名:
rea xrefs ./hello_stripped 0x401155 --provider ghidra --json rea search ./hello_stripped "source-owned" --provider ghidra --json高频参数记三个:--json出结构化结果(默认终端格式是 TOON,给人读的);--snapshot <path>把结果缓存成本地快照,相同目标加相同参数直接复用,省掉重复启动引擎;内存紧张时用GHIDRA_HEADLESS_MAXMEM=512M限制 Ghidra JVM 堆。
读懂 rea 输出:身份、覆盖度与反编译器边界
目标身份=路径+SHA-256+大小,是后续所有结论的对齐基准。目标字节一变,结果身份立刻失配;复现别人的结果之前先核对这三样。
分析覆盖度被明确切分:哪些是完整分析、哪些只是部分观察。unknowns里列的是分析没啃下来的部分,不是被藏起来的失败——当信息读,别当报错。
反编译器边界:Ghidra 吐出的伪代码是反编译器输出,rea 从不把它包装成原始源码,Limitations 栏会反复把这一点说清。
不启动引擎的两条轻量路径:Electron 逆向与 ELF 布局诊断
Electron 逆向走纯静态解析,对目录或.asar:
rea analyze-javascript-application /absolute/path/to/app --json返回模块、导入、Electron IPC 边界及各自证据。目录或.asar且未指定--provider/--snapshot时,rea analyze会自动路由过去。
离线 ELF 布局诊断更轻:不建任何反汇编数据库,直接回答节区/段布局、原始符号与重定位、静态链接名,外加 canary、PIE、NX、RELRO 静态推断。需要一个带 pwntools 4.15.0 + pyelftools + Unicorn 的独立 Python 环境,细节见 docs/binary-diagnostics.md:
REA_PWNTOOLS_PYTHON=/absolute/isolated-env/bin/python \ rea inspect-binary-layout ./hello_stripped --jsonrea 排错:退出码与两个高频坑
🩺 退出码语义:0= 操作完成(结果里仍可能含部分证据、警告或未解问题);1= 未完成(输入无效、权限不足、超时等,结构化输出会带原因);128 + N= 被信号 N 终止。管道里记得set -o pipefail,让下游格式化工具保留失败状态。
| 症状 | 处理 |
|---|---|
analyze报capability_unavailable,且details.selection_reason为ambiguous | 多个引擎都支持该目标,从details.candidate_ids里显式选一个 |
| Ghidra 启动超时(默认 330000ms,约 5.5 分钟) | 大目标调大:export REA_GHIDRA_STARTUP_TIMEOUT_MS=900000 |
Node 版本不达标会直接提示Install Node.js 22.x (>=22.19), 24.x (>=24.11), or 26+.;怀疑版本问题先rea update再重试。用户可见错误信息逐条维护在 docs/user-visible-errors.csv,它让你重试或跑rea doctor时,照做就行。
从看懂到写出来:三个实战案例与文档指引
🚀 README 里的三个案例示范从「看懂」到「写出来」的完整链路:DX-Ball 把汇编还原成 C 并通过 3205 个 x86 用例,TH04 从 16 位 DOS 指令恢复角度计算,Notion 把 Electron renderer 一路追到主进程 IPC 剪贴板桥。
系统学习两份文档就够:全部命令、快照与导入导出机制看 docs/cli.md;Agent 侧会话、证据与工具契约看 docs/mcp-contracts.md。
下一步很具体:挑你自己的目标二进制,把上面rea analyze到rea search的命令换掉路径再跑一遍——追完第一个main,剩下的只是换目标。
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考