给 AI 接上 Ghidra:12.1.x + JDK 21 环境配置与首跑验收速查
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
按本篇走完,你的 AI 客户端就能对话式调用 Ghidra 反编译任意二进制。本篇只干一件事:把 REA 的 Ghidra 引擎接上并通过环境验证——从 JDK 21 到首跑拿到结果。
版本契约:不满足就白装
这节先把硬性约束列清,避免装错版本白干一场。
| 检查项 | 要求 | 依据 |
|---|---|---|
| Ghidra 版本 | 12.1.x(已验证12.1.4) | 由安装目录application.properties声明 |
| Java 大版本 | JDK 21起、无上限 | 由application.java.min/application.java.max声明 |
| JDK 类型 | 64 位完整版(含javac) | 精简 JRE 不接受 |
| 平台 | Linux x64/arm64、macOS x64/arm64;Windows x64 为实验性 P0 | macOS 需架构匹配的原生反编译器 |
JDK 版本以 Ghidra 安装自身声明的范围为准,而不是你想装什么装什么。当前 12.1 系列要求JDK 21,所以它是下限里的稳选。
💡 官方边界很明确:REA 只做"连接 + 校验",从不替你下载、安装或升级 Ghidra 与 Java。
备料:三样东西就位
这节按交付物分组,三样齐了才谈接线。
- 引擎本体:解压 Ghidra 到固定目录,例如
/opt/ghidra_12.1.4_PUBLIC。 - 运行环境:装JDK 21完整版并确认
javac可用,例如/opt/jdk-21。 - 无头入口:确认目录里有
support/analyzeHeadless(Linux/macOS)或support/analyzeHeadless.bat(Windows)——这是 REA 启动无头分析的入口。
macOS 另需一条:Ghidra 安装必须带与本机架构匹配的原生反编译器,REA 不会替你构建它,也不改 Gatekeeper 隔离属性。
接线:两个环境变量 + 一次只读自检
这节是最核心的接线动作:设两条变量,跑一次纯只读自检。
export GHIDRA_INSTALL_DIR=/opt/ghidra_12.1.4_PUBLIC export JAVA_HOME=/opt/jdk-21 # java/javac 已在 PATH 时可省略 rea doctor --jsonrea doctor --json逐项在验这些:
- 平台与架构是否受支持
- Ghidra 应用版本号是否为12.1.x
analyzeHeadless启动器是否存在- 安装的 Java 大版本是否落在声明范围内
- JDK 是否 64 位、
javac/javac.exe是否齐全
只排 Ghidra 这一个引擎时,用更精确的排障命令:
rea doctor --provider ghidra --json✅ Ghidra 相关检查项全部通过,即算对接成功,可以往下走。
挂进客户端:setup 的审阅式注册
这节把 REA 安全地写进你选中的 AI 客户端。
rea 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 # 批准后应用完整选项见 Review setup changes。
首跑验收:从打开到拿到结果
这节确认 Ghidra 被识别,然后对任意二进制发起一次真实分析。
rea providers --json rea analyze /absolute/path/to/program --provider ghidra --jsonGhidra 通过 REA 内置 Java 桥以临时私有工程导入目标副本,默认自动分析完成后才返回结果。
两处最容易翻车
- 冷启动超时:引擎启动上限330 秒,覆盖导入 + 自动分析 + 桥接就绪;但你的客户端默认超时往往只有60 秒,会先超时。在 SDK 里记得调大
callTool的请求超时;超时后在同一连接上close_binary再open_binary重新打开即可恢复,详见 首跑超时与恢复。 - 多引擎歧义:若 Hopper 和 Ghidra 都支持该目标,直接打开会报 ambiguous。三种显式指定法任选其一:
--provider ghidra、open_binary的provider_id: "ghidra"、环境变量REA_ANALYSIS_PROVIDER=ghidra。
配置完成后你解锁25 个只读 Ghidra 操作:清单/名称/搜索13 项+ 函数分析12 项,涵盖反编译、汇编、调用解析、xref、指令级事实与恢复的数据类型,详见 原生指令、调用与类型原语。
平台速查
这节把三个平台的路径写法与差异并排给你,替代单独附录。
| 平台 | 路径写法 | 说明 | PowerShell 等价命令 |
|---|---|---|---|
| Linux x64/arm64 | /opt/ghidra_12.1.4_PUBLIC | 全功能 | — |
| macOS x64/arm64 | 同 Linux 绝对路径 | 需架构匹配的原生反编译器 | — |
| Windows x64 | C:\tools\ghidra_12.1.4_PUBLIC | 实验性P0:仅本地 NTFS 上的原生 x86-64 PE | $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 |
Windows 边界、DACL/Job Object 安全控制与验证方法见 Windows Ghidra P0。
延伸与排错
- Ghidra provider 语义:引擎选型对比时,理解 Ghidra 的观察边界与能力契约。
- DOS MZ/COM 老程序:16 位 x86 实模式导入的独立适配流程。
- NativeAOT 元数据恢复:固定版本无头适配器工作流。
- 真实引擎验证流水线:用
npm run verify:ghidra等通道做真实引擎验收。
到这里,你的 Agent 已具备完整的 Ghidra 静态分析能力——从"反编译某个函数"到"追踪一条调用链",一句话对话即可完成 🚀
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考