主要流程:
1.载入目标程序
2.分析窗口空格切换列表与图模式
3.打开子窗口 - 字符串
4.x查看函数引用
5.a查看字符文本
6.F5查看伪代码
7.其他快捷键
--------------------------------------------------------------------------------------------------------
通过一个简单的题来了解一下IDA的基本操作,题目是bugku的一个简单的逆向,Easy_re(https://ctf.bugku.com/challenges/detail/id/115.html)。
将题目下载下来,发现是一个exe可执行文件,先运行一下看看
有一些字符串提示,让你输入一个字符串,提示输入flag,随便输入几个字符,看一下有什么提示。
然后开始进入分析阶段,首先通过Detect It Easy
这个软件查看一下程序的基本信息。
这一步我们主要想看一下程序时32位还是64位的,通过上图可以看到程序属于32位程序。然后我们通过IDA对程序进行分析,IDA是一个静态反编译软件,用来静态的分析软件,我们在32位的IDA
中打开re1.exe(如果程序时64位的需要用64位的IDA打开),他会弹出弹窗,这里不用管,一路点“是(或者ok)”就行了,然后界面如下。
一进来,最大的那片区域为反汇编窗口,左边为函数窗口,在反汇编窗口按空格键
,会在图形视图和列表视图之间切换。然后分析程序一般先从字符串入手,打开字符串窗口,View --> open subviews --> Strings,或者快捷键shift+F12
。
程序中往往包含很多字符串资源,这些资源存在于PE文件的rdata段,可以看到运行程序时出现过的“DUTCTF”字符串,双击它找到他的位置
可以看到aDutctf字符串周围还有很多字符串,我们把它们都变成可显示字符,结果如下,由于本题比较简单,所以直接出现了flag。
当然,本文是为了介绍IDA的使用,所以我们继续往下分析,找到关键的字符串后,在字符串的位置,按快捷键x
,查看程序在哪里引用了它,比如这道题没有给出flag,我们需要在提示信息处(也就是aDutctf的位置)按快捷键x
,可以看到只有一处引用了它。
我们跟进去看一下,找到了引用它的位置,这一步是为了找到程序的主要逻辑在哪,因为有时候IDA可能分析不出函数名来,你就没办法通过左边的函数窗口定位程序的主要逻辑位置,也有可能程序的主要逻辑不在main函数里,在一个其他的函数里。
所以说,先运行程序,找到程序运行时出现的提示字符,然后定位提示字符出现的位置,用这样的方法来找程序的主要逻辑比较靠谱一些。
找到了关键位置后,发现是一堆汇编代码,看不懂怎么办?IDA的强大之处还在于他可以将分析的程序以伪代码的形式给出,快捷键为F5
(不是所有程序都能以伪代码的形式显示,也不是所有函数都能以伪代码的形式显示,如果没办法显示伪代码,那只能刚汇编了),下一步就是分析程序的逻辑了,至于怎么分析,这里就不多赘述了。
在关闭IDA的时候他会提示你是否保存database,你可以选择保存,下次用IDA打开这个程序的时候可以加载这个数据库,里面保存了你上次的操作。
下面给出了一些常用的快捷键
参考:IDA Pro权威指南 (第2版)