通过一个例子来介绍IDA的简单使用

通过一个简单的题来了解一下IDA的基本操作,题目是bugku的一个简单的逆向,Easy_re。

将题目下载下来,发现是一个exe可执行文件,先运行一下看看

通过一个例子来介绍IDA的简单使用_第1张图片

有一些字符串提示,让你输入一个字符串,提示输入flag,随便输入几个字符,看一下有什么提示。

然后开始进入分析阶段,首先通过Detect It Easy这个软件查看一下程序的基本信息。

通过一个例子来介绍IDA的简单使用_第2张图片

这一步我们主要想看一下程序时32位还是64位的,通过上图可以看到程序属于32位程序。然后我们通过IDA对程序进行分析,IDA是一个静态反编译软件,用来静态的分析软件,我们在32位的IDA中打开re1.exe(如果程序时64位的需要用64位的IDA打开),他会弹出弹窗,这里不用管,一路点“是(或者ok)”就行了,然后界面如下。

在这里插入图片描述
一进来,最大的那片区域为反汇编窗口,左边为函数窗口,在反汇编窗口按空格键,会在图形视图和列表视图之间切换。然后分析程序一般先从字符串入手,打开字符串窗口,View --> open subviews --> Strings,或者快捷键shift+F12

通过一个例子来介绍IDA的简单使用_第3张图片

程序中往往包含很多字符串资源,这些资源存在于PE文件的rdata段,可以看到运行程序时出现过的“DUTCTF”字符串,双击它找到他的位置

通过一个例子来介绍IDA的简单使用_第4张图片

通过一个例子来介绍IDA的简单使用_第5张图片
通过一个例子来介绍IDA的简单使用_第6张图片
可以看到aDutctf字符串周围还有很多字符串,我们把它们都变成可显示字符,结果如下,由于本题比较简单,所以直接出现了flag。
通过一个例子来介绍IDA的简单使用_第7张图片

当然,本文是为了介绍IDA的使用,所以我们继续往下分析,找到关键的字符串后,在字符串的位置,按快捷键x,查看程序在哪里引用了它,比如这道题没有给出flag,我们需要在提示信息处(也就是aDutctf的位置)按快捷键x,可以看到只有一处引用了它。

通过一个例子来介绍IDA的简单使用_第8张图片

我们跟进去看一下,找到了引用它的位置,这一步是为了找到程序的主要逻辑在哪,因为有时候IDA可能分析不出函数名来,你就没办法通过左边的函数窗口定位程序的主要逻辑位置,也有可能程序的主要逻辑不在main函数里,在一个其他的函数里。

所以说,先运行程序,找到程序运行时出现的提示字符,然后定位提示字符出现的位置,用这样的方法来找程序的主要逻辑比较靠谱一些。

通过一个例子来介绍IDA的简单使用_第9张图片

找到了关键位置后,发现是一堆汇编代码,看不懂怎么办?IDA的强大之处还在于他可以将分析的程序以伪代码的形式给出,快捷键为F5(不是所有程序都能以伪代码的形式显示,也不是所有函数都能以伪代码的形式显示,如果没办法显示伪代码,那只能刚汇编了),下一步就是分析程序的逻辑了,至于怎么分析,这里就不多赘述了。

通过一个例子来介绍IDA的简单使用_第10张图片

在关闭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加参数

你可能感兴趣的:(Reverse)