rea 快速指南:三条命令逆向你的第一个二进制,每个结论带证据
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
Functions 窗口一片空白,符号一个没有,你盯着这个.so发了十分钟呆。rea 是一个面向 AI Agent 的逆向工程编排层:它替你驱动 Ghidra、Hopper 这类分析引擎,把"打开 IDE 空转"变成一条终端命令,返回的每个结论都附证据。按下面的 4 步走完,15 分钟左右你能拿到第一次完整逆向——从概览到证据链闭环。
项目坐标:它是编排层,不是反编译器
先把话说清楚:rea 不是反编译器,不是调试器,也不是 IDE。它是把"谁来当分析引擎"和"谁来提问"解耦的一层:
- 分析引擎可插拔:Hopper、Ghidra、IDA、Kuna,你本地装哪个它就用哪个;
- 双入口:AI Agent 走 MCP(一种让模型调用工具的标准协议),人走终端 CLI;
- 证据先行:每个结论都带观察、推断边界与未解问题,而不是给你一个"看起来对"的答案。
成熟度不用猜:仓库 README 提供 22 个语言的本地化版本,Discord 社区日常答疑,docs/目录有 80 余篇专题文档,还维护着一份逐条审核的用户可见错误清单docs/user-visible-errors.csv。它的典型形态是下面这张图——引擎 GUI 照常打开,但操作和取数全部由桥接层代劳。
坐标定了,别急着装——先看一条不装任何东西就能跑通的路。
先跑通:零安装的最小闭环
运行时要求Node.js 22.23.4+、24.22.1+ 或 26.12.1+(package.json的engines字段),23、25 不支持。JavaScript/Electron 静态解析完全不需要任何反编译引擎,一条命令先拿到第一次成功:
# 免安装单次运行:静态解析一个 JS/Electron 应用目录或 .asar npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json返回模块、导入、Electron IPC 边界及各自的证据。拿到结果后,再回头补正式安装与环境自检:
# 全局安装 CLI,得到 rea 命令 npm install --global rea-agents # 把 MCP 注册给你的 Agent 客户端;先列出改动计划,你确认后才写入 npx rea-agents setup # 严格只读体检:逐项检查 Node 版本、引擎可执行文件,失败项附修复命令 rea doctor --jsonsetup支持 Claude Code、Codex、Cursor、Gemini CLI 等客户端,且永远不替你安装 Node、Java、Ghidra 这类外部依赖。另外在 Linux 上跑 Ghidra、JADX 或 JS 分析,需要PATH里有 procps 的ps,缺了看docs/installation.md的 "Linux owned-process prerequisite" 一节。
环境就绪,进入主线:给一个 stripped 二进制做完整逆向。
主线实战:逆向仓库自带的 17 行 C 程序
练手目标选scripts/fixtures/binary-layout.c:17 行源码,两个全局变量、一个线程局部变量、一个noinline辅助函数read_values()和一个main。为什么选它?一是小,输出几分钟能看完;二是把它 strip 掉符号表后依然能完整走完"符号、字符串、函数、引用"四条证据线——stripped 目标最能体现 rea 的价值;三是它是仓库自带夹具,任何编译器下都可复现。
# 编译出调试版与 stripped 版两份,后者没有符号表 gcc -O0 -g -o hello_debug scripts/fixtures/binary-layout.c gcc -O0 -s -o hello_stripped scripts/fixtures/binary-layout.c假设本机已配置好 Ghidra(GHIDRA_INSTALL_DIR指向安装目录)。
第一步:analyze 拿概览
# 原生概览:工件身份、符号、字符串、函数清单 rea analyze /absolute/path/to/hello_stripped --provider ghidra --json结果先看artifact字段:路径、SHA-256、大小是后续所有结论的锚点,目标字节一变,身份就失配。再看coverage与unknowns:前者说明哪些分析是完整观察、哪些只是部分结果;后者列的是"确实没解出来",而不是被悄悄忽略。limitations还会反复提醒:伪代码是反编译器输出,永远不是原始源码。
第二步:给 main 建档案
# 函数档案、伪代码、原始汇编:三种不同粒度的东西 rea function /absolute/path/to/hello_stripped main --provider ghidra --json rea decompile /absolute/path/to/hello_stripped 0x401146 --provider ghidra --json rea instructions /absolute/path/to/hello_stripped main --provider ghidra --jsonfunction返回档案(dossier):入口地址、调用者与被调用者、控制流信息;decompile给可读伪代码;instructions只读引擎 Listing 的原始指令,根本不启动反编译器。注意0x401146是样例环境里的入口地址,换成你analyze结果里main的实际地址。三者语义边界被严格区分,这正是它和"一把梭反编译"最大的不同。
第三步:xrefs 与 search 闭环证据链
# 谁引用了 main;搜字面量字符串;按正则搜 read_ 开头的函数名 rea xrefs /absolute/path/to/hello_stripped 0x401146 --provider ghidra --json rea search /absolute/path/to/hello_stripped "source-owned" --provider ghidra --json rea search /absolute/path/to/hello_stripped "^read_" --mode regex --kind procedures --provider ghidra --jsonxrefs返回有界列表,调用、跳转、数据等分类保留引擎原始类型;search支持字面量(--mode literal)与正则两种模式,--kind切换字符串或函数名。在这份 17 行源码上,你能看到main到read_values的调用边,以及"source-owned"字符串的落点——从入口到数据,一条证据链闭环。
第四步:零引擎的离线诊断
不是每次都值得启动 Ghidra。inspect-binary-layout完全不碰反编译引擎,直接回答"这个文件里有什么":
# 离线 ELF 布局诊断;需指向自带 pwntools 4.15.0、pyelftools 与 Unicorn 的隔离 Python REA_PWNTOOLS_PYTHON=/absolute/isolated-env/bin/python \ rea inspect-binary-layout /absolute/path/to/hello_stripped --json返回节区/段布局、原始符号与重定位,外加 canary、PIE、NX、RELRO 的静态推断。官方验证覆盖 Linux x64 的 ELF64 等 profile(docs/binary-diagnostics.md),刚编译的hello_stripped就是标准练手目标。
跑通了也难免撞坑,下面是退出码对照和三个高频问题的标准解法。
排障:退出码对照与三个高频卡点
| 退出码 | 含义 |
|---|---|
0 | 完成;结果仍可能含部分证据或警告 |
1 | 未完成:输入无效、权限、取消、超时等 |
128 + N | 被信号 N 终止(SIGINT 为 130,SIGTERM 为 143) |
现象一:analyze报capability_unavailable,details.selection_reason是ambiguous——多个引擎都支持该目标,rea 不替你猜。定位:
# 列出可用引擎及支持的操作;doctor 严格只读 rea providers --json rea doctor --provider ghidra --json解法:从错误里的details.candidate_ids挑一个,用--provider显式指定;想设长期默认就配REA_ANALYSIS_PROVIDER=ghidra,命令行--provider优先于环境变量。
现象二:大二进制启动超时。Ghidra 启动期限默认 330000 ms(约 5.5 分钟),超时返回provider_timeout。解法:
# 把 Ghidra 启动期限提到 30 分钟再重试 REA_GHIDRA_STARTUP_TIMEOUT_MS=1800000 rea analyze /absolute/path/to/big.bin --provider ghidra --json备注:期限覆盖导入、自动分析与桥接就绪三个阶段;小内存机器同时用GHIDRA_HEADLESS_MAXMEM=512M压低 JVM 堆。
现象三:行为与文档不符,疑似 bug。解法:
# 更新 npm 拥有的 CLI 到最新(rea update 只更新拥有当前 CLI 的全局安装) rea update备注:仓库维护着docs/user-visible-errors.csv这份逐条审核的错误清单,每条带恢复建议;遇到 "Retry once; if it continues, runrea doctor" 的提示就照做。
收束
快照复用与脚本化写法见 CLI 文档,Agent 侧的会话生命周期与证据契约见 MCP 契约文档。下次 Functions 窗口空白,敲下analyze,证据自己会浮出来。
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考