Ghidra入门指南(上)

2020-09-09 4,968

Ghidra入门指南(上)

在本文中,我们将为读者详细介绍Ghidra的基础知识。首先,我们将介绍Ghidra的启动选项,然后,我们阐述打开单个二进制文件进行分析时,会发生哪些事情。最后,我们将对用户界面进行概述,以便为读者熟练使用该软件打下坚实的基础。

启动Ghidra

每次启动Ghidra时,都会闪现一个启动屏幕,用来显示Ghidra的标志、构建信息、GhidraJava版本号,以及相关的授权信息。由于启动屏幕的显示时间较短,如果你想仔细阅读软件版本方面的信息,可以随时从Ghidra项目窗口中选择Help菜单中的About Ghidra项来显示详细的版本信息。当启动屏幕隐退后,Ghidra会在Ghidra项目窗口中显示一个“每日提示”对话框,具体如下图所示。这时,您可以通过单击“下一个提示”按钮滚动浏览提示。当您准备好开始工作时,直接关闭 "每日提示 "对话框即可。

 

如果您不希望每次启动是都显示每日提示,只需取消对话框底部的 "启动时显示提示 "复选框即可。当您取消了该复选框后,如果又想每天显示该提示对话框的话,可以通过Ghidra的帮助菜单轻松地恢复该提示。

 image.png

1 启动Ghidra

新建项目

如果您是第一次启动 Ghidra,则需要先创建一个项目。如果您之前已经启动过Ghidra,那么,当前的活动项目将是您最近使用的项目。选择File菜单中的New Project菜单项,可以在此指定与项目相关的环境特征。创建新项目的第一步,就是在非共享项目和共享项目之间做出选择。在本文中,我们首先选择非共享项目。选择完毕后,您将看到图2所示的对话框。对于非共享项目来说,需要指定项目的目录和名称。

image.png 

2:新建一个Ghidra项目

 

在输入项目的文件夹后,单击Finish按钮,项目的创建过程就大功告成了。这时,软件将返回到Project窗口,新建的项目将被自动选中,如图3所示。

 

image.png 

3GhidraProject窗口

文件的加载

新建项目后,还需要为项目添加需要分析的文件。为此,可以选择File菜单中的Import File菜单项,找到要导入的文件并将其打开,或者直接将文件拖放到Project窗口的文件夹中即可。当您选择了一个文件后,将看到如图4所示的导入对话框。

 

image.png 

4  导入对话框

 

这时,Ghidra会生成一个潜在的文件类型列表,我们可以在对话框顶部的Format选择列表中看到它们:单击Format字段右侧的Information按钮,就会显示受支持的格式列表。实际上,Format选择列表提供的就是最适用于当前待分析的二进制文件的Ghidra加载程序的子集。对于本例来说,在Format选择列表中提供了两个选项:可移植可执行文件(PE)格式和原始二进制文件格式。无论导入哪种类型的文件,都会提供原始二进制文件选项,因为它是Ghidra加载无法识别的文件时的默认选项。当Ghidra提供了多个可选的加载程序时,接受默认选项不失为一个好主意,除非您确信Ghidra提供的选项是错误的。 

image.png 

5  对于当前程序来说所支持的格式

 

Language(语言)字段用于指定反汇编过程中应该使用哪个处理器模块。Ghidra的语言/编译器规范通常由处理器类型、端序规范(LE/BE)、位宽(16/32/64)、处理器变体和编译器ID(例如,ARM:LE:32:v7:default)组成。在大多数情况下,Ghidra会根据从可执行文件头中读取的信息来选择合适的处理器。

 

Destination Folder(目标文件夹)字段用于选择存放新导入文件的文件夹。默认情况下,会使用最高一级的项目文件夹,但您也可以添加子文件夹来存放导入的程序。您可以选择LanguageDestination Folder字段右侧的扩展按钮,以查看每个字段的其他选项。此外,您也可以编辑Program Name字段中的文本。需要注意的是,这里的Program Name(程序名称)是Ghidra用来指代被导入到项目(包括显示在项目窗口中)中的二进制文件的名称。默认情况下,它就是导入的文件的名称,但我们可以将其改为更有“内涵”的名称,例如“老大截获的恶意软件”。 

 

除了图4所示的四个字段外,您还可以通过Options按钮访问控制加载过程的其他选项。这些选项会随着所选的格式和处理器而发生相应的变化。图6中显示了针对calc.exex86PE文件)的选项,并选择了默认选项。虽然使用默认选项通常不失为一个好方法,但随着经验的积累,您也可以选择其他选项。例如,如果要把依赖的库都导入到项目中,则可以点选Load External Libraries选项。 

image.png 

6  PE文件的导入选项

 

虽然导入选项可以帮助我们更好地控制文件加载过程,但是,这些选项未必适用于所有输入文件类型。不过,在大多数情况下,我们还是可以依赖默认选项的。如果您希望进一步了解这些选项,请参阅Ghidra的帮助信息。

 

当您对加载选项满意并单击OK按钮后,将弹出一个Import Results Summary(导入结果摘要)窗口,如图7所示。该窗口用于展示之前所选的导入选项,以及加载程序从所选文件中提取的基本信息。 

 

image.png 

7  Import Results Summary窗口

 

使用原始二进制文件加载程序

有时,Format选择列会仅有Raw Binary(原始二进制文件)这一个选项。这说明Ghidra的所有加载程序都无法识别所选文件。比如,当我们分析自定义的固件映像以及从网络数据包捕获或日志文件中提取的攻击代码的有效载荷时,通常就需要用到原始二进制文件加载程序。在这些情况下,由于Ghidra无法通过文件头信息来指导加载过程,因此,这时必须由我们亲自指定处理器架构、位宽,甚至在某些情况下还必须指定具体的编译器。

 

例如,如果您知道二进制文件中包含x86代码,那么在Language对话框中会有多个选项可用,如图8所示。通常情况下,我们需要进行一些研究,偶尔还需要进行反复试验,才能将语言的选择范围缩小到合理的范围内。需要注意的是,任何与该二进制文件目标设备有关的信息都不可轻易放过,比如,如果确定该文件不是针对Windows系统的,那么,Compiler设置就应当选择gccdefault(如果可用的话)。 

 

image.png 

8  语言与编译器选项

 

如果Ghidra无法识别二进制文件的头信息,那么,它自然也无法识别该二进制文件的内存布局。如果您知道该文件的基地址、文件偏移量或长度,则可以将这些值输入到相应加载程序的选项字段中,具体如图9所示;当然,您也可以不输入这些附加信息,而是继续加载文件,而是在分析代码时通过Memory Map(内存映射)窗口提供这些信息。 

image.png 

9  Raw Binary加载程序选项

小结

在本文中,我们详细介绍了如何启动Ghidra,以及在加载二进制文件时的各种可选项。完成这些工作后,就已经为分析二进制文件做好了准备,在下一篇文章中,我们将为读者介绍如何使用Ghidra来分析二进制文件。

 


本文作者:mssp299

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/140660.html

Tags:
评论  (0)
快来写下你的想法吧!

mssp299

文章数:51 积分: 662

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号