0x01 启动IDA
- new:反汇编一个新文件
- go:运行,直接进入IDA
- Previous:载入一个我们以前编译过的程序
如果不想每次都看到这个对话框,可以取消该对话框底部的Display at startup(启动时显示),如果没有勾选这个,下次启动IDA时,IDA会认为我们单击了go选项。如果我们没有勾选这个,下次希望使用这个时,我们可以按照下图做,就又可以显示了。
文件加载
使用File—>open命令打开一个新文件时,会看到下图所示的加载对话框。IDA会自动生成一个可能的文件列表,并显示这个列表,这个列表中将显示最适合处理选定文件的IDA加载器。
- Windows PE加载器(pe.ldw)
- MS-DOS EXE加载器(dos.ldw),PE文件格式是MS-DOS EXE文件格式的拓展形式
- Binary File(二进制文件):这个选项会一直显示,不论加载什么文件,因为它是IDA加载无法识别的文件默认选项,它提供最低级的文件加载方式
- 如果IDA提供几个加载器,我们一般选择第一个,其他选项我们也一般默认
0x02 界面介绍
默认界面:
1、工具栏区域:
包含与IDA的常用操作对应的工具,我们可使用 VIew–>Toolbars----->Advance mode打开高级模式工具栏,高级模式工具栏包含三排工具按钮
2、彩色的水平带是IDA的概括导航栏,也叫导航带,是被加载文件地址空间的线性视图。我们可以右击导航带任何位置,并选择一个可用的缩放选项。不同的颜色表示不同类型的文件类型,如数据或代码。在导航带上,会有一个细小的当前位置指示符(默认为黄色)指向当前反汇编窗口中显示地址范围对应的导航带地址。我们可以通过options—>colors自定义导航带使用的颜色。
3、IDA为当前打开的每一个数据显示窗口都提供了标签。数据显示窗口中包含从二进制文件中提取的信息,他们代表数据库的各种视图。
通过View—>Open Subviews菜单可打开其他数据显示窗口
4、反汇编视图是主要数据显示视图,两种形式:图形视图(默认)和列表视图。我们可以使用空格键在图形样式和列表样式之间切换。
如果希望列表视图作为默认视图,则必须通过Options---->General菜单打开IDA Options复选框,取消Graph选项卡下的Use graph view by default
5、使用图形视图时,显示区很少能够一次显示某个函数的完整图形。这时,图形概况视图可提供基本图形结构的缩小快照,其中虚线矩阵表示其在图形视图中的当前显示位置。
6、输出窗口显示的是IDA输出的信息
7、函数窗口是默认IDA显示窗口的最后一部分
IDA 桌面提示和技巧
- 使用View–>Open SubViews恢复无意中关闭的数据显示窗口
- 使用Windows—>reset desktop命令可迅速将桌面恢复到原始布局
- 利用windows—>Save desktop命令保存你认为特别有用的当前桌面布局。使用Windows—>load desktop命令迅速打开你之前保存的一个桌面布局
- Disassembly窗口是唯一一个可以修改其显示字体的窗口,使用Options—>fonts命令可以设置字体
0x03 IDA数据显示窗口
基本规则:
- IDA不提供撤销功能。如果不小心按下某个键,导致数据库文件发生意外,这是,我们必须将显示窗口恢复到以前的状态
- 几乎所有的操作都有其对应的菜单项、热键和工具栏按钮。
- IDA提供方便的、基于上下文的鼠标右键操作菜单
IDA主要的数据显示窗口
在IDA中,ESC键是一个非常有用的热键。在反汇编窗口中,ESC键的作用与web浏览器的后退按钮类似。因此,它在导航反汇编窗口非常有用。遗憾的是,在打开其他的窗口时,ESC键用于关闭窗口。
1、反汇编窗口
反汇编窗口也叫IDA-View窗口,它是操作和分析二进制文件的主要工具。
反汇编窗口有两种显示窗口:图形和列表
IDA图形视图
图形视图将一个函数分解成许多基本块,以生动显示该函数由一个块到另一个块的控制流程。IDA使用不同彩色箭头区分函数块之间各种类型的流。在条件跳转位置终止的基本块可能会生成两种流:
- 红色:No边的箭头,不执行分支
- 绿色:Yes边的箭头,执行分支
还有一个蓝色箭头,指向下一个即将执行的块
我们可使用Ctrl+鼠标滑轮来调整图形的大小。 - 平移:通过单击图形概述和拖动图形视图的背景来定位图形
- 重新调整块位置。通过单击指定块的标题栏并将其拖到一个新的位置,用户还可以移动每一个块的位置
- 创建其他反汇编窗口:可以通过View–>Open subviews—>disassembly命令打开另一个反汇编空口。这样打开的第一个反汇编窗口叫做IDA View A。随后的反汇编窗口叫做IDA View B、IDA View C,以此类推。每个反汇编窗口都独立于其他窗口。我们可以在一个窗口中查看一个图形,在另一个窗口查看文本列表。
2、IDA文本视图
面向文本的反汇编窗口是查看和操作IDA生成的反汇编代码的传统显示窗口。文本显示窗口会显示一个程序的完整反汇编代码清单,用户只有通过这个窗口才能查看一个二进制文件的数据部分。
显示窗口的左边部分叫做箭头窗口,用于描述函数中的非线性流程。实线箭头表示非条件跳转,虚线箭头表示条件跳转。如果一个跳转将控制权交给程序中的某个地址,这时会使用粗线(实线或虚线)。出现逆向流程,通常表示程序中存在循环
函数窗口
Functions窗口用于列举IDA在数据库中识别的每一个函数
十六进制窗口
默认情况下,十六进制窗口显示程序内容和列表的标准十六进制代码,每行显示16个字节。我们可以打开几个十六进制窗口。
第一个16进制窗口会与第一个反汇编窗口同步。如果一个反汇编窗口与一个十六进制窗口同步,在一个窗口滚动鼠标,另一个窗口也会滚动到相应位置(同一个虚拟地址)。如果在反汇编窗口选中一个项目,十六进制窗口中的对应字节也将突出显示。
有时候,十六进制窗口显示的全部是问号,这表示IDA无法识别给定的虚拟地址范围内的值。
导出窗口
导出窗口列出文件的入口点
导入窗口
导入窗口的功能与导出窗口的功能正好相反。它列出由被分析的二进制文件导入的所有函数
结构体窗口
结构体窗口用于显示IDA决定在一个二进制文件中使用的任何复杂的数据结构的布局。
枚举窗口
如果IDA检测到标准枚举数据类型,它将在枚举窗口列出该数据类型
其他IDA显示窗口
下面讨论的窗口并不是你当前需要的信息,因此,IDA一开始并不开开这些窗口。
1.Strings 窗口
我们可以通过View —> Open SubViews —> Strings命令打开
Strings窗口中显示的是从二进制文件中提取出的一组字符串,以及每个字符串所在的地址,双击Strings窗口中的任何字符串,反汇编窗口将跳转到该字符所在的地址。IDA默认扫描的字符串类型为至少包含5个字符的C风格、以Null结尾的7位ASCII字符串。
每次打开Strings窗口,IDA都会扫描或重新扫描整个数据库,查找其中的字符串。扫描字符串的操作遵照Strings窗口的设置来完成,我们右击该窗口,在出现的菜单中选择setup,即可开始设置
- Display only defined strings (仅显示已定义的字符串)。这个选项使Strings窗口仅显示IDA自动创建或用户手动创建的已命名字符串数据项。
- Igonre instructions/data definitions(忽略指令/数据定义)。这个选项会使IDA扫描指令和现有数据定义中的字符串
2、names窗口
列举一个二进制文件的所有全局名称。双击Names窗口的名称,可立即跳转到显示该名称的反汇编视图。
Name窗口显示的名称采用了颜色和字母编码。其编码方案:
- F,常规函数。IDA认为这些函数不属于库函数
- L,库函数。IDA通过签名匹配算法来识别库函数
- I,导入的名称,通常为共享库导入的函数名称
- C,命名代码。
- D,数据
- A,字符串数据
3、段窗口
段窗口显示的是在二进制文件中出现的段的简要列表。该窗口显示的信息包括段名称、起始和结束地址以及许可标志。
双击段窗口的任何条目,IDA将跳转到反汇编窗口中该段的起始位置。右击一个条目,IDA将显示一个上下文菜单,你可以添加新段、删除现有段或者编译现有段的属性。
4、签名窗口
IDA利用一个庞大的签名库来识别已知的代码块。签名用于识别编译器生成的常用启动顺序,以确定可能已被用于构建给定二进制文件的编译器。
0x04 反汇编导航
基本IDA导航
1、双击导航
反汇编程序时,程序的每个位置都分配一个虚拟地址。只要提供希望访问的位置的虚拟地址,就可以导航到程序的任何地址。然而,记住大量地址并非易事。这促使早期的程序员给他们希望引用的程序位置分配符号名称。这大大简化了他们的工作。我们只需双击这些名称就可跳转。
2、跳转到地址
使用jump —>jump to address命令或在处于活动状态的反汇编窗口按下热键G,均可打开Jump toAddress对话框
3、导航历史记录
IDA的另一项类似于传统web浏览器的功能,是它的前进和后退导航功能(基于你浏览反汇编窗口的顺序)。每次你导航到反汇编窗口中的一个新位置,你当前的位置就会添加到位置列表中。有两种方式菜单操作可用于遍历这个列表。首先,Jump —>Jump to previous Position
或者使用ESC(只能在反汇编使用,其他窗口为关闭当前窗口),或者使用工具栏上的导航按钮
搜索数据库
在IDA中,你可以轻松导航到你知道的位置
1、文本搜索
IDA文本搜索相当于对反汇编列表窗口进行子字符串搜索。通过Search—>Text命令启动文本搜索或者Alt+T。搜搜限制于仅查找完整的词,并且能够匹配反汇编行中的任何完整的词,包括操作码助记符或常量。最后使用Ctrl+T或者Search—>Next Text命令可重复前一项搜索,以找到下一个匹配。
2、二进制搜索
二进制搜索仅搜索十六进制视图窗口。根据指定搜索字符串的方式,可以搜索16进制或ASCII字符串。
Search —>Sequence of Bytes或者Alt+B即可进行二进制搜索