Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/al3xtjames/ghidra-firmware-utils
嵌入式系统安全逆向工程硬件安全硬件与物联网安全二进制分析固件分析
GitHubal3xtjames/ghidra-firmware-utils

ghidra-firmware-utils

Ghidra 扩展,用于 PC 固件逆向工程,提供针对 PCI 选项 ROM、Intel Flash Descriptor、coreboot CBFS 和 UEFI 固件卷的加载器,以及用于类型恢复和 GUID 识别的 UEFI 辅助脚本。

查看仓库
49356135天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Ghidra 固件实用工具

用于 Ghidra 的各种模块,协助进行 PC 固件逆向工程。 该项目已被接受为 GSoC 2019 的 coreboot 项目。

功能特性

PCI 选项 ROM 加载器

  • 实现了 PCI 选项 ROM 的文件系统加载器(支持混合 ROM,即包含多个镜像的 ROM,例如传统 x86 + UEFI)
  • 从 PCI 选项 ROM 中加载 UEFI 可执行文件(包括压缩镜像)
  • 为传统 x86 选项 ROM 定义入口点函数及各种头部数据类型

固件镜像加载器

  • 实现了 Flash Map (FMAP) 镜像和 Intel Flash Descriptor (IFD) 镜像的文件系统加载器(显示闪存区域)
  • 实现了 Coreboot 文件系统 (CBFS) 镜像的文件系统加载器(显示包含的文件并处理压缩)
  • 实现了 UEFI 固件卷及嵌套固件文件系统 (FFS) 文件/FFS 节解析的文件系统加载器

Terse Executable (TE) 加载器

  • 实现了 TE 二进制文件的二进制加载器(常用于 UEFI PI)

UEFI 辅助脚本

  • 包含基础 UEFI 类型的数据类型库(取自 EDK2 MdePkg)
  • 修复入口点函数的签名
  • 在二进制的 .data/.text 段中定义已知 GUID
  • 定位并定义 UEFI 表指针的全局副本(gBS/gRT/gST 等)

构建与安装

需要 JDK 21(或更新版本)和 Ghidra 12.0(或更新版本)。

使用 Ghidra 的标准 Gradle 构建系统。在构建前设置 GHIDRA_INSTALL_DIR 环境变量,或将其设置为 Gradle 属性(便于在 IDE 中构建):

环境变量

root@kitploit:~
$ export GHIDRA_INSTALL_DIR="/path/to/ghidra"
$ ./gradlew

Gradle 属性

root@kitploit:~
echo GHIDRA_INSTALL_DIR=/path/to/ghidra > gradle.properties

[!NOTE] GHIDRA_INSTALL_DIR 应指向包含 support/buildExtension.gradle 的目录。例如,使用 Flathub 软件包 的用户应使用 /var/lib/flatpak/app/org.ghidra_sre.Ghidra/current/active/files/lib/ghidra。

模块 ZIP 将输出到 dist/ 目录。使用 文件 > 安装扩展,然后选择绿色加号浏览到该扩展。在提示时重启 Ghidra。

为获得正常功能,插件应使用与您的 Ghidra 安装相同的 JRE 构建。如果安装了多个 Java 运行时环境,请在构建前通过设置 JAVA_HOME 环境变量来选择正确的 JRE。

使用方法

PCI 选项 ROM 加载器

将 PCI 选项 ROM 添加到 Ghidra 项目中。传统 x86 选项 ROM 可直接加载进行分析。确保二进制格式设置为 x86 PCI Option ROM,然后导入该二进制文件。

UEFI 选项 ROM 或包含多个镜像的选项 ROM 应使用文件系统加载器导入。当提示选择导入模式时,选择 文件系统。选项 ROM 中包含的镜像将被显示,并可导入进行分析。传统 x86 镜像将由 x86 PCI Option ROM 加载器处理,UEFI 镜像将由 PE32 加载器处理(支持压缩)。可通过在右键菜单中选择 获取信息 来显示每个镜像的信息。

固件镜像加载器

将受支持的固件镜像添加到 Ghidra 项目中。固件镜像加载器支持带有 Flash Descriptor 的 Intel 镜像、带有 FMAP/CBFS 布局的 coreboot 镜像以及 UEFI 固件卷。可使用 文件系统 导入模式查看指定固件镜像中嵌入的文件。

请注意,某些 UEFI 固件镜像可能在自由格式/原始文件(或自由格式/原始 FFS 节)中存储嵌套的固件卷。此类文件可通过在指定自由格式/原始文件的右键菜单中选择 打开文件系统 作为固件卷导入。如果未找到嵌套固件卷,将显示错误消息(No file system provider for...)。

UEFI 辅助脚本

辅助脚本包含在插件的 ghidra_scripts 目录中,该目录应会自动添加到 Ghidra 的脚本目录列表中。

通过在脚本管理器窗口(通过 窗口 -> 脚本管理器 访问)中选择 UEFIHelper.java 来运行 UEFI 辅助脚本。

要修改 UEFI 数据类型库,请根据需要修改 data/gen_prf.sh 中的 PRF 模板并生成新的 PRF 文件。在 文件 -> 解析 C 源文件 中打开生成的 PRF 文件。通过选择 解析到文件... 构建更新后的数据类型库。覆盖 data 中的原始数据类型库并重新构建插件。

相关项目

以下是一些与 UEFI 逆向相关的有趣项目:

  • efiXplorer - 用于 UEFI 固件分析和逆向工程自动化的 IDA 插件
  • Ghidra-EFI-Byte-Code-Processor - 用于 Ghidra 的 EFI 字节码 (EBC) 处理器模块

许可证

Apache 2.0,但有以下例外:

  • src/efidecompress/c/efidecompress.c:BSD

致谢

src/efidecompress/c/efidecompress.c 是 uefi-firmware-parser 中 Decompress.c 的轻量修改版本(其本身源自 EDK2 BaseTools 中的原始版本)。

src/main/java/firmware/ifd 中的 IFD FS 加载器参考了 UEFITool 中的解析器。

data/guids.csv 中的 GUID 数据库取自 UEFITool。

data/uefi_*.gdt 中的 UEFI 数据类型库由 data/gen_prf.sh 生成,该脚本部分基于 wrffrz 的 Ghidra 拉取请求 中的 UEFI 解析器定义。这些数据类型库使用 EDK2 MdePkg 中的头文件。

UEFI 辅助脚本的部分内容参考了 xerpi 的 GhidraVitaLoader。

下载工具