REA对接Ghidra完整教程:Ghidra 12.1.x加JDK 21的配置与验证全流程
REA 是一个开源的 AI 逆向工程工具(Reverse Engineer Anything),它把 Ghidra、Hopper 等逆向引擎接入 AI Agent,让新手也能"问一句、查到底"。本教程带你从零完成 REA 对接 Ghidra 的全流程:安装 Ghidra 12.1.x、配置 JDK 21、用 rea doctor 验证环境、注册到你的 AI 客户端,最终跑通第一次二进制分析。
为什么是 Ghidra 12.1.x 加 JDK 21?
REA 的 Ghidra 适配器只接受官方验证过的版本组合,避免"版本漂移"导致分析结果异常:
| 检查项 | 要求 | 说明 |
|---|---|---|
| Ghidra 版本 | 12.1.x(已验证 12.1.4) | 由安装目录中的 application.properties 声明 |
| Java 版本 | JDK 21 或更高,无上限 | 由 application.java.min/application.java.max 声明 |
| JDK 类型 | 64 位完整版 JDK(含 javac) | 精简版 JRE 不被接受 |
| 平台 | Linux x64、macOS x64/arm64,Windows x64 为实验性 P0 | macOS 需带对应架构的原生反编译器 |
💡 官方从未要求你改装 Ghidra:REA 只做"连接 + 校验",从不下载、安装或升级 Ghidra 与 Java。
关键规则:JDK 版本必须以 Ghidra 安装自身声明的范围为准,而不是你想装什么装什么。当前 12.1 系列要求 JDK ≥ 21,所以 JDK 21 是最稳的选择。
第一步:安装 Ghidra 12.1.x 与 JDK 21(在 REA 之外完成)
按官方安装文档 docs/installation.md 的说明,这两样东西需要你自行解压安装:
- 解压 Ghidra 12.1.4 到固定目录,例如
/opt/ghidra_12.1.4_PUBLIC - 安装 JDK 21 完整版(确认
javac可用),例如/opt/jdk-21 - 确认 Ghidra 目录里存在
support/analyzeHeadless(Linux/macOS)或support/analyzeHeadless.bat(Windows)——这是 REA 启动无头分析的关键入口
macOS 用户额外注意:Ghidra 安装必须包含与本机架构匹配的原生反编译器,REA 不会替你构建它,也不会改动 Gatekeeper 隔离属性。
第二步:设置环境变量并快速验证
这是"REA 对接 Ghidra"最核心的一步——只需两个环境变量:
export GHIDRA_INSTALL_DIR=/opt/ghidra_12.1.4_PUBLIC
export JAVA_HOME=/opt/jdk-21 # 若 java/javac 已在 PATH 中,可省略
rea doctor --json
rea doctor --json 是纯只读的健康检查,它会逐项验证:
- 平台与架构是否受支持
- Ghidra 应用版本号是否为 12.1.x
analyzeHeadless启动器是否存在- 安装的 Java 大版本是否落在声明范围内
- JDK 是否为 64 位、
javac/javac.exe是否齐全
只排障 Ghidra 这一个引擎时,更精确的写法是:
rea doctor --provider ghidra --json
✅ 看到 Ghidra 相关检查项全部通过,说明环境对接成功,进入下一步。
第三步:rea setup 注册到 AI 客户端
rea setup
setup 会先给出完整计划再动手:列出的每一条环境变更(包括 Ghidra/JDK 路径)都需你逐一审阅并批准。它会:
- 为你选中的 Agent(Claude Code、Codex、Cursor、VS Code 等)写入 MCP 注册
- 保留已验证的 Ghidra/JDK 路径设置,写入所选客户端配置
- 原子替换 + 自动备份,Ctrl-C 随时取消且零改动
脚本化场景可用非交互模式:
rea setup --client codex --dry-run --json # 只读预览
rea setup --client codex --json # 批准后应用
完整安装选项见 docs/installation.md 的 "Review setup changes" 一节。
第四步:跑通第一次 Ghidra 分析
注册完成后,用 rea providers --json 确认 Ghidra 已被识别为可用引擎,然后对任意二进制发起分析:
rea inspect /path/to/binary --provider ghidra --json
此时 Ghidra 通过 REA 内置的 Java 桥(源码:ReaGhidraBridge.java)以临时私有工程方式导入目标副本,默认自动分析完成后才会返回结果。两个新手最常踩的坑:
- 首次查询较慢:冷启动包含导入 + 自动分析 + 桥接就绪,REA 的引擎启动上限是 330 秒,但你的 AI 客户端默认超时往往只有 60 秒。若在 SDK 里调用,记得调大
callTool的请求超时;超时后用close_binary再open_binary重新打开即可恢复,流程见 docs/mcp-contracts.md。 - 多引擎并存要显式选择:如果 Hopper 和 Ghidra 同时可用且都支持该目标,直接打开会报"ambiguous"。用
--provider ghidra、open_binary的provider_id: "ghidra"或环境变量REA_ANALYSIS_PROVIDER=ghidra指定一次即可。
配置成功后,你可以解锁 25 个只读的 Ghidra 操作:清单/名称/搜索 13 项 + 函数分析 12 项,涵盖反编译、汇编、调用解析、xref、指令级事实、恢复的数据类型等,详见 docs/native-investigation.md。
附:Windows 用户的等效配置
Windows x64 目前是实验性 P0 边界,仅支持本地 NTFS 上的原生 x86-64 PE 应用。在 PowerShell 中配置:
$env:GHIDRA_INSTALL_DIR = "C:\tools\ghidra_12.1.4_PUBLIC"
$env:JAVA_HOME = "C:\tools\jdk-21"
$env:REA_ANALYSIS_PROVIDER = "ghidra"
rea doctor --json
rea providers --json
rea inspect "C:\fixtures\sample.exe" --provider ghidra --format json
完整边界、DACL/Job Object 安全控制与验证方法见 docs/windows-ghidra-p0.md。
延伸阅读:Ghidra 的进阶玩法
- DOS MZ/COM 老程序分析:16 位 x86 实模式导入,docs/ghidra-dos.md
- NativeAOT 元数据恢复:固定版本无头适配器工作流,docs/ghidra-nativeaot.md
- 引擎选型与能力对比:Ghidra vs Hopper vs IDA,docs/provider-evaluation.md
- 验证流水线:
npm run verify:ghidra等真实引擎验收通道,docs/testing.md
按上面四步走完,你的 AI Agent 就拥有了完整的 Ghidra 静态分析能力——从"反编译某个函数"到"追踪一条调用链",直接对话即可完成。🚀
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/gitblog_00693/article/details/167271196




