本文档提供了创建、开发和分发Ghidra扩展的全面指南。Ghidra扩展允许开发人员通过创建可插入模块来扩展Ghidra的功能,这些模块可以与现有框架无缝集成。有关从源代码构建Ghidra本身的信息,请参阅构建Ghidra。
Ghidra扩展是独立的模块,通过插件架构扩展Ghidra的功能。它们被打包成zip文件,其中包含编译的代码、资源和元数据,可以安装到任何兼容的Ghidra安装中。
来源:gradle/support/extensionCommon.gradle18-129 DevGuide.md20-29
Ghidra支持多种类型的扩展,每种类型都有不同的用途
| 扩展类型 | 描述 | 主要类 |
|---|---|---|
| 分析器 (Analyzer) | 扩展Ghidra的分析能力 | AnalyzerBase 或 AbstractAnalyzer |
| 插件 | 扩展Ghidra用户界面 | Plugin 或 PluginTool |
| 加载器 | 加载/导入二进制文件格式 | 加载器 |
| 文件系统 (FileSystem) | 打开文件系统格式以供浏览或批量导入 | GFileSystem |
| 导出器 (Exporter) | 将Ghidra程序导出/保存为特定文件格式 | 导出器 (Exporter) |
| 处理器 | 启用处理器/架构的汇编/反编译 | Sleigh文件和处理器模块 |
开发Ghidra扩展需要
Extensions/Eclipse/GhidraDev目录中解压GhidraDev,并按照安装说明进行操作来源:GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/README.md40-78 README.md28-45
一个典型的Ghidra扩展项目具有以下结构
ExtensionName/
├── src/
│ ├── main/
│ │ ├── java/ # Java source code
│ │ ├── resources/ # Resources used by the extension
│ │ └── help/ # Help documentation
│ └── test/
│ └── java/ # Test code
├── ghidra_scripts/ # Ghidra scripts
├── data/ # Data files
├── Module.manifest # Module manifest
├── extension.properties # Extension properties
├── README.md # Documentation
└── build.gradle # Gradle build file
每个目录都有特定用途
src/main/java: 包含扩展的Java源代码src/main/resources: 包含资源,如图标和属性文件src/main/help: 包含帮助文档ghidra_scripts: 包含Python或Java脚本data: 包含扩展使用的数据文件每个扩展都需要
分析器扩展执行程序分析。这是基本结构
Ghidra扩展可以包含Python包来扩展功能
src/main/py目录build.gradle文件中配置Python包构建__init__.py、setup.py等)来源:gradle/hasPythonPackage.gradle16-103 Ghidra/Features/PyGhidra/build.gradle16-111
Ghidra扩展使用Gradle构建和打包。主要任务是zipExtensions,它会创建一个zip文件,其中包含所有扩展组件。
构建您的扩展
gradle zipExtensionsbuild/dist目录中创建来源:gradle/support/extensionCommon.gradle18-142
extension.properties文件定义了扩展的关键元数据
请注意,@extversion@是一个令牌,在构建过程中会被替换为实际的Ghidra版本。
来源:gradle/support/extensionCommon.gradle38-43
安装扩展
扩展也可以通过以下方式进行程序化安装
extensions目录Ghidra/Extensions目录您可以分发您的扩展
遵循Ghidra编码约定
测试
版本控制
依赖管理
资源处理
多线程
来源:DevGuide.md17-29 gradle/support/ip.gradle
如果您的扩展需要原生代码
扩展应正确处理其生命周期
对于插件,实现Plugin接口中适当的方法
来源:Ghidra/Features/PDB/build.gradle16-47 Ghidra/Features/PDB/buildNatives.gradle
扩展之间可以通过以下方式进行通信
这允许构建一个模块化的扩展生态系统,使它们协同工作。
创建Ghidra扩展提供了一种强大的方式来增强Ghidra的功能并与社区共享功能。通过遵循本文档中的指南,您可以创建、构建和分发与Ghidra无缝集成的扩展。
请记住
有关特定扩展类型或高级主题的更详细信息,请参阅Ghidra API文档和Ghidra随附的开发者指南。