news 2026/10/29 19:47:09

一条命令跑通二进制逆向:rea AI 逆向 CLI 终端实操指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一条命令跑通二进制逆向:rea AI 逆向 CLI 终端实操指南

一条命令跑通二进制逆向:rea AI 逆向 CLI 终端实操指南

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

手头一个陌生的 ELF,或者一个解包后的 Electron 目录,想弄清它的符号、调用关系和字符串落点,又不想打开图形界面反编译器。rea 就是为此做的:一个面向 Agent 的逆向 CLI,在本地一条命令完成分析,把符号、函数、引用连同原始证据一起返回。下面从只读体检讲起,到追完main的完整档案。

先量能力边界:用三个数字定预期

  • 重建级:官方案例 DX-Ball 把汇编还原成 C,通过 3,205 个 x86 用例,并复现全部 63 个编译函数字节;
  • 档案上限:单个函数档案最多含 3,000 条 p-code 操作、12,000 条 def-use 边,超出部分给出显式省略计数;
  • 时间预算:Ghidra 引擎的启动、导入与分析默认给 330,000 ms,没到预算不会假装完成。

引擎是可换角色:--provider在 Hopper、Ghidra、IDA 之间三选一,也可让 rea 自动挑;JavaScript/Electron 与 .NET 的静态分析则不依赖任何原生引擎。

🩺 用只读 doctor 体检,再按使用频率选安装档

第一次接触,先跑一次不改动任何配置的诊断:

npx -y rea-agents@latest doctor --json

它逐项核对 Node 版本(22.x ≥22.23.4、24.x ≥24.22.1 或 26.12.1+,23 与 25 两个大版本不在支持列表)、引擎可执行文件与 Agent 配置,失败项后面直接附修复命令。安装按使用频率分三档:

  • 只跑一次:始终npx -y rea-agents@latest <command>,零全局安装;
  • 当日常命令用:npm install --global rea-agents,包同时注册rea和rea-agents两个可执行名;
  • 接自己的 Agent:npx rea-agents setup注册 MCP 服务器与工作流指引,支持 Claude Code、Codex、Cursor、Gemini CLI 等 20 余种客户端;它只写配置,外部依赖一律自己装。

已有 Ghidra 的话,指认现有安装即可,rea 从此纯命令行驱动它:

export GHIDRA_INSTALL_DIR=/absolute/path/to/ghidra_12.1.4_PUBLIC export JAVA_HOME=/absolute/path/to/jdk-21 rea doctor --provider ghidra --json

rea 接受 Ghidra 12.x(≥12.1),桥接在 12.1.4 + JDK 21 上验证过。体检过后,rea providers --json和rea capabilities --json给出当前环境真正可用的清单,不是猜测。

从编译练手目标到追完 main 的完整档案

练手目标就在仓库里:scripts/fixtures/binary-layout.c,含四个全局变量、read_values()辅助函数与main。先 clone 下来,编译两份:

git clone https://gitcode.com/GitHub_Trending/rea2/rea cd rea gcc -O0 -g -o hello_debug scripts/fixtures/binary-layout.c gcc -O0 -s -o hello_stripped scripts/fixtures/binary-layout.c

hello_debug留作对照;hello_stripped剥掉了符号表,函数边界得靠引擎推断,是这条主线要啃的对象。从 stripped 版开跑:

rea analyze ./hello_stripped --provider ghidra --json

它执行binary_overview概览工作流,一次返回目标架构、文件格式、符号、字符串、函数清单与调用关系,并带目标身份。记下main的入口地址,逐层深入:

rea function ./hello_stripped main --provider ghidra --json rea decompile ./hello_stripped <main入口> --provider ghidra --json

function建函数档案:入口地址、谁调用它、它调用谁,外加控制流图;p-code 与 def-use 数据带省略计数。只想要汇编、不跑反编译,换rea instructions。追到read_values的调用边后,rea xrefs ./hello_stripped <地址> --provider ghidra --json给一份有上限的引用列表,原始类别保留;再定位字符串:

rea search ./hello_stripped "source-owned" --provider ghidra --json rea search ./hello_stripped . --kind procedures --mode regex --provider ghidra --json

第二条按 Java 正则匹配过程名。高频参数记两个:默认终端格式是 TOON,给人读的,脚本消费加--json;重复查询加--snapshot ./analysis.json,目标字节、操作、参数、provider、设置全部一致时才命中缓存。内存紧张用GHIDRA_HEADLESS_MAXMEM=512M压低 Ghidra JVM 堆。

绕开重型引擎:两条零分析器路径

Electron/JS 静态解析:对目录或.asar直接跑

npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json

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

离线 ELF 布局诊断:不建任何反汇编数据库,直接回答节区/段布局、原始符号与重定位、静态链接名,并给出 RELRO、NX、PIE、canary 等缓解标志的静态推断。它需要一个带 pwntools 4.15.0、pyelftools 0.33、Unicorn 2.1.2 的独立 Python(Linux x64):

REA_PWNTOOLS_PYTHON=/absolute/isolated-env/bin/python \ rea inspect-binary-layout ./hello_stripped --json

细节见 docs/binary-diagnostics.md。

读懂输出:身份基准、unknowns 与伪代码的成色

  • 身份:每条 Evidence 都带目标的路径、SHA-256 与 size,是后续所有结论的对齐基准。字节一变,快照命中与身份立刻失配;复现别人的结果前先核对这三样。
  • 覆盖度:结果明确切分完整分析与部分观察,unknowns列出没啃下来的部分——当信息读,不当报错读。
  • 成色:Ghidra 吐出的伪代码是反编译器输出,Limitations 栏会反复声明这一点,不会被包装成原始源码。

⚠️ 排障速查:先认退出码,再对高频坑

退出码语义:

退出码含义
0完成。允许带部分证据、警告或未解问题返回
1未完成。输入无效、权限、超时等,结构化输出会带原因
128 + N被信号 N 终止。130对应 SIGINT,143对应 SIGTERM

高频坑:

症状处理
capability_unavailable,details.selection_reason为ambiguous该目标被多个引擎同时支持,从details.candidate_ids挑一个显式指定--provider
Ghidra 启动超默认 330,000 ms 预算大目标调大:REA_GHIDRA_STARTUP_TIMEOUT_MS=1800000
Node 版本不达标按提示装受支持版本;rea update只负责 npm/Bun 全局安装自身
Linux 上 Ghidra/JS 分析在启动前被拒PATH 里缺 procps 版ps,先装 procps 包

用户可见错误逐条维护在 docs/user-visible-errors.csv,它提示你重试或跑rea doctor时,照办即可。

把结论变成重建:下一步读哪两份文档

命令行只是入口。README 里 DX-Ball、TH04(16 位 DOS 指令里恢复角度计算)、Notion(Electron renderer 追到主进程剪贴板桥)三个案例,示范从「看懂」到「写出来」的链路。系统学习两份文档就够:全部命令、快照与导入导出机制见 docs/cli.md,Agent 会话、证据链与工具契约见 docs/mcp-contracts.md,安装细节回 docs/installation.md。

【免费下载链接】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/10/29 19:42:46

Git - Linux离线安装

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

作者头像 李华
网站建设 2026/10/29 19:28:59

步进电机一圈脉冲数

步进电机一圈脉冲数 根据步进电机电机步距角&#xff0c;一般为0.9或1.8&#xff1b;如步角距为1.8度的话&#xff0c;电机转一周为200个脉冲(360/1.8)。 如果步进电机带细分的话&#xff0c;每个脉冲前进的度数就是步距角除以细分数&#xff0c;如2细分&#xff0c;电机转一周…

作者头像 李华
网站建设 2026/10/29 19:28:06

Z2400032基于Java+Mysql+SSM的校园在线点餐系统的设计与实现 代码 论文

在线点餐系统1.项目描述2. 技术栈3. 项目结构后端前端4. 功能模块5. 项目实现步骤注意事项6.界面展示7.源码获取1.项目描述 本项目旨在开发一个校园在线点餐系统&#xff0c;通过前后端分离的方式&#xff0c;为在校学生提供便捷的餐厅点餐服务&#xff0c;同时方便餐厅和食堂…

作者头像 李华
网站建设 2026/10/29 19:26:14

时间复杂度计算方法(简略)

一、什么是时间复杂度&#xff1f;在计算机科学中&#xff0c;时间复杂度&#xff0c;又称时间复杂性&#xff0c;算法的时间复杂度是一个函数&#xff0c;它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。简单定义&#xff1a;运行时间T与输入规模n…

作者头像 李华