前言
所谓静态分析,是相对于动态分析而言的。在动态分析的过程中,调试器加载程序,并以调试模式运行起来,分析者可以在执行过程中观察程序的执行流程和计算结果。但是,在实际分析中,很多场合不方便运行目标,比如软件的某一模块(无法单独运行)病毒程序、设备环境不兼容导致无法运行。那么,在这个时候,需要直接把程序的二进制代码翻译成汇编语言,方便程序员阅读。像这样由目标软件的二进制代码到汇编代码的翻译过程,我们称之为反汇编。ollyDbg 也具有反汇编功能,但它是调试工具,其反汇编辅助分析功能有限,不适用于静态分析。
本次将介绍辅助功能极为强大的反汇编静态分析工具IDA。它的图标是被称为“世界上第一位程序员”的Ada Lovelace 的头像,可译为阿达。本次使用的IDA版本为7.0英文版。成功安装IDA后,会出现两个可执行程序图标,一个是黑白的阿达头像,另一个是在阿达头部写有“64”字样的图像,它们分别对应32位程序和64位程序的分析,本节分析的程序全部为32位。
IDA快捷键
IDA窗口中的工具条、菜单选项较多,初学IDA时只要掌握基本操作即可。IDA的常用快捷键使用说明如下表所示。
实战演练
接下来我们使用IDA来静态分析调试程序“Hello world”,通过实例进一步学习IDA的基本使用方法
1.加载分析文件
IDA加载分析文件后,会询问分析的方式。有3种分析方式供选择,如下图所示。
(1) Portable executable for 80386(PE)[peldw]:分析文件为PE格式
(2)Ms-DOS executable (exe)[dos.ldw]:分析文件为DOS控制台下的一个文件。
(3)Binary file :分析文件为二进制格式。
根据分析文件的格式进行选择,本示例为一个PE格式文件,故选择第一种分析方式,单击“确定”,分析结束后,IDA默认情况下会显示流程视图窗口。
2.认识各视图功能
视图窗口如下图所示,说明如下。
IDA View -A:分析视图窗口,用于显示分析结果,可选用流程图或代码形式。
Hex View -1:二进制视图窗口,打开文件的二进制信息。
Exports :分析文件中的导出函数信息窗口。
Imports :分析文件中的导入函数信息窗口。
Names Window :名称窗口,分析文档用到的标称。
Functions Window :分析文件中的函数信息窗口。
Structures :添加结构体信息窗口。
Enums :添加枚举信息窗口。
3.查看分析结果
“Hello world ”反汇编分析示例如下图所示,图中为IDA分析后的反汇编代码,将其复制到汇编IDE中,只要稍加修改,就可以进行编译和连接。IDA的数据查询非常简单,只需要双击标号,即可跟踪到该数据的定义处。查看函数实现的方式也是如此,如果需要返回调用处,按Esc键即可返回。由于有IDA的帮助,将一个二进制文件还原成等价的C\C++代码的难度大大降低了。
4.切换反汇编视图与流程视图
上图中的反汇编代码是从IDA的反汇编视图中提取的。IDA的默认视图为流程视图,需要进行转换。在函数体内,选择Text view 。同理,如果要从反汇编视图切换回流程视图,可选择Graph view (流程视图),使分析程序的流程结构和工程量变得更加容易。