ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何用一条命令做 AI 逆向工程:REA 本地逆向工具安装与结果核验完整指南

如何用一条命令做 AI 逆向工程:REA 本地逆向工具安装与结果核验完整指南

如何用一条命令做 AI 逆向工程:REA 本地逆向工具安装与结果核验完整指南

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

REA(Reverse Engineer Anything)是一个面向 AI 逆向工程的本地工具:它以本地 MCP 服务器加 CLI 两种形态运行,让 AI agent 在拿不到源码的情况下追查应用行为,覆盖 JavaScript/Electron 应用、原生二进制与固件。每条结论都附带可追溯的证据记录,分析全程在本机完成。这篇文章回答四件事:怎么最快跑起来、结果如何核验、能力边界在哪里、数据是否安全。

⚡ 最低环境要求:一个前置依赖与一条最小命令

运行依赖只有一条硬门槛:Node.js 22.x(>=22.23.4)、24.x(>=24.22.1)或 26.12.1+,外加 npm(来源:README.md)。在 Linux 上还有一项容易被忽略的前置:Ghidra、JADX、固件工具启动以及静态 JavaScript/Electron 分析都要求PATH上存在 procps 兼容的ps,用于进程归属检查(来源:README.md)。

最小可行命令是静态分析一个已解包的应用目录或 ASAR 文件,无需安装任何逆向引擎:

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

预期输出是一份 JSON:官方描述为 "The result includes modules, imports, Electron boundaries and their evidence."(来源:README.md),即模块清单、导入关系、Electron 进程边界,以及每条结论对应的证据。两点注意:

  • 大输出先落盘。官方明确提醒 "The complete application Evidence can be hundreds of megabytes for a real application."(来源:docs/cli.md),即完整应用证据文件可达数百 MB。文档给出实例:334 MB 的 Obsidian 证据文件投影为约 10 KB 的 summary 视图,建议先保存再用rea inspect-analysis-view投影摘要或分页模块视图,而不是一次性读完原始输出(来源:docs/cli.md)。
  • 要把 REA 注册进你的 agent,运行npx rea-agents setup,选择支持的 agent 并批准拟议的配置变更,随后重启 agent;setup 会保留既有配置的备份(来源:README.md)。

环境自诊断用rea doctor --json,可诊断单个引擎(--provider ghidra)、单个 agent 注册(--client codex)或工作流说明(--skill)。该命令的行为被文档限定为只读:"rea doctor --jsonis strictly read-only."(来源:docs/installation.md),不会修改任何配置。

🔍 结果可信度:证据记录的结构与人工核验清单

结果可信与否,取决于输出里有没有可供人工回查的原始信息。官方对每次工具调用返回的内容给出了契约原文:"Evidence records retain artifact identity, source locations, observations, inferences and unresolved findings."(来源:docs/cli.md),即证据记录保留工件身份、来源位置、观察、推断与未决发现。工具设计文档进一步要求 "Keep observed, derived, and inferred relationships distinct."(来源:docs/tool-design.md),即观察、派生、推断三类关系必须分开存放,不允许混写——读到一条"推断"时,你能看到它背后是哪条"观察"。

这张图证明原生分析结果来自一次真实的 Hopper 会话而非模型事后叙述:右侧 File Information 面板列出目标实际路径/usr/bin/true、Loader 为 Mach-O、CPU 为 AArch64,Address Information 面板定位到0x10000368;底部控制台可见 REA 的 Python 引导脚本正在 Hopper 内执行,Analysis pass 日志逐条滚动。

拿到一份输出后,建议用以下 3 个对照点自行核验,而不是直接采信结论:

  1. 工件身份对照:把 Evidence 里声明的被检文件身份与你实际传入的路径、文件内容比对,确认分析对象没有张冠李戴(对应 docs/cli.md 中 artifact identity 字段)。
  2. 来源位置对照:抽查若干模块/导入条目,到目标目录里确认对应文件真实存在且内容吻合(来源:docs/cli.md)。
  3. 未决项对照:检查结论中是否存在 unresolved findings 或 unknown 状态。官方规则是 "Missing coverage is unknown, not absence."(来源:docs/tool-design.md)——没查到记"未知",不冒充"没有"。一个具体例子:Rust 二进制缺失.dep-v0段时,REA 报告 "Absence of.dep-v0does not mean the binary has no dependencies."(来源:docs/rust-binaries.md),即把缺失标记为存在性未知,而非"无依赖"的证明。

原生侧的引擎会话同样带身份绑定:成功的 deep open 会暴露唯一不可变的 provider、具体版本与选择来源(来源:docs/mcp-contracts.md),Ghidra 的 Java 桥接源码可对照仓库内 bridge/ghidra/ 目录阅读。

📋 能分析的目标全景:支持矩阵与官方明确不做什么

按 README.md "What you can analyze" 表整理的常用目标矩阵(完整清单以该表为准,未列入本文的行不代表不受支持):

可分析目标REA 返回什么前置条件核验指引
JavaScript / Electron 应用模块、导入、Source Map、路由、IPC 与原生插件关系仅 Node.js 与 npm;Linux 另需 procps 兼容psdocs/javascript-application-workflows.md
原生二进制伪代码、汇编、字符串、符号、调用与引用Hopper / Ghidra / IDA / Kuna 之一docs/native-investigation.md
.NET 程序集元数据、CIL 指令、声明的原生依赖、构建对比无(纯静态,不加载不执行)docs/managed-code-analysis.md
Android APK清单声明、类、反编译方法、引用Headless JADX + 完整 JDK(Linux/macOS/Windows x64)docs/android-analysis.md
固件区域、提取结果、原生分析交接Linux 上的 Binwalk / Unblobdocs/firmware-analysis.md
Go 二进制内嵌编译器版本、模块、替换项、构建设置内置静态检查,无需安装 GoREADME.md 表格
Rust 二进制crate 名称、版本、来源、依赖边内置静态 ELF/PE/Mach-O 检查docs/rust-binaries.md
网站页面结构、脚本、网络观察、请求的截图Chrome 系浏览器docs/browser-observation.md

静态与运行时的分界也是官方写明的:"Static JavaScript and .NET inspection read the supplied files without running the application."(来源:README.md)——静态分析只读你给的文件,不运行目标进程;运行时抓取则以你的用户权限运行或交互目标进程。

官方明确不做什么

以下每条都有官方原文,引用后附含义:

  • 引擎故障不自动换人:"A selected provider is never replaced automatically after a runtime failure."(来源:docs/mcp-contracts.md)——选定 Hopper 失败不会悄悄切到 Ghidra,失败按原始原因返回。
  • 引擎输出不当源码:"pseudocode is never treated as original source or Hopper-equivalent text."(来源:docs/installation.md)——反编译伪代码永远不等于原始源码,引用它时应保留"推断"身份。
  • 不替你安装全部引擎:"REA does not install or update either provider."(来源:README.md)——针对离线检查用的 GNU objdump 与 Rizin,REA 只复用你自装的版本,不负责安装升级。
  • 缺失不等于没有:"Missing coverage is unknown, not absence."(来源:docs/tool-design.md)——覆盖范围缺口一律记为 unknown,不写成"不存在"。

🛡️ 数据流向与本地通信:文件不出本机

官方 FAQ 的回答很直接:"REA analyzes targets locally."(来源:README.md)——待分析文件在本机读取,没有上传环节。但同一节紧接着提醒 "its model provider has its own data policy"(来源:README.md):agent 会收到工具结果并送入你所选用的模型服务,该服务商的数据策略需要自行评估。

引擎侧原则是复用而非捆绑:"Native analysis can use an existing Hopper, Ghidra, IDA or Kuna installation; setup can optionally install Hopper with approval. Static JavaScript analysis needs no native analysis engine."(来源:README.md)——即深度原生分析优先用你已装的引擎,setup 仅在批准后安装 Hopper;静态 JavaScript 分析则一个引擎都不用装。

与 Ghidra 的进程通信同样不开公网端口。安装文档说明 Linux 与 macOS 上使用 "a current-user-only local bridge socket and descriptor"(来源:docs/installation.md),即仅限当前用户的本地 Unix socket 与文件描述符,且每次校验会话使用临时隔离的工程目录。

延伸资源:先读哪几份文档

  • docs/installation.md:安装、引擎与客户端配置——支持哪些 agent、provider 如何配置、doctor 报告如何读。
  • docs/cli.md:全量 CLI 命令——provider 选择、快照、Evidence 导入导出与比较、退出码。
  • docs/mcp-contracts.md:MCP 工具输出契约——会话如何绑定 provider、provider 选择细节。
  • docs/tool-design.md:工具设计原则——证据如何组织、observed/derived/inferred 如何分存。
  • docs/native-investigation.md:原生二进制分析工作流——从打开目标到函数卷宗。
  • docs/rust-binaries.md:Rust 依赖事实的表示——.dep-v0缺失时"未知"与"没有"的边界如何处理。

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

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进