IDA Pro权威指南——读书笔记(第四章:IDA入门)
本系列目录:https://blog.csdn.net/weixin_42559271/article/details/106946434
本章简介
第四章主要讲解了如何IDA的最最基础的用法,如IDA如何新建、保存、重新打开一个文件,第一次加载文件时选项所代表的含义,IDA的基本窗口界面。
以下是本章目录:
- 启动IDA
- IDA数据库文件
- IDA桌面简介
- 初始分析时的桌面行为
- IDA桌面提示和技巧
- 报告bug(本节略过)
1.启动IDA
IDA启动页面
如图,三个按钮的作用为:
按钮 | 作用 |
---|---|
New | 加载新的文件 |
Go | 不加载文件,直接打开IDA的工作区 |
Previous | 打开上次打开的目录 |
当然,也可以直接打开IDA的数据库文件idb来直接打开IDA。
如何利用IDA加载文件
点击左上角File->Open后在文件选择框选择相应文件,即可打开加载对话框:
此时IDA会执行位于loaders目录下的每一个文件加载器,他们会说明自己能否处理这个文件,如上图所示,一般来说文件加载器越往上其能提供的信息也就越多,在本次示例里面.Net加载器就能提供比PE、DOS、二进制加载器更多的信息。要注意的是,IDA不可能收集到世界上所有的二进制文件处理消息,如西门子的Step7生成的二进制文件就不在加载列表里面,这时能够提供的加载器选项就只有Binary file。
这时如果选择的是X86体系的架构,IDA选择让用户自定义段和偏移的有关信息,如果加载时这些字段填写错误了怎么办呢?可以在Edit->Segments->Rebase Program中修改。
同时,在使用这种模式进行加载,IDA还会进一步让你选择是使用16bit模式还是32bit模式:
如果选择的是其他的其他架构,那么则要手动创建ROM块和RAM块:
其他的按钮功能如下:
- Kernel Options:该选项提供了特定的反汇编选项,提供了接口给高级用户自定义其递归下降算法,在绝大多数情况下,默认选项是最佳选项,该窗口如下:
- Processor Options,这个选项我这里打不开,不知道是为什么
- Processor type,选择使用的处理器类型
- 其他的复选框选项是提供给高级用户的接口,大部分情况下使用默认设置即可,对于特殊情况,在21章会介绍。
IDA数据库文件
在加载完成后,会发现在打开的文件目录下有着几个文件:
这些文件其实是IDA的数据库文件,可以这样理解,IDA本质上是一个数据库文件,当IDA加载一个文件时,IDA以文件内容为输入,以自己的算法和特征库为函数,以数据库为输出,该数据库包含了被加载文件的大部分信息并添加了IDA自己的理解。当加载完成后,IDA的所有操作均是对创建好的数据库的操作,即使这时候将源文件删去,也没有丝毫的影响。
这几个文件的含义如下:
名称 | 解释 |
---|---|
id.0 | 该文件是一个数据结构为二叉树的数据库 |
id.1 | 该文件描述了被解析文件的每个字节的相关信息(即IDA对该字节的描述) |
.nam | 该文件显示了和程序偏移有关的符号信息,和IDA的Names窗口有关系 |
.til | 该文件给定了数据库的本地类型定义 |
.idb | 该文件是以上信息的集合,正常关闭IDA时以上四个文件被打包为这个文件 |
如果正常关闭IDA,只会看到.idb文件。
创建IDA数据库
创建IDA数据库实际上已经做过了,加载文件就是创建这个数据库,由于IDA选择对用户屏蔽创建数据库的细节,这里展示一下创建数据库过程中IDA到底干了什么事情:
- 确认加载文件后,IDA加载器开始工作:将文件从磁盘中加载到内存中->解析文件头信息->根据文件头信息确认程序块的属性,其中最重要的是该程序块是数据还是代码->将控制权返回给IDA之前确定特定的代码入口点。在该过程中,IDA会根据文件头信息确认一个虚拟内存布局
- 反汇编引擎接手工作,一次传递一个地址给处理器模块。处理器模块的工作包括:确认当前指令是什么指令、该条指令的下一条指令的地址在哪(由于存在分支)。当IDA确认找到了所有的指令后,处理器模块将每个指令转化成汇编指令。
- 在转化完成之后,IDA还会以注释的形式添加一些自己理解的以及从文件头中读取到的信息,如在开头解释了基址,虚拟内存大小等信息:
除了这些信息之外,IDA还提供了以下信息:
- 编译器识别,这里我也没有找到在哪里查看编译器识别,书上是说IDA会将编译器的公共代码部分染色以减少代码分析量;
- 函数参数和局部变量识别,随便打开一个函数,可以看到IDA通过匹配自身特征库,来识别函数使用的调用约定,从而在帮助分析人员更好的分析代码,可以看到,在使用了局部变量的地方使用了IDA特意的注释形式:
- 数据类型信息,IDA利用现有数据库,进行函数匹配,匹配成功后IDA的内部文档储存了这些函数的API文档,利用这些文档,可以帮助分析人员节省时间,可以看到,函数参数的类型,用处全部展示了出来:
关闭IDA数据库
在关闭当前分析的数据库时,IDA会给出一个关闭窗口,如下:
对每个选项进行解释:
- Don’t pack database:不打包数据库,对四个数据库文件不做打包处理,但是任然会记录下本次打开的所有操作
- Pack database (Store):将四个数据库进行打包,生成一个.idb数据库,但是该数据比较大,原因时没有进行压缩。
- Pack database(Deflate):该选项对应上一个选项,将数据库进行压缩,但是对于很大的数据库压缩和解压缩算法将耗费一些时间。
- Collect garbage:保存从数据库中删除没有用的内存界面,这个选项只有在磁盘空间不足时才能选择。
- DON’T SAVE the database:不保存本次所作任何修改。
重新打开数据库
本小节实际上是应付一些突发情况的,由于崩溃或者人为强行中断IDA,IDA可能不能正常关闭的数据库,对于这种情况,IDA会选择让你自己选择是否可能已经遭到破坏的数据库(Continue with unpacked base)或者使用上次的备份文件(Restore packed base):
如果选择使用可能遭到破坏的数据库,IDA会警告可能会发生不可预期的后果:
IDA桌面简介
如果正常打开了IDA,将会出现以下界面:
当新手第一次打开这个窗口,看到如此多的信息,肯定眼花缭乱,不要惊慌,越专业的软件其提供的信息肯定越多,接下来就来介绍每个窗口的作用,在介绍每个窗口之前,需要指出的一点是IDA的每个部分基本上都支持用鼠标移动以便用户自定义自己习惯的UI样式:
-
工作栏区域:这个位置列出了IDA常用操作的快捷按钮,可以在View->Toolbar处选择关闭或者打开,除了这个基本工具栏之外,还有一个高级模式工具栏,可在View->Toolbar->Advanced mode中选择Advanced mode 打开:
-
这个地方叫做IDA的导航带,显示了IDA分析的整个虚拟内存的情况,可以在导航带里面拖动光标在反汇编窗口达到任意位置,将鼠标停在导航带上可以看到当前位置的信息同时可以按住Ctrl并滚动鼠标滚轮实现导航带的放大和缩小,用户可以在Options->Colors处选择自定义颜色:
-
这个地方是类似于现代浏览器的页卡,展现了当前打开的所有窗口。
-
这个窗口是IDA的主要窗口,叫做反汇编窗口,可以运行在图形视图和列表视图里面。图形视图以函数快(即没有跳转分支的)为基本单位,很好的展示了程序的控制流,利用图中第5块可以分析出当前函数的大致流程是什么,需要注意的是图形视图只能在IDA确认函数边界的时候才能使用,这意味部分情况下是没办法使用这个视图的。
而列表模块则是线性的展示一个地址附近的汇编代码
在这两个视图之间切换的快捷键为Space(空格)
-
这个部分只在视图模块有用,由于屏幕的大小,要看得清楚整块函数的流程必然看不清每个函数块里面的代码,看得清每个函数块里面的代码,必然导致流程图太大,以至于整块屏幕都塞不进去,IDA的解决办法是增加5这个略缩图。
-
输出窗口,该窗口显示了IDA的输出信息,基本上起到了IDA的一个内置的命令行控制台的作用。
-
函数窗口:该窗口列出了IDA所识别出来的函数及其名称,双击即可跳转到对应地址。
IDA桌面提示和技巧
IDA的桌面使用技巧如下:
- 所有的窗口均可在View->Open Subviews处打开
- Windows->Reset Desktop 可以恢复初始布局
- Windows->Save Desktop可以保存现在的桌面布局,在Windows->Load Desktop可以打开保存的布局
- Disassembly(反汇编窗口)是唯一一个可以修改字体大小的窗口,在Options->Font设置字体。