news 2026/11/5 3:21:30

rea 逆向编排层:三条命令装好体检,15 分钟还原第一个 stripped 二进制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
rea 逆向编排层:三条命令装好体检,15 分钟还原第一个 stripped 二进制

rea 逆向编排层:三条命令装好体检,15 分钟还原第一个 stripped 二进制

【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea

你手上多了一个来路不明的.so,打开 IDA,Functions 窗口一片空白,光标在空白处闪了很久。rea 把这种局面压成一条终端命令:同一个 CLI 加一个 MCP 服务,让 AI Agent 和你走同样的命令去逆向原生二进制、JavaScript/Electron 应用和 .NET 程序集,返回的每个结论都带着证据。接下来先花一分钟把它的边界钉死,再按「装、验、跑」把最短链路走完,最后在一个 stripped 目标上把analyze到xrefs整条链路走通。

它不是反编译器,而是给 Agent 用的逆向编排层

先说清楚它不是什么:不是反编译器,不是调试器,也不是 IDE。它解决的核心问题只有一个——把「谁来当分析引擎」和「谁来提问」解耦:

  • 引擎可插拔:Hopper、Ghidra、IDA、Kuna,装哪个用哪个
  • 双入口:Agent 走 MCP,人走终端
  • 证据先行:每个结论附观察、推断和未解问题,不确定的不装懂

项目已在 GitHub 拿到三万 star,Discord 日常答疑。最典型的形态是:引擎 GUI 照常打开,但操作与取数全部由桥接层代劳。

三条命令跑通安装与体检

运行时要求Node.js 22.x(>=22.23.4)、24.x(>=24.22.1)或 26.12.1+,23、25 与预发布版不支持。包名是rea-agents。

① 装。不装全局也能先用npx -y rea-agents@latest跑一次性命令;想长期用rea这个命令,就装全局。装完注册 MCP,setup先列出要改的每个配置路径和备份方式,你确认后才写入,覆盖 Claude Code、Codex、Cursor、Gemini CLI 等客户端。它从不替你装 Node、Java、Ghidra 这类外部依赖。

# 安装 CLI,再把 MCP 注册到你的 agent 客户端 npm install --global rea-agents npx rea-agents setup

② 验。doctor严格只读,逐项查宿主平台、Node 版本、各引擎可执行文件;失败项后面直接跟修复命令,不替你改任何东西。

# 只读体检:全量或指定引擎 rea doctor --json rea doctor --provider ghidra --json

③ 指认引擎。原生分析要告诉它 Ghidra 在哪:设GHIDRA_INSTALL_DIR即可,Java 已在 PATH 就不必再设JAVA_HOME。

环境就绪。下面选一个最小目标,把整条逆向链路跑一遍。

逆向一个 stripped 二进制的完整链路

练手目标用仓库自带的 scripts/fixtures/binary-layout.c:17 行 C,两个全局变量、一个线程局部变量、一个read_values()辅助函数和main。

#include <stdio.h> #include <stdlib.h> int stored_value = 7; char zero_backing[8192]; __thread int tls_value; int common_value; __attribute__((noinline)) int read_values(const char *text) { char buffer[32]; snprintf(buffer, sizeof(buffer), "%s", text); return buffer[0] + stored_value + tls_value + common_value; } int main(int argc, char **argv) { return read_values(argc > 1 ? argv[1] : "source-owned"); }
# 编译出调试版与 stripped 版;stripped 版最能体现 rea 的价值 gcc -O0 -g -o hello_debug scripts/fixtures/binary-layout.c gcc -O0 -s -o hello_stripped scripts/fixtures/binary-layout.c

没有符号表,rea 依然能还原函数边界。四条命令由浅入深。

A. analyze:拿概览,先钉住目标身份

# 原生概览:身份、符号、字符串、函数 rea analyze /absolute/path/to/hello_stripped --provider ghidra --json

返回的 JSON 里,artifact段是后面所有结论的锚点:路径、SHA-256、大小,目标字节一变,身份就失配。coverage说明哪些分析完整、哪些只是部分观察;unknowns列的是「确实没解出来」,而不是被悄悄忽略。limitations还会反复提醒你:伪代码是反编译器输出,永远不是原始源码。

B. function / decompile / instructions:给 main 建档案

# 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 --json

function返回档案(dossier):入口地址、调用者与被调用者、控制流图,外加最多 3000 条 p-code 操作与 12000 条 def-use 边。decompile给可读伪代码。instructions只读 Ghidra Listing 的原始指令,不启动反编译器。三者语义边界严格分开——这是它和「一把梭反编译」最大的不同。

C. xrefs 与 search:从入口追到数据

# main 的引用,加上字面量与正则两种搜索 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 --json

xrefs返回有界列表,调用、跳转、数据、读写分类保留原始 ReferenceManager 类型;search用--kind strings|procedures选范围、--mode literal|regex选匹配。在这个 stripped 目标上,你能看到main到read_values的调用边,以及"source-owned"字符串的落点——从入口到数据,一条证据链闭环。

不用引擎的轻量路径

不是每次都值得拉起 Ghidra,两条路径零引擎。

第一条是 JavaScript/Electron 静态解析:

# 静态解析 JS/Electron 应用,不启动任何分析引擎 npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json

返回模块、导入、Electron IPC 边界及各自证据。对目录或.asar文件,rea analyze在未指定--provider/--snapshot时会自动路由到这条工作流。

第二条是离线 ELF 布局诊断,需要一个自带 pwntools 4.15.0、pyelftools 0.33 与 Unicorn 2.1.2 的隔离 Python 环境:

# 离线 ELF 布局诊断:不启动反汇编器数据库 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。刚编译的hello_stripped就是它的标准练手目标。

七条命令速查表

命令参数一句话作用
analyze--provider ghidra概览:符号、字符串、函数、调用
search--kind strings\|procedures搜字符串或函数名
--mode literal\|regex字面量或正则匹配
function函数名单函数档案:调用者、调用、CFG
decompile入口地址指定过程的伪代码
xrefs地址谁引用了这个地址
trace搜索词沿引用追踪一个功能
instructions函数名只读汇编,不反编译

三个全局参数:--json切结构化输出,默认终端格式是 TOON,适合人读;--provider显式绑定引擎,不传则按确定性规则自动选,REA_ANALYSIS_PROVIDER是默认提供方环境变量,命令行--provider优先;--snapshot /abs/path/program.json把结果缓存到本地快照,相同目标加同样参数直接复用,缓存命中时连引擎进程都不启动。

退出码速查与三个高频坑

退出码含义
0完成;结果仍可能含部分证据、警告
1未完成:输入无效、权限、取消、超时
128 + N被信号 N 终止,如 SIGINT 为 130

引擎选择歧义:analyze报capability_unavailable,details.selection_reason是ambiguous——多个引擎都支持该目标。

# 诊断指定引擎;doctor 严格只读 rea doctor --provider ghidra --json

从details.candidate_ids里挑一个,用--provider显式指定即可。

大二进制超时:Ghidra 启动期限默认 330000ms(约 5.5 分钟),覆盖导入、自动分析与桥接。

# 把 Ghidra 启动期限拉到 15 分钟 export REA_GHIDRA_STARTUP_TIMEOUT_MS=900000

小目标、小内存机器可另设GHIDRA_HEADLESS_MAXMEM=512M压低 JVM 堆。

行为与预期不符:多半是版本漂移,rea update把 npm 安装的 CLI 更新到最新。错误里提示 "Retry once; if it continues, runrea doctor" 时照做即可——仓库维护着一张逐条审核的用户可见错误清单。

追完第一个main,快照复用与导入导出机制看 docs/cli.md;想把 Agent 侧的会话生命周期和证据契约吃透,读 docs/mcp-contracts.md。

下次再遇空白的 Functions 窗口,别发呆了——敲下analyze。

【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 3:16:22

ADS122U04 24位ADC与PIC24HJ的工业温度采集及PID控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 3:16:21

ADS122U04搭配PIC18F4455的高精度多通道温度测量方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 3:16:19

工业温度测量:ADS122U04IPWR与STM32F765ZI高精度信号链设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 3:15:05

基于ADS122U04与TM4C129XNCZAD的工业级高精度温度测量方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 3:14:11

ADS122U04IPWR工业温度测量信号链设计实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华