通过一个简单的题来了解一下IDA的基本操作,题目是bugku的一个简单的逆向,Easy_re。
将题目下载下来,发现是一个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打开这个程序的时候可以加载这个数据库,里面保存了你上次的操作。
下面给出了一些常用的快捷键
-
快捷键 功能 ; 为当前指令添加全文交叉引用的注释 g 跳转到地址 Esc 返回到跳转前的位置 D 分别按字节、字(双字节)、双字的形式显示数据 A 按照ASCII形式显示数据 ALT+T 启动文本搜索 ALT+B 启动二进制搜索 N 重命名 X 查看交叉引用 R 把立即值转换为字符 H 把立即值转换为10进制 Q 把立即值转换为16进制 B 把立即值转换为2进制 F5 查看伪代码 TAB 在汇编代码与伪代码之间切换 Shift+E 提取数据 Y 给function加参数