在上一篇文章中,我们为读者详细介绍了创建项目,将二进制文件加载到项目中,并启动自动分析的具体过程。读者可能会问:Ghidra完成初始分析后,该干嘛呢?实际上,这时候具体干嘛就是你说了算了。但是无论做什么,都有必要先来了解一下Ghidra的各种显示窗口。
就像在前文看到的那样:启动Ghidra时,首先打开的是Project窗口。之后,当我们在项目中打开一个文件时,将会打开第二个窗口,即CodeBrowser窗口,也就是进行逆向分析工作的大本营。在前面的文章中,我们曾经使用CodeBrowser来自动分析二进制文件;而在本文中,我们将深入了解CodeBrowser的菜单、窗口和基本选项,以深入了解Ghidra的相关功能,从而创建一个更加符合个人习惯的逆向分析环境。
接下来,我们首先介绍Ghidra的主要数据显示窗口。
要想打开CodeBrowser窗口,只需从Ghidra的Project窗口中选择Tools菜单的RunTool、CodeBrowser菜单项即可。与通常情况下选择一个文件进行分析时自动打开的CodeBrowser窗口不同,这里打开的是一个空实例,这样的话,我们就可以方便的展示该窗口的功能和配置选项了,而不必担心受到与具体文件相关内容的影响,具体如图1所示。在默认配置下,CodeBrowser窗口具有六个子窗口。在介绍它们之前,让我们简单了解一下CodeBrowser窗口的菜单及其功能。
图1:未加载文件时的CodeBrowser窗口
在CodeBrowser窗口的顶部是主菜单,下面有一个工具栏。工具栏提供了一些最常用的菜单选项的一键式快捷方式。由于我们目前还没有加载文件,所以,我们将先重点介绍与加载文件无关的菜单选项;其他的菜单操作将在后文中加以介绍。
File菜单:它提供了大多数文件操作菜单的基本功能,包括Open/Close(打开/关闭)、Import/Export(导入/导出)、Save(保存)与Print(打印)等选项。此外,其中一些选项是Ghidra所特有的,例如Tool(工具)选项,可用于保存和操作CodeBrowser工具;而Parse C Source(解析C语言源代码)选项,则可以通过从C头文件中提取数据类型信息来协助反编译。
Edit菜单:它提供了一个适用于各个子窗口之外命令,即Edit菜单下面的Tool Options命令。该命令可以用来打开一个新的窗口,从而控制与CodeBrowser窗口中的许多工具相关的参数和选项。其中,与控制台相关的选项如图2所示。如果需要恢复到默认设置的话,只需点击右下角Restore Defaults按钮即可。
图2 CodeBrowser Console编辑选项
Analysis菜单:该菜单可用于重新分析二进制文件,或有选择地执行单个分析任务。
Navigation菜单:用于在文件中进行导航。该菜单提供了许多应用程序都支持的键盘导航功能,并为二进制文件添加了特殊的导航选项。除了使用该菜单提供的导航功能之外,读者也可以使用工具栏选项或快捷方式(位于在每个菜单选项的右侧)进行导航。
Search菜单:该菜单提供了内存、程序文本、字符串、地址表、直接引用、指令模式等方面的搜索功能。当然,更多的专业搜索概念将在后面的示例中结合上下文进行介绍。
Select菜单:该菜单用于选中文件的一部分,以针对其执行相应的处理。选择的对象可以是子程序、函数、控制流,最简单的情况下,则可以是需要突出显示的、文件中的某些部分。
Tools菜单: 该菜单提供了一些有趣的功能,用于为桌面引入额外的逆向分析资源。其中,最有用的是Processor Manual(处理器手册)选项,它可以调出与当前文件相关联的处理器手册。如果您试图打开一个缺失的处理器手册,软件将提供导入该手册的方法,具体如图3所示。
图3 缺失处理器手册时的提示信息
Window菜单:可以用来根据工作流程配置Ghidra工作环境。在接下来的几篇文章中,我们将重点考察默认的Ghidra窗口,以及各种常用的窗口。
Help菜单:提供了丰富的、条理清晰的、非常详细的选项。Help窗口支持搜索、视图、收藏夹、放大/缩小,以及打印和页面设置选项。
在下图的中间部分,展示的是展开后的Window菜单。在默认情况下,当启动CodeBrowser窗口时,会有六个可用的窗口被打开,其中包括:Program Trees(程序树)窗口、Symbol Tree(符号树)窗口、Data Type Manager(数据类型管理器)、Listing(清单)窗口、Console(控制台)和Decompiler(反编译器)窗口。每个窗口的名称都会显示在该窗口的左上方。对于这六个窗口来说,每个都会作为一个选项出现在Window菜单上;另外,部分窗口还在菜单正下方的工具栏上有对应的图标。例如,我们在图4中用箭头突出显示了打开和访问反编译器窗口的工具栏选项和菜单选项。
图4 CodeBrowser窗口,这里突出显示了Decompiler(反编译器)窗口的相关选项
实际上,在Ghidra中几乎所有常用的操作都有对应的菜单项、热键和工具栏按钮。即使没有的话,我们也可以自己创建它们,因为Ghidra的工具栏是高度可配置的,就像热键与菜单操作的映射一样,具体请参见CodeBrowser Edit菜单下面的Tool Options菜单项中的Key Bindings选项,或者直接将鼠标悬停在一个命令上并按F4键。如果这些还不能满足您的需求,Ghidra还提供了很好的、上下文敏感的菜单动作,以响应鼠标右键点击。虽然这些上下文敏感的菜单并没有提供一个给定位置的允许操作的详尽列表,但对于最常见的操作来说,都能提供良好的提示信息。这种灵活性使您可以使用最舒适的方式来执行操作,同时,当您熟悉Ghidra后,还能对环境进行定制。
接下来,让我们开始考察CodeBrowser窗口自动打开的六个默认窗口。首先,我们来了解一下所谓的内部窗口和外部窗口。
当您开始探索各种Ghidra窗口时,您将注意到一个现象:默认情况下,某些窗口在CodeBrowser桌面中打开的,而其他窗口则是在CodeBrowser桌面之外作为新的浮动窗口打开的。让我们花一点时间,在Ghidra的背景下,简要介绍一下这些内部窗口和外部窗口。
通常来说,这些“外部”窗口浮动在CodeBrowser环境之外,可能是互相联系的,也可能是相互独立的。通过这些窗口,我们可以与CodeBrowser窗口并排浏览它们的内容。外部窗口包括Function Graph、Comments和Memory Map窗口。
接下来,我们要介绍三种截然不同的“内部”窗口:
l 在CodeBrowser中默认打开的窗口(例如,Symbol Tree和Listing窗口)
l 与默认CodeBrowser窗口堆叠的窗口(例如,Bytes窗口)
l 使用CodeBrowser窗口创建的窗口或与其他CodeBrowser窗口共享空间的窗口(例如,Equates和External Programs窗口)
当您打开与另一个已打开的窗口共享空间的窗口时,它会出现在现有窗口的前面。共享相同空间的所有窗口都是选项卡式的,以允许在窗口之间快速导航。如果要同时查看共享一个空间的两个窗口,可以单击窗口的标题栏,然后将其拖动到CodeBrowser窗口之外。
需要注意的是:虽然从CodeBrowser窗口移出一个窗口很轻松,但是重新回到CodeBrowser窗口中就没有这么简单了。
在本文中,我们主要为读者介绍了在Ghidra中进行逆向分析工作的大本营,即CodeBrowser窗口。首先,我们详细考察了CodeBrowser窗口的菜单,然后,简单介绍了该窗口的各个子窗口的热键和按钮,以及内部窗口及外部窗口的概念。在下一篇文章中,我们将继续为读者介绍这些子窗口方面的知识。
本文作者:mssp299
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/140983.html