【IDA PRO权威指南】一

发布时间 2023-04-07 10:00:23作者: Corax0o0

很喜欢这本书第一页上的一句话“站在巨人的肩上”,确实要好好读读这些本好书,不限于实用的工具书,还包括别的读物。
不扯了,今天开始也会写一些这本书的读书笔记,不会像就【加密与解密】那样分章节,而是有什么想写的就会写出来,内容多了就发一篇。

再认识一下这个开始界面吧

New引导选择一个新文件,Go不选文件直接进入,Previous选择近期打开的文件

顶部这个列表会显示最适合处理选定文件的IDA加载器。IDA通过loaders目录下的每一个加载器,来确定识别新文件的加载器。
PE文件格式是MSDOSEXE文件格式的扩展形式。BinaryFile二进制文件一般是提供最低级的文件加载方法,用于识别无法识别的文件。
processType(处理器类型)指定反汇编过程中使用的处理器模块
若同时选择二进制文件也就是binaryfile和一种x86处理器,则loading segment(加载段)和loading offset(加载偏移量)会处于活跃状态、也就是需要自己控制汇编开始的基址。
kernel option(核心选择)用于配置特定的反汇编分析选项。
processor options(处理器选项)用于选择适用选中的处理器模块的配置选项。
IDA数据库文件。打开一个文件进行加载的时候会产生四个文件

  • .id0 一个二叉树形式的数据库
  • .id1描述每个程序字节的标记
  • .nam包含与ida的Names窗口中显示的给定程序位置有关索引信息
  • .til存储与给定数据库的本地类型定义有关的信息
    被存档的时候会一起压缩成一个idb文件。而ida一旦为某个文件创建数据库,就不在需要访问这个文件,只要看他的数据库就可以了。


第一个 不打包 不创建idb文件
第二个 打包成一个idb
第三个 和第二个一样区别在于将数据库组件文件压缩到idb归档文件中
第四个 收集垃圾
第五个 不保存数据库(当你调试了 但不想更改数据库的时候)

认识界面

  • ①工具栏区域打开view toolbars advanced mode有高级模式工具栏 三排工具按钮
  • ②导航带 黄色为指向与当前反汇编窗口现实的地址范围的导航带地址
  • ③为每一个数据显示窗口提供标签
  • ④反汇编视图显示主要数据 有图形模式和列表模式
  • ⑤图形窗口时很少能全部显示完 所以有个图形概况视窗
  • ⑥输出窗口 显示ida输出的信息
  • ⑦函数窗口

接下来是详细讲

反汇编窗口

有图形视图和列表视图

ida图形视图


分成很多基本块,一般来讲绿色箭头为yes,红色为no。
可以通过分组和折叠块来减少现实的混乱程度,要折叠的话右击块的标题栏,选择groupnodes

ida文本视图

可以通过options general打开ida常规选型 然后再disassembly选项卡启用行前缀打开地址变成如下


这里的①是箭头窗口,虚线是条件跳转,实线是非条件跳转,如果有一个跳转将程序的控制权交给地址某个之前的位置,会使用粗线,通常表示一个循环

②是ida对于函数栈帧布局的最准确估算(栈帧也称激活记录,是在程序的运行时栈中分配的一个内存块,其中包含传递给一个函数的参数和该函数声明的局部变量,栈帧在函数的入口位置分配,退出时释放)
③的注释为属于交叉引用,表示另一个程序指令将控制权转交给交叉引用注释所在指令的位置的指令。

Names窗口

例举一个二进制文件的所有全局名称(对一个程序虚拟地址的符号描述)

  • F常规函数
  • L库函数
  • I导入的名称
  • G命名代码
  • D数据
  • A字符串数据
    另一些
  • sub___xxxx 地址xxxx处的子例程
  • loc___xxxx 地址xxxx处的一个指令
  • byte___xxxx 地址xxxx处的8位数据
  • word 16位数据
  • dword 32位数据
  • unk 大小位置的数据

strings窗口

5.2后在view open subviews strings当中打开该窗口
每次打开数据库都会重新扫描整个数据库,查找字符串。在setup strings窗口当中可以设置ida扫描的字符串类型

次要的显示窗口

十六进制窗口

当选中某一条指令的时候会显示它的十六进制地址。

导出窗口

列出文件的入口点,包括程序的执行入口点。

导入窗口

与导出功能窗口恰恰相反,列出被分析的二进制文件导入的所有函数,只有在二进制文件使用共享库的时候才会需要导入窗口、

函数窗口


这一条信息指出 在二进制文件虚拟地址为00BDC260的.TEXT部分找到malloc函数 函数长384字节 返回调用方R并使用EBP寄存器B,引用它的局部变量。

结构体窗口


显示一些使用任何复杂的数据结构的布局

枚举窗口

类似结构体窗口

其他窗口

段窗口


可以发现这个二进制文件有点奇怪,使用非标准段名称,包含两个可写入的代码段。双击任何调模具,ida会跳转到他在的位置。命令行工具如下

签名窗口

ida利用一个巨大的签名库来识别已知的代码块。
经过ida的识别,这个二进制文件应用了vc32rtf签名,并在这个过程中有501个函数,所以就不需要对这501个函数进行识别。
所以我们在进行ida识别的时候可以把更多的精力放在不能识别的代码上。

类型库文件

也与签名窗口类似。

函数调用窗口,就可以看到调用方和被调用方的关系,形成函数调用树,显示近邻关系


可以看到40182c在main中从6个位置不同位置调用,而这个函数有调用了另外十五个函数。双击任何函数的任何一行,ida可以跳转到对应的位置。

问题窗口


显示ida在反汇编二进制文件的时候遇到的困难。