CTF-All-In-One/doc/2.2.6_Ghidra.md
firmianay f630f51de5 fix
2019-03-26 20:21:52 +08:00

9.0 KiB
Raw Blame History

2.2.6 Ghidra

Ghidra是RSA Conference 2019上NSA发布的一个开源的逆向分析工具。由于该分析工具使用Java开发因此可以在Windows、macOS和Linux系统上都可以运行且有不错的使用体验。此外由于Ghidra内置了Jython解释器我们还可以使用Java或Python开发自己的Ghidra插件或者脚本。至此对于无法忍受IDA Pro高昂售价的二进制安全研究者和CTFer来说不仅有了免费的开源工具甚至Ghidra在一些反编译的特性上比IDA Pro还要优秀对于其他的开源反编译工具如Binary Ninja和r2也将借鉴Ghidra中的反汇编实现为这些工具的质量更上一层楼。

1.Ghidra安装和初始化

Ghidra的官方地址https://ghidra-sre.org/,我们可以在官网上找到工具的下载链接和帮助文档。 想要安装使用Ghidra仅支持以下系统64位的Windows 7或Windows10、64位的Linux发行版最好是CentOS 7或是macOS 10.8.3以上的版本硬件的要求是4GB的内存和1GB的硬盘空间此外官网还提到建议使用双屏的显示器来操作Ghidra。Ghidra是使用Java开发的因此软件要求是需要系统中有安装Java 11 Runtime and Development Kit (JDK 11)。

Ghidra没有提供安装程序只有一个压缩包下载官网的描述是这样可以不修改系统的配置也便于删除该工具。我们以Windows系统为例来安装和使用Ghidra如果想解压Ghidra到系统盘符则需要管理员权限。

在运行Ghidra之前我们需要先配置Java的环境变量。对于Windows系统来说前往Oracle官网https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html下载Windows系统的安装程序后选择目录安装JDK之后就是设置环境变量了。此时我们需要

  • 新建一个名为JAVA_HOME的环境变量值为JDK的安装目录如C:\Program Files\Java\jdk-11.0.2

  • 新建一个classpath的环境变量值为 %JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

  • 最后在Path环境变量中添加 %JAVA_HOME%\bin的值就完成了

此时Java环境变量就设置完成了开启一个cmd窗口并输入java -version出现如下字样就代表Java环境变量设置成功此时就可以打开Ghidra了

Java环境变量

点击解压安装包后的Ghidra目录中的ghidraRun.bat就可以开启Ghidra了

Ghidra启动

那么接下来让我们学习Ghidra的使用。

2.Ghidra简单使用

Ghidra支持的处理器架构可以在Help菜单的Install Processers选项查看目前来看还是可以分析主流的架构的

Ghidra支持的处理器架构

Ghidra有GUI模式、CLI模式、Ghidra Server模式和独立Jar包运行模式上节我们是通过GUI模式打开运行的。Ghidra支持多人协作完成一个逆向项目多人可以使用多个设备对二进制可执行文件进行分析并将其修改提交到公共的server端存储库中相关配置和文档在Ghidra 安装目录下的server目录中有详尽的说明。Ghidra的Jar包模式指的是可以将Ghidra打包成一个Jar包来运行在Windows系统中只需要运行support目录下的buildGhidraJar.bat脚本即可打包成Jar包。

Ghidra的目录如下所示

Ghidra目录

其中docs目录是相关的离线文档Extensions是Ghidra的插件目录Ghidra目录是其主要程序目录GPL目录是独立的GPL支持程序server目录是Ghidra server的文档和执行程序support目录包含了一些在高级模式下调试和运行Ghidra的脚本。

对于Ghidra的插件安装可以在GUI模式中通过相应的菜单安装也可以直接将扩展解压到Extensions目录。如果我们想编写自己的Ghidra插件Ghidra也提供了一个名为GhidraDev的Eclipse插件在Eclipse中开发。

由于Ghidra支持多人协作因此我们在使用Ghidra分析可执行文件时首先需要创建工程。在File菜单的New Project选项选择是否共享该工程并设置工程的名称和目录即可。此时我们在File菜单点击Import File就可以导入想要分析的文件了

导入可执行文件

载入文件后会列出该可执行文件的详细信息:

导入可执行文件的详细信息

导入分析完成之后,我们可以在项目目录中找到该二进制可执行文件,双击即可进入:

Ghidra项目目录

双击后会提示该文件还未被分析我们选择OK在下一步的菜单中选择合适的分析选项即可进行分析

分析可执行文件

选择合适的Ghidra分析选项

分析完成之后就可以看到Ghidra的窗口了中间是反汇编代码右侧是类似IDA Pro F5功能的伪代码由于我们分析的可执行文件编译时添加了-g参数保留有调试信息因此反编译结果和源码相差无几

反编译结果

Ghidra的菜单栏和IDA Pro类似File菜单可以导入PDB文件或是打开新项目Edit菜单可以进行一些简单的设置Analysis菜单主要是分析选项的调整Navigation菜单有快捷的前往下一函数等功能Search菜单可以进行字符串的搜索等Tools菜单可以查看当前可执行文件的处理器帮助手册也有一个Diff功能。Window菜单可以快捷打开其他窗口如字符串等Help菜单可以查阅帮助文档和API文档等。

此外点击快捷工具栏的脚本管理按钮可以看到有很多辅助分析的Java、py脚本

脚本管理

选择脚本就可以直接运行,如字符串的搜索功能:

双击运行脚本

Ghidra常用的快捷键可以在docs目录下的CHeatSheet.html文件中查看。和IDA Pro一样多多使用才能将快捷操作熟练掌握。

3.Ghidra多人协作

Ghidra允许我们在机器上安装Ghidra服务以便多人协作分析某个文件或某些项目这恰是IDA Pro没有的功能。本节将对Ghidra的多人协作功能进行简单介绍。

Ghidra多人协作服务的相关帮助文件和脚本在Ghidra的安装目录的 server目录下在使用多人协作功能之前我们需要安装Ghidra Server的服务我们以在Windows系统下运行Ghidra的服务为例。由于在安装过程中需要获取管理员权限因此我们需要新打开一个管理员权限的cmd窗口并运行如下脚本

D:\\ghidra\_9.0\\server\> .\\svrInstall.bat

YAJSW: yajsw-stable-12.12

OS : Windows 10/10.0/amd64

JVM : Oracle Corporation/11.0.2/C:\\Program Files\\Java\\jdk-11.0.2/64

WARNING: An illegal reflective access operation has occurred

WARNING: Illegal reflective access by
org.codehaus.groovy.reflection.CachedClass

......

\*\*\*\*\*\*\*\*\*\*\*\*\* STARTING ghidraSvr
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

Service ghidraSvr started

安装服务完成之后,可以运行如下脚本检查服务状态:

D:\\ghidra\_9.0\\server\> .\\svrInstall.bat status

...

Name : ghidraSvr

Installed : true

Running : true

Interactive : false

Automatic : true

Manual : false

Disabled : false

Paused : false

Unknown : false

在输出窗口观察到服务正在运行就可以在Ghidra的新建项目填入相应的服务的IP与端口号即可。我们可以看到这里需要密码认证这时我们可以在新弹出的窗口看到本机的User ID在Server端的cmd窗口运行SvrAdmin.bat -add User\_id即可就可以在Server端默认的连接密码是changeme初次使用该密码会要求更改这个默认密码否则将会在24小时后过期。如果用户遗忘密码可以在Server端的cmd窗口运行SvrAdmin.bat -reset User\_id就可以重置密码为changeme

输入密码

输入密码成功登录后和本机的操作类似就可以进行新建一个项目了还可以针对连接到该Ghidra 服务器的用户对该项目的权限进行管理:

Ghidra服务端项目权限管理

此外Ghidra的多人协作功能还有着版本追踪功能在本地导入文件后并提交更改有该项目权限的用户就可以看到该文件了在对文件修改后并提交有权限的用户也可以同步该更改

Ghidra的版本追踪功能

Ghidra内建支持的协作功能比IDA Pro的插件支持更加人性化只是操作步骤还需要更合理的优化。官方文档对Ghidra的帮助文件写得十分清楚明了如果在使用中遇到疑问可以查阅相关文档或是寻求Ghidra社区的帮助。

经过一番尝试Ghidra的反编译功能的确很好用查看和定位汇编代码也十分方便但由于其是以Java编写的因此分析速度仍然不如IDA Pro快速且UI界面仍需美化才能更好的使用但是由于其开源的优势相信随着越来越多的二进制安全研究人员的参与Ghidra也会变得越来越易用。