启动IDA

IDA入门【一】了解IDA_IDA


如果不希望看到欢迎信息,可以取消选中该对话框底部的Display at startup(启动时显示)复选框。如果选中这个复选框,将来启动IDA时,IDA会认为你已经单击了Go按钮,因而直接进入一个空白的IDA工作区。

  • New(新建)。选择New将启动一个标准的File Open对话框来选择将要分析的文件。根据选择的文件,IDA会显示另外一个或多个对话框,你可以选择特定的文件分析选项,然后再加载、分析和显示该文件。
  • Go(运行)。Go按钮终止加载过程,使IDA打开一个空白的工作区。这时,如果要打开一个文件,可以将一个二进制文件直接拖放到IDA工作区,或者使用File菜单中的某个选项打开该文件。前面介绍过,使用File->New命令可启动File Open对话框。默认情况下,IDA会利用已知扩展名的过滤器限制File对话框的显示。请确保修改或清除该过滤器(如选择All Files),以便File对话框正确显示你想要打开的文件。以这种方式打开文件时,IDA会尝试自动识别选定文件的类型。但是,要特别注意Loading对话框,看IDA选择了哪个加载器来处理这个文件。
  • Previous(上一个)。使用Previous按钮可以打开其下“最近用过的文件”列表中的一个文件。“最近用过的文件”列表中包含IDA的Windows注册表项的History子项中的值。最初这个历史记录列表的最大长度设为10,但你可以编辑idagui.cfg或idatui.cfg文件中的相应项目,将这一限制升高到100。要想重新处理最近用过的数据库文件,使用这个历史记录列表是最方便的选择。

IDA文件加载

使用File->Open命令打开一个新文件时

IDA入门【一】了解IDA_安全威胁分析_02


IDA会生成一个可能的文件类型列表,并在对话框顶部显示这个列表。这个列表中将显示最适合处理选定文件的IDA加载器。IDA通过执行loaders目录中的每一个文件加载器[插图],来确定能够识别新文件的加载器,从而建立了这个列表。

如果你同时选择了二进制文件输入格式和一种x86系列处理器,Loading Segment(加载段)和Loading Offset(加载偏移量)字段将处于活动状态。由于二进制加载器无法提取任何内存布局信息,在这里输入的段和偏移量值将共同构成所加载文件内容的基址。在最初的加载过程中,如果忘记指定基址,可以在任何时候使用Edit->Segments->Rebase Program命令来修改IDA镜像的基址。

Kernel Options(核心选项)按钮用于配置特定的反汇编分析选项,IDA可利用这些选项改进递归下降过程。绝大多数情况下,默认选项提供的都是最佳的反汇编选项。另外,IDA帮助文件提供了其他与可用核心选项有关的信息。

Processor Options(处理器选项)按钮用来选择适用于选中的处理器模块的配置选项,但它不一定对每个处理器模块有效。它只能为反汇编过程提供有限的帮助,因为这些选项非常依赖于用户选定的处理器模块,以及模块创建者的编程能力。

使用二进制文件加载器

选择使用二进制加载器,需要比平常做更多的工作。由于没有文件头信息引导分析过程,必须手动执行通常由更加强大的加载器自动完成的任务。需要使用二进制加载器的情形包括:分析从网络数据包或日志文件中提取出来的ROM镜像和破解程序负载。
如果同时选择x86处理器模块和二进制加载器。由于IDA无法获得可用的文件头信息,用户需要指定是将代码作为16位模式代码,还是作为32位模式代码处理。IDA还能够为ARM和MIPS等处理器区分16位与32位模式。
二进制文件并不包含有关内存布局的信息(也就是说,至少不提供IDA能够识别的信息)。如果选择一个x86类型的处理器,则必须在加载器对话框的Loading Segment和Loading Offset字段中指定基址信息。对于所有其他类型的处理器,IDA会显示如图4-4所示的内存布局对话框。为了方便,可以创建一个RAM块或一个ROM块,或者同时创建这两个块,并指定每个块的地址范围。Input File选项用来指定应加载输入文件的哪一个部分(默认为整个文件),以及文件内容所对应的地址。

IDA数据库文件

单击OK按钮关闭对话框后,加载文件的工作才真正开始。
IDA的任务是将选定的可执行文件加载到内存中,并对相关部分进行分析。随后,IDA会创建一个数据库,其组件分别保存在4个文件中,这些文件的名称与选定的可执行文件的名称相同,扩展名分别为.id0、.id1、.nam和.til。

  • .id0文件是一个二叉树形式的数据库
  • .id1文件包含描述每个程序字节的标记
  • .nam文件包含与IDA的Names窗口中显示的给定程序位置有关的索引信息
  • .til文件用于存储与一个给定数据库的本地类型定义有关的信息

这些文件的格式为IDA专用,在IDA环境以外很难对它们编辑。
为了方便,在你关闭当前项目时,这4个文件将被存档,你还可以选择将它们压缩成一个IDB文件
如果数据库正常关闭,你绝不会在工作目录中看到扩展名为.id0、.id1、.nam或.til的文件。如果工作目录中存在这些文件,则往往表示数据库被意外关闭(例如,IDA崩溃),这时数据库可能被损坏。
一旦IDA为某个可执行文件创建数据库,它就不再需要访问这个可执行文件,除非你希望使用IDA的集成调试器调试这个可执行文件本身。从安全角度看,这是一项有用的功能。例如,在分析一个恶意软件样本时,只需在分析人员之间传递相关数据库,而不必传递可执行的恶意文件本身。使用IDA数据库作为恶意软件的攻击向量,这样的案例尚未出现。
就本质而言,IDA不过是一个数据库应用程序。分析可执行文件时,IDA会自动创建和填充新的数据库。IDA提供的各种显示不过是各种数据库视图,以一种有利于软件逆向工程的格式发布相关信息。用户对数据库所做的任何修改都会在这些视图中反映出来,并随数据库一起保存,但这些更改并不会影响原始的可执行文件。IDA的强大之处在于,它包含各种可用于分析和操作数据库数据的工具。

创建IDA数据库

在你选择一个准备分析的文件并指定选项之后,IDA将开始创建数据库。
IDA会将控制权转交给你选定的加载器模块
IDA加载器将根据程序文件头包含的信息,确定一个虚拟内存布局,并对数据库进行相应的配置。
加载器完成工作后,IDA内的反汇编引擎将接管控制权,一次传一个地址给选定的处理器模块。
在这个反汇编完成之后,IDA将自动对二进制文件进行额外的分析,以提取出其他可能对分析人员有用的信息。
在IDA完成初始分析后,用户可能会在数据库中发现以下一些或全部信息:

  • 编译器识别
  • 函数参数和局部变量识别
  • 数据类型信息

关闭IDA数据库

任何时候你关闭一个数据库,无论你是完全关闭IDA,还是切换到另一个数据库,IDA都将显示一个Save database(保存数据库)对话框

IDA入门【一】了解IDA_安全_03

  • Don’t pack database(不打包数据库)。这个选项仅仅刷新对4个数据库组件文件所做的更改,在关闭桌面前并不创建IDB文件。在关闭数据库时,不建议使用这个选项。
  • Pack database(Store)[打包数据库(存储)]。选择Store选项会将4个数据库组件文件存到一个IDB文件中。之前的任何IDB不经确认即被覆盖。Store选项不使用压缩。创建IDB文件后,4个数据库组件文件即被删除。
  • Pack database(Deflate)[打包数据库(压缩)]。Deflate选项等同于Store选项,其唯一的差别在于数据库组件文件被压缩到IDB归档文件中。
  • Collect garbage(收集垃圾)。如果请求垃圾收集,IDA会在关闭数据库之前,从数据库中删除任何没有用的内存页面。在选择这个选项的同时,选择Deflate选项可创建尽可能小的IDB文件。通常,只有在磁盘空间不足时才选择这个选项。
  • DON’T SAVE the datebase(不保存数据库)。你可能会感到奇怪,怎么会有人不保存自己的工作呢!要知道,要想放弃你当前对数据库所做的更改(上次保存之后),使用这个选项是唯一的办法。选择这个选项时,IDA会删除4个数据库组件文件,保留现有的未经修改的IDB文件。使用这个选项类似于在使用IDA时应用了撤销或还原功能。

IDA界面介绍

IDA入门【一】了解IDA_网络安全_04


IDA入门【一】了解IDA_逆向工程_05


工具栏区域包含与IDA的常用操作对应的工具。你可以使用View-Toolbars命令显示或隐藏工具栏。你可以使用鼠标拖放工具栏,根据需要重新设定它们的位置。带有单独一排工具按钮的IDA的基本模式工具栏如图4-9所示。用户可以使用View-Toolbars-Advanced mode打开高级模式工具栏。高级模式工具栏包含整整三排工具按钮。

IDA入门【一】了解IDA_逆向工程_06


彩色的水平带是IDA的概况导航栏,也叫做导航带。

导航带是被加载文件地址空间的线性视图。

默认情况下,它会呈现二进制文件的整个地址范围。你可以右击导航带内任何位置,并选择一个可用的缩放选项,放大或缩小显示的地址范围。不同的颜色表示不同类型的文件内容,如数据或代码。同时,在导航带上,会有一个细小的当前位置指示符(默认为黄色)指向与当前反汇编窗口中显示的地址范围对应的导航带地址。将光标悬停在导航带的任何位置,IDA会显示一个工具提示,指出其在二进制文件中的对应位置。单击导航带,反汇编视图将跳转到二进制文件中你选定的位置。用户可以通过Options-Colors命令自定义导航带所使用的颜色。

IDA入门【一】了解IDA_安全_07


数据显示窗口中包含从二进制文件中提取的信息,它们代表数据库的各种视图。绝大多数分析工作需要通过数据显示窗口完成。通过View-Open Subviews菜单可打开其他数据显示窗口,还可恢复任何意外关闭或有意关闭的窗口

IDA入门【一】了解IDA_IDA_08

反汇编视图 是主要数据显示视图,它有两种不同的形式:图形视图(默认)和列表视图。在图形视图中,IDA显示的是某个函数在某一时间的流程图。结合使用图形概况,你就可以通过该函数结构的视觉分解图来了解函数的运行情况。打开IDA-View窗口后,可以使用空格键在图形视图样式和列表视图样式之间切换。如果希望将列表视图作为默认视图,则必须通过Options-General菜单打开IDA Options复选框,取消选择Graph选项卡下的Use graph view by default(默认使用图形视图)复选框

IDA入门【一】了解IDA_安全威胁分析_09


使用图形视图时,显示区很少能够一次显示某个函数的完整图形。这时,图形概况视图可提供基本图形结构的缩小快照,其中的虚线矩形表示其在图形视图中的当前显示位置。在图形概况窗口内单击鼠标,可重新定位图形视图的显示位置。

IDA入门【一】了解IDA_安全威胁分析_10


输出窗口显示的是IDA输出的信息。在这里,用户可以找到与文件分析进度有关的状态消息,以及由用户操作导致的错误消息。输出窗口基本上等同于一个控制台输出设备。

IDA入门【一】了解IDA_网络安全_11


函数窗口是默认IDA显示窗口的最后一部分

小技巧

  • 使用View-Open Subviews命令恢复你无意中关闭的数据显示窗口。
  • 使用Windows-Reset Desktop命令可迅速将桌面恢复到原始布局。
  • 利用Windows-Save Desktop命令保存你认为特别有用的当前桌面布局。
  • 使用Windows-Load Desktop命令迅速打开你之前保存的一个桌面布局。
  • Disassembly窗口(无论是图形视图或列表视图)是唯一一个你可以修改其显示字体的窗口。
  • 使用Options-Font命令可以设置字体。