前几天看到 NSA 放出来的一个 re 工具,这几天有点忙,今天才安排上的,打开的时候确实有点小惊喜,个人感觉比 IDA 看得舒服,但是算是各有所长吧,废话少说上图
既然能用到这种专业性那么强的东西各种功能就不用我介绍了吧
原本的安装指南是英语,有的人看了脑阔疼,我就瞎翻译一下(机翻+校对),个人能力有限如果有错请邮件告诉我:1565328054@qq.com
Ghidra安装指南
所提供的安装信息自Ghidra 9.0起生效,未来版本可能会有所变化。
平台支持
- Microsoft Windows 7 或 10(64位)
- Linux(64位,CentOS 7 是首选)
- macOS(OS X)10.8.3+( Mountain Lion 或更高版本)
注意:现在不推荐使用32位操作系统安装。如果您有特殊需求,请联系Ghidra团队。
最低要求
硬件
- 4 GB RAM
- 1 GB存储空间(用于安装的Ghidra二进制文件)
- 双显示器(强烈建议)
软件
Java 11和开发工具包(JDK)(参见Java Notes)
- 建议从jdk.java.net下载OpenJDK
(返回页首)
###
安装Ghidra
要安装 Ghidra,使用任何解压缩程序(内置 OS 实用程序,7-Zip,WinZip,WinRAR等)将 Ghidra 官网提供的压缩包解压缩到所需的路径
安装说明
- Ghidra 不使用传统的安装程序。相反,Ghidra 分发文件只是在文件系统上就地提取。这种方法有优点和缺点。从好的方面来说,安装 Ghidra 供个人使用不需要管理权限。此外,由于安装 Ghidra 不会更改任何操作系统配置,例如 Windows 上的注册表,因此删除 Ghidra 就像删除 Ghidra 安装目录一样简单。在不好方面,Ghidra 不会自动在桌面上创建快捷方式或显示在应用程序开始菜单中。
- 可能需要管理权限才能将 Ghidra 提取到某些文件系统目标(例如C:\),以及将 Ghidra Server 安装为服务。
- Ghidra 依赖于使用其安装目录之外的目录来管理临时和长时间保存的缓存文件。Ghidra 尝试使用专为此目的而设计的标准操作系统目录,以避免出现多个问题,例如将大量数据存储到漫游配置文件中。如果怀疑这些目录的默认位置导致问题,可以通过修改support/launch.properties文件中的相关属性来更改它们 。
Java Notes
Ghidra 需要在 PATH 上运行受支持的 Java Runtime 和 Development Kit 版本。但是,如果 PATH 上有一个Ghidra 不支持的 Java 版本,它将使用该版本的 Java(如果是 1.7 或更高版本)来帮助您在系统上找到支持的版本。如果无法自动定位,将提示用户输入要使用的 Java 主目录的路径( Java 主目录是 Java 的 bin 目录的父目录)。这最大限度地减少了 Ghidra 对预先存在的 Java 配置的影响。
Ghidra 是针对从 jdk.java.net 发布的 OpenJDK 开发和测试的。使用此 OpenJDK 发行版以获得最稳定的体验。
如果 PATH 上没有 Java 而导致 Ghidra 无法运行, 则应手动安装受支持的 JDK 并将其添加到 PATH 中。以下步骤概述了如何将 OpenJDK 添加到操作系统的 PATH 。
Windows:将 JDK 发行版(.zip文件)解压缩到所需位置,并将 JDK 的 bin 目录添加到 PATH :
提取JDK:
- 右键单击zip文件,然后单击Extract All …
- 单击“ 提取”
打开环境变量窗口:
Windows 10:右键单击Windows开始按钮,单击“ 系统”,然后点击“系统信息”
Windows 7:单击Windows开始按钮,右键单击“计算机”,然后单击“ 属性”
单击高级系统设置
单击环境变量…
将 JDK bin 目录添加到 Path 变量:
- 在系统变量下,突出显示路径并单击 编辑…
- 在“ 变量值字段的末尾,添加一个分号(;),(译者注:我的win10是进去后点击新建)后跟 <提取的JDK目录的路径>\bin
- 单击确定
- 单击 确定
- 单击 确定
重新启动任何打开的命令提示符窗口以使更改生效
Linux和macOS(OS X):将 JDK 发行版(.tar.gz文件)解压缩到所需位置,并将 JDK 的 bin 目录添加到 PATH :
提取JDK:
1
tar xvf <JDK distribution.tar.gz>
用您选择的编辑器打开〜/.bashrc。例如:
1
vi ~/.bashrc
在文件的最后,将JDK bin目录添加到PATH变量:
1
export PATH=<提取的JDK目录的路径>/bin:$PATH
保存存档
重新启动打开的终端窗口以使更改生效
在某些情况下,您可能希望 Ghidra 使用特定版本的 Java 启动,而不是 Ghidra 自动定位的版本。要强制 Ghidra 使用特定版本的 Java 启动,请在 support / launch.properties 文件中设置 JAVA_HOME_OVERRIDE 属性。如果此属性设置的 Java 为不兼容版本,Ghidra 将恢复为自动查找兼容版本。请注意,某些 Java 仍必须位于 PATH 上,以便 Ghidra 使用 JAVA_HOME_OVERRIDE 属性。这一限制将在未来的 Ghidra 版本中得到解决。
(返回页首)
Ghidra安装目录布局
安装 Ghidra 后,可运行的软件将被解压缩到我们将称为 <GhidraInstallDir> 的新目录。下面是对分发文件的提取完成后可以在 <GhidraInstallDir> 中找到的顶级目录和文件的描述。
Ghidra | Ghidra发行版的基本目录。包含运行Ghidra所需的文件 |
---|---|
Extensions | 可选组件,可扩展Ghidra的功能并将Ghidra与其他工具集成。 有关详细信息,请参阅“ 扩展”部分。 |
GPL | 独立的GPL支持计划。 |
server | 包含与 Ghidra Server 安装和管理相关的文件。 |
support | 包含用于调试Ghidra,在高级模式下运行 Ghidra 以及控制 Ghidra 如何启动的文件。 |
docs | 包含Ghidra的文档,例如发行说明,API文件,教程等。 |
ghidraRun(.bat) | 用于启动 Ghidra 的脚本。 |
LICENSE.txt | Ghidra 许可证信息。 |
licenses | 包含 Ghidra 使用的许可证。 |
(返回页首)
运行Ghidra
GUI模式
导航到<GhidraInstallDir>
运行ghidraRun.bat(Windows)或 ghidraRun(Linux或macOS)
如果 Ghidra 无法启动,请参阅 “故障排除和帮助”部分。
Ghidra服务器
Ghidra 可以支持多个用户在一个项目上一起工作。各个 Ghidra 用户启动并处理他们自己的特定 Ghidra 项目的本地副本,检查更改到包含该存储库的所有提交的公共存储库。有关安装/配置 Ghidra Server 的详细信息,请参阅 <GhidraInstallDir> /server/svrREADME.html 文件。
Headless (Batch) 模式
Ghidra 传统上以 GUI 模式运行。但是,它也能够使用命令行在Headless (Batch) 模式下运行。有关更多信息,请参阅 <GhidraInstallDir> /support/analyzeHeadlessREADME.html 文件。
运行单个 Jar
通常, Ghidra 作为整个目录结构安装,允许模块化包含或删除功能集,还提供许多可以扩展或配置的文件。但是,有时将 Ghidra 的全部或部分子集压缩到单个 jar 文件中会牺牲配置选项。这使得 Ghidra 更容易在Headless (Batch)操作的命令行运行,或者用作另一个 Java 应用程序的逆向工程功能库。
可以使用<GhidraInstallDir>/support/buildGhidraJar 脚本创建单个 ghidra.jar 文件 。
(返回页首)
扩展
扩展是可选组件,可以:
- 通过实验性或用户贡献的 Ghidra 插件或分析器扩展 Ghidra 的功能。
- 将其他工具与 Ghidra 集成,例如 Eclipse 或 IDA Pro 。
Ghidra 附带了以下可供使用的扩展(默认情况下不装载),可在 <GhidraInstallDir>/Extensions 目录中找到。
- Eclipse:用于预先存在的 Eclipse 安装 GhidraDev Eclipse 插件。有关安装和使用 GhidraDev Eclipse 插件的信息,请参阅 <GhidraInstallDir>/Extensions/Eclipse/GhidraDev/GhidraDev_README.html。
- Ghidra: Ghidra扩展(以前称为 contribs )。有关更多信息,请参阅 Ghidra扩展说明。
- IDAPro:用于让 Ghidra 使用 IDAPro 插件/装载器。
Ghidra扩展说明
Ghidra 扩展程序旨在从 Ghidra 前端 GUI 安装和卸载:
- 单击File → Install Extensions…
- 复选框中的 install extensions ; 取消选中 uninstall extensions 的框
- 重新启动 Ghidra 以使更改生效
如果用户没有对 <GhidraInstallDir> 的写入权限,则安装或卸载 Ghidra 扩展可能会失败。如果用户从共享安装位置运行 Ghidra ,则可能会发生这种情况。在这种情况下, Ghidra 安装目录的所有者将负责管理Ghidra 特定安装所使用的 Ghidra 扩展。
当 Ghidra GUI 不可用时,可以手动安装和卸载 Ghidra 扩展。如果系统管理员代表用户管理共享 Ghidra 安装的 Ghidra 扩展,或者用户希望将扩展安装到 headlessly 使用的 Ghidra 安装中,则可能需要这样做。
要在这些情况下安装扩展,只需将所需的 Ghidra 扩展存档文件解压缩到 <GhidraInstallDir>/Ghidra/Extensions 目录即可。例如,在 Linux 或 macOS 上:
将当前目录设置为<GhidraInstallDir>目录:
1
cd <GhidraInstallDir>/Ghidra/Extensions
将所需的扩展存档文件解压缩到当前目录:
1
unzip ../../Extensions/Ghidra/<extension>.zip
下次 Ghidra 启动时将安装扩展程序。
要卸载扩展,只需从 <GhidraInstallDir>/Ghidra/Extensions 中删除提取的扩展目录 。下次 Ghidra 启动时,将卸载扩展程序。
注意:如果有一个 Ghidra 运行实例在尝试删除的扩展目录上保存文件锁,则可能无法以这种方式卸载扩展。
(返回页首)
Ghidra开发
用户可以通过开发自定义 Ghidra 脚本,插件,分析器等 来扩展 Ghidra 的功能。
Ghidra 通过提供一个名为 GhidraDev 的自定义 Eclipse 插件来支持 Eclipse 中的开发,该插件可以在 <GhidraInstallDir>/Extensions/Eclipse 目录中找到。有关安装和使用 GhidraDev Eclipse 插件的更多信息,请参阅<GhidraInstallDir>/Extensions/Eclipse/GhidraDev/GhidraDev_README.html。
注意: Ghidra 不提供 Eclipse 。GhidraDev Eclipse 插件旨在预先存在的 Eclipse 中安装。
(返回页首)
升级说明
一般升级说明
!!!很重要!!!首先备份您的旧项目! !!!很重要!!!通过手动将 .rep 目录和 .gpr 文件从任何 Ghidra 项目目录复制到文件系统上的安全位置进行备份。默认情况下,新安装的 Ghidra 将使用用户最新版 Ghidra 中保存的配置文件。这允许任何已保存的工具配置自动移植到新项目。但是,这也可能会阻止在某些情况下自动配置新工具选项和功能。要打开包含最新配置的新工具,用户应从项目管理器窗口中选择Tools → Default Tools…当您打开使用以前版本的 Ghidra 创建的程序时,系统将提示您升级程序,然后才能打开它。在保存之前,升级不会覆盖旧文件。如果您将其保存(原始文件),您将无法再使用旧版 Ghidra 打开它。但是,您可以选择执行“Save As”,创建新文件并保持旧版本不变。请务必小心升级共享程序文件,因为访问该文件的每个人都必须升级其安装的 Ghidra 。
Ghidra Server 升级说明
有关升级 Ghidra Server 的详细信息, 请参阅<GhidraInstallDir> /server/svrREADME.html文件。
(返回页首)
故障排除和帮助
启动Ghidra
使用<GhidraInstallDir>和 <GhidraInstallDir>/support 中提供的脚本启动Ghidra时,您可能会遇到以下错误消息:
问题1:
找不到Java runtime 。
- 解决方案:Java runtime (java/java.exe)需要位于系统 PATH 变量上。请参阅“要求”部分,了解 Ghidra 必须预先安装指定的 Java 版本才能启动。
问题2:
找不到支持的 JDK 。
- 解决方案: Ghidra 启动脚本使用系统 PATH 上的 Java runtime 来查找 Ghidra 完成其启动所需的 Java Development Kit(JDK)的受支持版本。请参阅“ 要求”部分,了解 Ghidra 必须预先安装的 JDK 版本才能启动。
问题3:
退出时出错。在调试模式下运行以获取更多详细信息
- 解决方案: Ghidra无法在后台启动,并且正在抑制描述失败原因的错误消息。使用 <GhidraInstallDir>/support/ghidraDebug 脚本重新运行 Ghidra 以查看错误消息。
使用Ghidra
有几种方法可以帮助您使用 Ghidra:
- 可以在<GhidraInstallDir>/docs 中找到教程和文档。
- 当 Ghidra 运行时,可以在许多主题上获得广泛的上下文相关帮助。要访问主题的帮助,请将鼠标放在窗口,菜单或组件上,然后按
键。将显示该窗口/菜单/组件的帮助。 - 在 Ghidra 运行时,索引帮助可以在Help → Topics…下找到
(返回页首)
当前版本的已知问题
所有平台
- 显示指令的正确处理器手册页需要安装 Adobe Reader 8.0.x 或更高版本。Adobe 改变了阅读器版本 7.x 中的goto 页面。如果未安装较新版本的 Reader ,则处理器手册将显示在手册的顶部。使用比 8.0.x 还新的 Adobe Reader 版本适用于大多数平台,但某些平台和版本的阅读器仍然存在问题。
- 如果 GUI 更新线程长时间运行,则某些操作可能会阻止它们。
- 项目归档仅存储归档中的私有和签出文件。项目归档不支持基于服务器的存储库。
- 使用 Ghidra server 时,所有客户端和服务器都必须具有已定义的有效域名服务器(DNS),该服务器已在网络上正确配置,以进行正向和反向查找。
- 如果已定义叠加,则无法更改图像库。
- 语言版本控制和迁移不会处理上下文寄存器使用中的复杂更改。
- Ghidra以一种在较新版本的 Java 中弃用的方式使用 Java 反射。预计 Java 会警告非法反射访问,特别是在导入新文件时。未来版本的 Ghidra 将解决这个问题,以确保与最新版本的 Java 兼容。
Windows
- 如果旧版本的 7-Zip 包含任何长度为0字节的文件,则可能无法解压缩 Ghidra 分发文件。升级到较新版本的 7-Zip 以解决此问题。
Linux
- Ghidra Server 不支持基于 PAM 的用户身份验证( -a1 身份验证模式)。
- 一些用户报告了 4k 显示器和多监视器客户端设置上的 Ghidra GUI 渲染问题。这些问题归因于 Java 中报告的错误。升级到较新版本的 Java 可能会解决此问题。
- 在撰写本文时,在 Ubuntu 18.04 中安装 openjdk-11 软件包会导致安装 openjdk-10 ,这与 Ghidra 不兼容。
macOS(OS X)
- 使用网络驱动器(包括网络映射的主目录)在macOS(OS X)上构建新的 Ghidra 模块扩展会引发 Java 异常。 Java / macOS 社区已知此问题,但尚未发布修复程序。有关从 Eclipse 构建 Ghidra 模块扩展的更多信息,请参阅 <GhidraInstallDir> /Extensions/Eclipse/GhidraDev/GhidraDev_README.html 。
(返回页首)