Loading...

文章背景图

NationalSecurityAgency/ghidra — NSA 官方软件逆向工程框架

2026-10-24
1277
- 字
- 分钟
|

NationalSecurityAgency/ghidra — NSA 官方软件逆向工程框架

反汇编、反编译与分析已编译程序。
本周新增 Star 7,152 | 仓库 Star 总数 93,470 | Forks 10,499

项目 信息
官方仓库 https://github.com/NationalSecurityAgency/ghidra
官方发布页 https://github.com/NationalSecurityAgency/ghidra/releases
开发者指南 https://github.com/NationalSecurityAgency/ghidra/blob/master/DevGuide.md
语言 / 许可 Java(+ Python 脚本)/ Apache-2.0
默认分支 master
最新提交 2026-10-22
一句话定位 NSA 研究局维护的开源逆向工程框架:反汇编、反编译、图形化分析、脚本化,支持大量处理器指令集与可执行格式,可交互也可自动化运行

Ghidra 官方界面截图

▲ 图 0:Ghidra 官方界面截图(官方截图)


一、能力概览

  • 反汇编、反编译、图形化(graphing)、脚本化
  • 支持 大量处理器指令集与可执行格式:Windows、macOS、Linux 上的编译代码
  • 用户交互模式 与 自动化模式 皆可
  • 支持用 Java 或 Python 自行开发扩展组件与脚本
  • NSA 内部用于分析恶意代码与挖掘系统漏洞深度洞察

二、环境要求

支持平台

平台 要求
Windows Windows 10(build 1809 或更高)
Linux 支持
macOS 10.13 或更高

⚠️ 所有 32 位操作系统安装已废弃,如有特殊需求请联系 Ghidra 团队。

硬件

  • 4 GB RAM
  • 1 GB 存储(已安装的 Ghidra 二进制)
  • 强烈建议双显示器

软件

依赖 版本
Java JDK 25 64 位(运行时 + 开发包)。LTS 版本来源:Adoptium Temurin、Amazon Corretto
Python 3 3.9 ~ 3.15(调试器支持需 3.7 ~ 3.14;PyGhidra 支持需 3.9 ~ 3.15)
Gradle(仅构建源码时) 9.1.0+(或用内置 Gradle wrapper,需联网)
编译器(仅构建源码时) Linux/macOS 需 GCC 或 Clang + make;Windows 需 Visual Studio 2017+ 或 MSVC Build Tools(含 MSVC、Windows SDK、C++ ATL)

三、部署方式

方式 A:官方预编译发行版(推荐)

步骤:

  1. 安装 JDK 25 64 位 —— 从 Adoptium Temurin 或 Amazon Corretto 获取
  2. 下载 Ghidra 发行文件 —— 前往 Releases 页面,在 Assets 下拉中找到 ghidra___.zip

    ⚠️ 不要下载名为 "Source Code" 的两个文件中的任何一个 —— 那是源码,不是预编译发行版

  3. 解压发行文件

    ⚠️ 不要解压到已有安装目录的 上层(不要覆盖安装)

  4. 启动 Ghidra

启动命令:

# Linux / macOS
./ghidraRun

# Windows
ghidraRun.bat

或启动 PyGhidra(Python 模式):

# Linux / macOS
./support/pyghidraRun

# Windows
support\pyghidraRun.bat

安装说明要点

  • Ghidra 没有传统安装程序。发行文件直接解压就位。
  • 优点:个人使用 不需要管理员权限;安装不修改任何系统配置(如 Windows 注册表),卸载 = 删掉目录
  • 缺点:不会自动创建桌面快捷方式,也不会出现在开始菜单
  • macOS 首次启动:Gatekeeper 可能隔离未签名的 Ghidra 原生组件。两种解决办法:
  • 解压 之前 在终端执行:xattr -d com.apple.quarantine ghidra__.zip
  • 或首次启动 之前 按"构建原生组件"章节处理
  • 解压到某些路径(如 C:\ 根目录)可能需要管理员权限;把 Ghidra Server 装为服务也需要
  • Ghidra 使用 安装目录之外 的目录来管理临时与长期缓存文件(默认用操作系统标准目录)。如需修改,改 support/launch.properties 中的相关属性

Java 配置说明

  • Ghidra 需要 PATH 上 或 JAVA_HOME 环境变量 中有受支持的 JDK。JAVA_HOME 优先于 PATH
  • 若 PATH 上的 Java 版本不满足最低要求,Ghidra 会用它(若 ≥ 1.8)来 辅助定位 系统上受支持的版本;找不到时会提示你输入 Java 主目录路径(bin 目录的父目录)
  • 这样设计是为了 最小化对你已有 Java 配置的影响 —— 其它软件依赖的 Java 版本不会被破坏

方式 B:从源码构建(开发用途)

# 1. 下载并解压源码
unzip ghidra-master
cd ghidra-master
# 或:git clone https://github.com/NationalSecurityAgency/ghidra.git

# 2. 下载额外构建依赖到源码仓库
gradle -I gradle/support/fetchDependencies.gradle
# 若未安装 Gradle 但有网络,可用 ./gradlew(或 gradlew.bat)

# 3. 创建开发构建
gradle buildGhidra

压缩后的开发构建位于 build/dist/。

Windows 注意:gradle 需在 PATH 中;未安装 Gradle 时用 gradlew.bat。

方式 C:高级开发环境(Eclipse)

# 1. 先按方式 B 完成构建
# 2. 安装 Eclipse IDE for Java Developers
# 3. 准备开发环境
gradle prepdev eclipse buildNatives
# 4. 在 Eclipse 中导入项目

导入步骤:
- File → Import...
- General | Existing Projects into Workspace
- 选择源码仓库根目录
- 勾选 Search for nested projects
- 点击 Finish

Eclipse 完成构建后,可用提供的 Ghidra Eclipse 运行配置 启动并调试。


四、使用方法

4.1 四种运行模式

模式 启动方式 适用场景
GUI 模式 ghidraRun / ghidraRun.bat 日常交互式分析
Ghidra Server 见 /server/svrREADME.html 多用户协作:每人启动本地 Ghidra 副本,但把变更签入共享仓库
无头(批量)模式 见 /support/analyzeHeadlessREADME.html 自动化分析、CI 集成
单 Jar 模式 support/buildGhidraJar 脚本 把全部或部分功能压成单个 ghidra.jar,便于命令行无头运行,或作为其他 Java 应用的逆向能力库
PyGhidra 模式 support/pyghidraRun / pyghidraRun.bat 原生 CPython 3 支持

PyGhidra 细节:

  1. 进入 /support/
  2. 运行 pyghidraRun.bat(Windows)或 pyghidraRun(Linux/macOS)
  3. 若 pyghidra 模块尚未安装,脚本会 主动提示安装 及其依赖

手动安装:

python3 -m pip install --no-index -f /Ghidra/Features/PyGhidra/pypkg/dist pyghidra

也可以在 虚拟环境 中安装并运行 PyGhidra。安装后即可像普通 Python 模块一样使用:可在脚本中 import,也可用 pyghidra / pyghidraw 命令启动。详见 Ghidra/Features/PyGhidra/src/main/py/README.md。

4.2 GUI 基本工作流

  1. File → New Project → 非共享项目(个人)或共享项目(团队,含 Server)
  2. File → Import File → 导入目标二进制(Ghidra 自动识别格式)
  3. CodeBrowser 窗口打开导入的程序
  4. 分析:右键程序 → Auto Analyze(或 Analysis → Auto Analyze)
    - Ghidra 会自动做反汇编、函数识别、控制流图构建、字符串识别、数据类型推断等
  5. 导航:
    - Symbol Tree(左侧):函数、类、命名空间、标签
    - Listing(中间):反汇编 + 伪代码(C / C++)
    - Decompiler(右侧):反编译的伪代码
    - Defined Strings / Symbols
  6. 重命名与注释:选中符号 → 按 L 重命名,; 或 Ctrl+Alt+Enter 添加注释
  7. 导出:右键函数 → Export Function / Export Program

4.3 扩展与脚本

用户脚本: Ghidra 安装包含 GhidraDev Eclipse 插件(在 /Extensions/Eclipse/GhidraDev/),或在 Script Manager 中点击 Visual Studio Code 图标用 VS Code 编辑脚本。完整的 VS Code 工程可在 CodeBrowser 窗口中 Tools → Create VSCode Module project 创建。

⚠️ GhidraDev Eclipse 插件与 VS Code 集成 只支持针对完整构建的 Ghidra 安装进行开发(需从 Releases 下载)。

脚本语言: Java(Script Manager 内置 Jython / Java 脚本)或外部 PyGhidra 的 Python。

常用内置脚本目录: Ghidra/Features/Base/ghidra_scripts/。

BSim(行为相似度):Ghidra 插件,用于在大量二进制中查找结构相似的函数。

4.4 无头批处理示例

analyzeHeadless /path/to/projects MyProject -import /path/to/binary.exe \
  -postScript AnalyzeAllFunctions.java -deleteProject

常用参数:

参数 作用
-import 导入文件
`-postScript
评论交流
2 条

文章目录