GhidraDev Eclipse 插件¶
GhidraDev 为在 Eclipse 中开发和调试 Ghidra 脚本与模块提供支持。
本文档中的信息以 GhidraDev 5.1.0 版本为准,并可能随着未来版本的发布而发生变化。
目录¶
变更历史¶
5.1.0: * 添加了 PyGhidra 无头运行配置。 * 新建的 Ghidra 模块项目现在包含默认的 .gitignore 文件(需要 Ghidra 12.2 或更高版本)。
5.0.1: * 修复了一个错误,该错误导致在使用 PyGhidra 运行配置启动时,Ghidra 无法发现 Ghidra 模块项目。
5.0.0: * 添加了对 PyGhidra 的支持。
4.0.1:
* 新建的 Ghidra 模块项目现在包含默认的 README.md 文件。
* 修复了一个错误,该错误导致使用项目的运行/调试配置启动时,Ghidra 无法发现导入的模块源码项目。
4.0.0:
* GhidraDev 已升级为与 Ghidra 11.2 及更高版本兼容。它不向后兼容 11.2 之前的 Ghidra 版本。旧版本的 GhidraDev 在尝试链接 Ghidra 11.2 或更高版本时会报告错误。
* GhidraDev 现在需要 Eclipse 2023-12 4.30 或更高版本。
* GhidraDev 现在需要 JDK 21。
* 修复了一个可能导致启动 Ghidra 时出现 GhidraHelpService 异常的问题。GhidraDev 现在正确强制要求 Ghidra 仅在初始类路径上使用 Utility.jar 启动。
3.1.0:
* GhidraDev 已升级为与 Ghidra 11.1 及更高版本兼容。旧版本的 GhidraDev 在尝试链接 Ghidra 11.1 或更高版本时会报告错误。
* GhidraDev 现在支持导入 Ghidra 模块源码目录。此功能在与 Ghidra 11.1 或更高版本创建的 Ghidra 模块项目配合使用时效果最佳。
* 如果检测到顶层 build 目录,GhidraDev 现在将无法启动 Ghidra。此中间构建产物的存在可能导致 Ghidra 出现运行时/调试问题。
3.0.2:
* 对原始 Ghidra 安装位置已移动的 Ghidra 项目执行 Link Ghidra 操作时,GhidraDev 不再抛出 IOException。
* GhidraDev 现在会阻止使用不受支持的 PyDev 版本。
3.0.1:
* 导出 Ghidra 模块扩展会在项目中生成一个中间 build 目录。此 build 目录现在会自动清理,以避免 Ghidra 运行时/调试问题。
* GhidraDev 现在会阻止将不受支持的 Ghidra 源码仓库添加为 Ghidra 安装。
3.0.0:
* GhidraDev 现在需要 Eclipse 2021-12 4.22 或更高版本。
* GhidraDev 现在需要 JDK 17。
* 修复了一个问题,该问题可能导致执行 Link Ghidra 后旧扩展错误地保留在 Ghidra 项目类路径上。
2.1.5: * 当 Eclipse 在 .p2 包池目录中安装 PyDev 时,Eclipse Python 断点现在可以正常工作。
2.1.4:
* 修复了对使用 Gradle 类路径容器的项目执行 Link Ghidra 时发生的异常。
2.1.3:
* 修复了一个错误,该错误导致 Ghidra 项目无法识别安装在用户 ~/.ghidra/.ghidra_<version>/Extensions 目录中的扩展。
2.1.2:
* 修复了当 ~/ghidra_scripts 目录不存在时,创建新的 Ghidra 脚本项目所发生的异常。
2.1.1:
* 当通过 Eclipse dropins 目录安装 PyDev 时,Python 调试现在可以正常工作。
* 修复了防止在 Ghidra 安装目录内创建 Ghidra 项目的检查中的错误。
2.1.0:
* 添加了对 Ghidra 9.1 的支持。GhidraDev 2.1.0 将无法为早于 9.1 的 Ghidra 版本创建新的 Eclipse 项目。
* 阻止了在 Ghidra 安装目录内创建 Ghidra 项目。
* 在 Ghidra 运行配置中添加了一个 Environments 选项卡,用于在启动 Ghidra 时设置环境变量。
2.0.1: * 修复了对从先前导出的归档文件导入的 Ghidra 项目执行某些操作时发生的异常。
2.0.0: * 改进了 Analyzer 和 Plugin 的 Ghidra 模块项目起始模板,并为 Loader、Exporter 和 FileSystem 添加了新模板。 * 创建新的 Ghidra 项目时,现在可以选择自动为项目创建 Ghidra 运行配置,并可自定义最大 Java 堆空间大小。 * 创建新的 Ghidra 项目时,如果从未设置过项目根目录,则项目根目录现在默认为工作区目录。 * 创建新的 Ghidra 项目时,Python 支持向导页面中的添加按钮现在会自动将 Ghidra 安装目录中找到的 Jython 解释器添加到 PyDev(如果 PyDev 没有配置任何 Jython 解释器)。 * Ghidra 项目的依赖项(如果也是项目)现在会传递给启动的 Ghidra,以便 Ghidra 能够将这些项目作为潜在模块发现。 * GhidraDev 弹出菜单现在在项目资源管理器中可见(以前仅在包资源管理器中可见)。 * 导出 Ghidra 模块扩展向导中添加了一个新页面,允许用户指向特定的 Gradle 安装。
1.0.2:
* 修复了在构建路径中指定了其他项目的项目上执行 Link Ghidra 时发生的异常。
1.0.1: * 初始发布。
最低要求¶
- Eclipse 2023-12 4.30 或更高版本
- Ghidra 11.2 或更高版本
可选要求¶
安装¶
GhidraDev 可以手动安装到 Eclipse 中,也可以由 Ghidra 自动安装,具体取决于你的使用场景。以下章节概述了不同的安装过程。
在 Eclipse 中手动安装(离线)¶
GhidraDev 可以像安装大多数 Eclipse 插件一样,安装到现有的 Eclipse 安装中。在 Eclipse 中:
1. 点击 Help -> Install New Software...
2. 点击 Add...
3. 点击 Archive...
4. 从 <GhidraInstallDir>/Extensions/Eclipse/GhidraDev/ 选择 GhidraDev zip 文件
5. 点击 OK(名称字段可留空)
6. 勾选 Ghidra 类别(或 GhidraDev 条目)
7. 点击 Next
8. 点击 Next
9. 接受许可协议的条款
10. 点击 Finish
11. 勾选 Unsigned 表格条目
12. 点击 Trust Selected
13. 点击 Restart Now
在 Eclipse 中手动安装(在线)¶
如果你有互联网连接,可以通过将官方更新站点添加到现有的 Eclipse 安装中来安装最新的 GhidraDev。这样可以提前访问新版 GhidraDev,而无需等待 Ghidra 的下一个版本发布,并且支持自动更新(如果你在 Eclipse 中启用了更新)。在 Eclipse 中:
1. 点击 Help -> Install New Software...
2. 使用:https://github.com/NationalSecurityAgency/ghidra-data/raw/main/Eclipse/GhidraDev/latest
3. 按 Enter
4. 勾选 Ghidra 类别(或 GhidraDev 条目)
5. 点击 Next
6. 点击 Next
7. 接受许可协议的条款
8. 点击 Finish
9. 勾选 Unsigned 表格条目
10. 点击 Trust Selected
11. 点击 Restart Now
通过 Ghidra 自动安装¶
Ghidra 能够在执行某些操作时启动外部关联的 Eclipse,例如在 Ghidra Script Manager 中点击 Eclipse 图标以选择编辑 Ghidra 脚本。Ghidra 需要知道 Eclipse 的安装位置才能启动它;如果该信息尚未定义,Ghidra 会提示用户输入。在 Ghidra 尝试启动 Eclipse 之前,如果 GhidraDev 尚未安装,它会尝试将 GhidraDev 安装到 Eclipse 的 dropins 目录中。
GhidraDev 功能¶
GhidraDev 提供了多种功能,用于在 Eclipse 中创建 Ghidra 相关项目并与之交互。GhidraDev 支持创建 Ghidra 脚本项目和 Ghidra 模块项目。Ghidra 脚本通常设计为单个 Java 源文件,由 Ghidra 在运行时编译,并通过 Ghidra 的 Script Manager 运行,或通过命令行传递给 Headless Analyzer 执行。Ghidra 模块旨在表示更大、更复杂的功能,例如 Analyzer 或 Plugin。当 Ghidra 模块可以投入生产时,可以将其导出并作为“扩展”安装到 Ghidra 中。
New Ghidra Script¶
打开一个向导,在指定位置使用提供的元数据创建新的 Ghidra 脚本。Ghidra 脚本可以在 Ghidra 脚本项目和 Ghidra 模块项目中创建。
New Ghidra Script Project¶
打开一个向导,创建一个与指定 Ghidra 安装相链接的新 Ghidra 脚本项目。该项目可以设置为在用户主目录的 ghidra_scripts 目录以及 Ghidra 安装中找到的任何脚本中开发脚本。
New Ghidra Module Project¶
打开一个向导,创建一个与指定 Ghidra 安装相链接的新 Ghidra 模块项目。该项目可以使用可选的模板源文件进行初始化,为实现高级 Ghidra 功能(如 Analyzer、Plugin、Loader 等)提供良好的起点。
Import Ghidra Module Source¶
打开一个向导,将 Ghidra 模块源目录导入为新的 Ghidra 模块项目。
Export Ghidra Module Extension¶
打开一个向导,将 Ghidra 模块项目作为 Ghidra 扩展导出到项目的 dist 文件夹。导出的扩展归档文件可以分发给其他用户,并通过 Ghidra 的前端 GUI 导入。导出过程需要 Gradle,Gradle 在向导中配置。请注意,要使用的 Gradle 版本在链接的 Ghidra 发布版本的 <GhidraInstallDir>/Ghidra/application.properties 文件中指定。
Link Ghidra¶
将 Ghidra 安装链接到现有的 Java 项目,从而为该项目启用 Ghidra 脚本/模块开发。如果在执行此操作时项目已经链接了一个 Ghidra 安装,则项目将重新链接到指定的 Ghidra 安装,这可以用于为不同版本的 Ghidra 构建项目、发现后来添加到 Ghidra 安装中的新 Ghidra 扩展,或修复损坏的项目。
首选项¶
- Ghidra 安装: 添加或移除 Ghidra 安装。某些功能(如创建 Ghidra 脚本/模块项目)需要链接到有效的 Ghidra 安装。
- 脚本编辑器: Ghidra 用于在 Eclipse 中打开脚本的端口。必须与 Ghidra 的
Eclipse Integration工具选项中的相应端口匹配。禁用此首选项可防止 GhidraDev 为此功能监听端口。 - 符号查找: Ghidra 用于在 Eclipse 中执行符号查找的项目名称和端口。必须与 Ghidra 的
Eclipse Integration工具选项中的相应端口匹配。禁用此首选项可防止 GhidraDev 为此功能监听端口。符号查找需要安装 Eclipse CDT 插件(支持的版本请参见可选要求)。
GhidraDev 的大部分功能也可以通过右键单击 Eclipse 的项目/包资源管理器(Project/Package Explorer)中的相应项目元素来访问。例如,通过右键单击现有的 Java 项目,然后点击 Ghidra -> Link Ghidra...,即可访问 Link Ghidra 功能。
启动和调试 Ghidra¶
GhidraDev 为 Eclipse 引入了两种新的运行配置,它们能够启动 Eclipse Ghidra 项目所链接的 Ghidra 安装:
* Ghidra: 启动 Ghidra GUI。
* Ghidra Headless: 以 headless 模式启动 Ghidra。默认情况下,此运行配置不会关联任何程序参数,而这些参数是告诉 headless Ghidra 要打开哪个项目、运行哪些脚本等所必需的。新创建的 Ghidra Headless 运行配置需要使用所需的 headless 程序参数进行修改。有关 headless 命令行参数的更多信息,请参阅 <GhidraInstallDir>/support/analyzeHeadlessREADME.html。
创建 Ghidra 运行配置有两种方式:
1. 点击 Run -> Run Configurations...
2. 右键单击 Ghidra(或 Ghidra Headless),然后点击 New
3. 在 Main 选项卡中,点击 Browse... 并选择要启动的 Ghidra 项目
4. (可选)通过编辑顶部的 Name 字段重命名新的运行配置
或者,您可以在 Eclipse 的包资源管理器(Package Explorer)中右键单击任意 Ghidra 项目,然后点击 Run As -> Ghidra。
要调试 Ghidra,请点击 Debug As -> Ghidra。GhidraDev 将自动将 Eclipse 切换到调试透视图。
NOTE: Ghidra 只能从现有的 Eclipse Ghidra 项目中启动/调试。不支持从 Eclipse 中独立于项目启动 Ghidra。
PyDev 支持¶
GhidraDev 能够与 PyDev 集成,以便方便地在 Ghidra 脚本和模块项目中配置 Python 支持。GhidraDev 同时支持 Jython 和 PyGhidra 两种 Python 实现。
NOTE: PyDev 从 10.0.0 版本起停止了 Jython 2 支持。如果您想将 GhidraDev 与 Jython 一起使用,则必须使用 PyDev 9.3.0。最新版本的 PyDev 支持 PyGhidra。
安装 PyDev¶
在 Eclipse 中:
1. 下载 PyDev(支持的版本请参阅 可选要求)
2. 解压 PyDev
3. 点击 Help -> Install New Software...
4. 点击 Add...
5. 点击 Local...
6. 选择解压后的 PyDev 目录
7. 点击 OK(名称字段可以为空)
8. 取消勾选 Group items by category(如果适用)
9. 勾选 PyDev for Eclipse
10. 点击 Next
11. 点击 Next
12. 接受许可协议的条款
13. 点击 Finish
14. 点击 Restart Now
配置 PyDev¶
GhidraDev 可以在以下情况下为 Ghidra 项目添加 Python 支持: * 创建新的 Ghidra 模块项目 * 创建新的 Ghidra 脚本项目 * 将 Ghidra 安装链接到现有的 Java 项目 * 以 PyGhidra 模式启动 Ghidra
为了让 GhidraDev 添加 Python 支持,PyDev 必须配置了 PyGhidra 或 Jython 解释器。GhidraDev 会显示一个它在 PyDev 首选项中找到的已检测到的 PyGhidra/Jython 解释器列表。如果没有找到解释器,可以通过点击 + 图标从 GhidraDev 中添加一个。
点击 Jython 的 + 图标时,GhidraDev 将尝试在所选 Ghidra 安装中查找捆绑的 Jython 解释器,并自动配置 PyDev 使用它。如果出于某种原因 GhidraDev 无法在 Ghidra 安装中找到 Jython 解释器,则必须在 PyDev 首选项中手动添加一个。
点击 PyGhidra 的 + 图标时,GhidraDev 将尝试查找上次用于启动 PyGhidra 的 PyGhidra 解释器。如果找不到,您将需要启动 PyGhidra 并重试。
启动和调试 PyGhidra¶
当安装了 PyDev 时,GhidraDev 会为 Eclipse 引入两种新的运行配置,它们能够以 PyGhidra 模式启动 Eclipse Ghidra 项目所链接的 Ghidra 安装:
* PyGhidra: 启动 PyGhidra GUI。
* PyGhidra Headless: 以 headless 模式启动 PyGhidra。默认情况下,此运行配置不会关联任何程序参数,而这些参数是告诉 headless PyGhidra 要打开哪个项目、运行哪些脚本等所必需的。新创建的 PyGhidra Headless 运行配置需要使用所需的 headless 程序参数进行修改。有关 headless 命令行参数的更多信息,请参阅 <GhidraInstallDir>/support/analyzeHeadlessREADME.html。
升级¶
GhidraDev 的升级方式取决于它的安装方式。如果 GhidraDev 是在 Eclipse 中手动安装的,则可以按照与安装时相同的方式进行升级。
如果 GhidraDev 是通过 Ghidra 自动安装的,则只需先从 Eclipse 的 dropins 目录中移除 GhidraDev 文件,然后按照安装一节中描述的两种方法之一进行操作即可完成升级。
卸载¶
GhidraDev 的卸载方式取决于它的安装方式。如果 GhidraDev 是在 Eclipse 中手动安装的,则可以在 Eclipse 中按以下步骤卸载:
1. 点击 Help -> About Eclipse
* macOS 用户:Eclipse -> About Eclipse
2. 点击 Installation Details
3. 选择 GhidraDev
4. 点击 Uninstall...
5. 选择 GhidraDev
6. 点击 Finish
7. 点击 Restart Now
如果 GhidraDev 是通过 Ghidra 自动安装的,则只需从 Eclipse 的 dropins 目录中移除 GhidraDev 文件并重启 Eclipse 即可完成卸载。dropins 目录位于 Eclipse 安装目录的顶层。
常见问题¶
- 我创建了一个 Ghidra 脚本项目。我应该在哪里创建新脚本?
- 最佳做法是在您的主目录
~/ghidra_scripts中创建脚本,因为 Ghidra 会自动在该目录中找到它们,无需任何额外配置。默认情况下,您的 Ghidra 脚本项目会有一个名为Home scripts的文件夹,它链接到您的主目录~/ghidra_scripts。您可以右键单击 Eclipse 中的此文件夹,然后执行GhidraDev -> New -> GhidraScript...;或者从菜单栏执行GhidraDev -> New -> GhidraScript...,并在Script folder框中填写您项目的Home scripts文件夹。
- 最佳做法是在您的主目录
- 如何从 Eclipse 以 headless 模式启动 Ghidra?
- GhidraDev 提供了自定义运行配置,可以以 GUI 模式和 headless 方式启动 Ghidra 安装。有关如何从 Eclipse 启动 Ghidra 的信息,请参阅启动一节。
- 为什么我的 Ghidra 模块项目无法识别我安装到 Ghidra 安装中的 Ghidra 扩展?
- 您很可能是在 Ghidra 安装被链接到您的 Ghidra 模块项目之后才安装的 Ghidra 扩展,而链接操作会在项目创建时自动发生。只需将您的 Ghidra 安装重新链接到项目,您的项目就会获取任何新发现的 Ghidra 扩展。
- 如何从 Eclipse 启动/调试 PyGhidra?
- 要以 PyGhidra 模式启动和调试 Ghidra,必须安装 PyDev,并且您的项目必须配置了 PyGhidra 支持。当满足这些条件时,PyGhidra 运行配置将变为可用。
其他资源¶
有关 GhidraDev 插件以及在 Eclipse 环境中为 Ghidra 进行开发的更多信息,请参阅 <GhidraInstallDir>/docs/GhidraClass/Intermediate/Scripting.html 中的 Ghidra Scripting 幻灯片集。
构建¶
GhidraDev 目前是从 Eclipse 构建的,并随 Ghidra 手动分发。理想情况下,将来我们会使用 Gradle,但目前还没到那一步。不过,我们的确依赖 Gradle 来生成 Eclipse 项目并构建 GhidraDev 的依赖项。
NOTE: 只有“Eclipse for RCP and RAP Developers”有能力执行以下说明。以下说明假设你正在使用此版本的 Eclipse。
导入 GhidraDev Eclipse 项目(默认情况下处于停用状态):¶
- 运行
gradle prepGhidraDev eclipse -PeclipsePDE - 在 Eclipse 中,
File -> Import -> General -> Existing Projects into Workspace - 从 ghidra 仓库中,导入
Eclipse GhidraDevFeature和Eclipse GhidraDevPlugin
更改版本号(GhidraDev 使用独立于 Ghidra 的版本号):¶
- 在 GhidraDevPlugin 项目中打开
plugin.xml - 在
Overview选项卡中,将Version字段更新为x.y.z.qualifier并保存 - 在
GhidraDevFeature项目中打开feature.xml - 在
Overview选项卡中,将Version字段更新为x.y.z.qualifier并保存 - 在
GhidraDevFeature项目中打开category.xml - 选中
ghidra.ghidradev (x.y.z.qualifier),然后点击Remove - 选中
ghidra.ghidradev并点击Add Feature - 选择
ghidra.ghidradev (x.y.z.qualifer),点击OK,然后保存 - 如有必要,更新更改历史部分
从 Eclipse 构建:¶
- 执行
gradle prepDev,确保 GhidraDev 的依赖项是最新的 File -> Export -> Plug-in Development -> Deployable features- 勾选
ghidra.ghidradev (x.y.z.qualifier) - 选择
Archive file,再选择要保存到的目录,并将其命名为GhidraDev-x.y.z.zip - 在
Options选项卡中,确保各项设置如下:- 导出源代码:UNCHECKED
- 打包为独立的 JAR 归档:CHECKED
- 生成 p2 存储库:CHECKED
- 对存储库进行分类:CHECKED + 浏览到 GhidraDevFeature 项目中的 category.xml 文件
- 限定符替换:CHECKED + 清空字段以使用默认值
- 另存为 Ant 脚本:UNCHECKED
- 允许目标平台中的二进制循环:CHECKED
- 使用工作区中编译的类文件:UNCHECKED
- 完成
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 gh/ghidra