0%

IDA pro使用笔记

学习资料:IDA Pro 权威指南[美]Chris Eagle

1.什么情况下需要使用反汇编?

1)分析恶意软件
2)分析闭源软件的漏洞
3)分析闭源软件的互操作性
4)分析编译器生成的代码,以验证编译器的性能和准确性
5)在调试时显示程序指令

2.

动态分析:是指在严格控制的环境中执行恶意软件,并使用系统检测实用工具记录其所有行为。
静态分析:试图通过代码来理解程序的行为。(查看对恶意软件进行反汇编之后得到的代码清单)。

3.基本的反汇编算法:

1)确定进行反汇编的代码区域;
2)知道指令的起始地址,读取该地址(或文件偏移量)所包含的值,并执行一次表查找,将二进制操作码的值余它的汇编语言助记符对应起来;
3)获取指令并解码任何所需的操作数后,需要对它的汇编语言等价形式格式话,并将其在反汇编代码中输出。
4)输出一条指令后,继续反汇编下一条指令,并重复上述过程,直到反汇编完文件中的所有指令。

4.

汇编语言源代码主要采用两种语法:AT&T语法和Intel语法。
两种最主要的反汇编算法:线性扫描和递归下降。

5.线性扫描反汇编的优缺点:

优点:能够完全覆盖程序的所有代码段。
缺点:没有考虑到代码中可能混有数据。
GNU调试器(gdb),微软公司的WinDug调试器和objdump实用工具均采用线性扫描算法。

6.IDA pro:递归下降反汇编。
7.

在使用IDA时,如果不知道是哪一种类型的文件,可以使用Go而不是New打开,以便跳过新文件导向。
用IDA加载文件,IDA会创建一个数据库,其组件分别保存在4个文件中,.id0,.id1,.nam,.til,分别对应是一个二叉树形式的数据库,描述每个程序字节的标记,与IDA的Named窗口中显示的给定程序位置有关的索引信息,用于存储与一个给定数据库的本地类型定义有关的信息。

8.关闭IDA数据库:

1)不打包数据库:不创建IDB文件,不建议;
2)打包数据库(存储):将4个数据库组件文件存到一个IDB文件中,创建后,4个数据库组件文件即被删除;
3)打包数据库(压缩):基本同上,唯一的差别在于数据库组件文件被压缩到IDB归档文件中。
4)收集垃圾:通常只在磁盘空间不足时使用;
5)不保存数据库:放弃当前对数据库所做的更改的唯一办法,类似撤销和还原功能。

9.IDA崩溃怎么办?

可以选择还原上次保存的版本,或依旧使用已打开的可能遭到破坏的版本,选择“继续使用未打包的库“并不能保证可以恢复所做的全部修改。

10.IDA桌面简介:

1)彩色的水平带是IDA的概况导航栏(导航带),是被加载文件地址空间的线性视图。
2)对函数视图中的函数进行选中,即会跳转到反汇编视图中,可使用空格键在列表视图样式和图形试图样式(流程图)中切换。
3)使用View->Open Subviews命令恢复无意中关闭的数据显示窗口;
使用Windows->Reset Desktop 命令可以迅速将桌面恢复到原始布局;
使用Windows->Save Desktop 命保存你认为特别有用的当前桌面布局,使用Windows->Load Desktop命令迅速打开你之前保存的一个桌面布局;

11.IDA不提供撤销功能!!!
12.ESC键用于关闭窗口。
13.反汇编窗口:

反汇编窗口又叫IDA-View窗口,是操作和分析二进制文件的主要工具。
1)IDA图形视图:
将一个函数分解成许多基本块,显示该函数由一个块到另一个快的控制流程。
每个基本块都有唯一的入口点和退出点。
Yes绿色(执行分支),No红色(不执行分支)可用CTRL和加减号以及鼠标的滑轮来调整图形的大小,必要时使用概览。

14.Names窗口(名称窗口):

简要列举了一个二进制文件的所有全局名称,名称是指对一个程序虚拟地址的符号描述,可通过双击该窗口中的名称来立即跳转到显示该名称的反汇编视图。

15.十六进制窗口:

显示程序内容和列表的标准十六进制代码,每行显示16个字节,以及对应的ASCII字符。在反汇编窗口中,光标指向地址004013FA(一个调用指令),那么,在十六进制窗口中,构成这个指令的全部5个字节均突出显示。

16.导入窗口:

使用共享库时,IDA才需要用到导入窗口,静态链接的二进制文件不存在外部依赖关系,因此不需要导入其他内容。

17.结构体窗口:

用于显示IDA决定在一个二进制文件中使用的任何复杂的数据结构的布局。可以为标准数据结构的布局提供现成的参考,帮助自己创建自己的可用作内存布局模块的数据结构。

18.枚举窗口:

列出标准枚举数据类型,可以使用枚举来代替整数常量,提高反汇编代码的可读性。

19.

IDA中的段和二进制中的段不是一个意思。

20.

按下快捷键G可以打开“跳转到地址“的窗口。

21.

IDA注释以分号为前缀,表示这一行分号以后的部分属于前缀。

22.

IDA的脚本语言叫IDC。

注:
对于mips架构下的逆向工程,ida不能进行反汇编
如果仍想使用ida解决,可以下载插件Retdec,对v.0.7版本的ida可能不识别。