安全矩阵

 找回密码
 立即注册
搜索
查看: 2439|回复: 0

网络安全攻防:软件逆向之IDA Pro

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-3-31 10:18:55 | 显示全部楼层 |阅读模式
原文链接:网络安全攻防:软件逆向之IDA Pro

交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为IDA Pro,或简称为IDA。是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器!IDA Pro是一款交互式的,可编程的,可扩展的,多处理器的,交叉Windows或Linux WinCE MacOS平台主机来分析程序, 被公认为最好的花钱可以买到的逆向工程利器。IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。它支持数十种CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。


1. 安装

下载地址1:
https://www.hex-rays.com/products/ida/

下载地址2:
https://pan.baidu.com/s/1bdBhVTBYMk0lNIOtCxIjPw 提取码:w28g

2. 入门

启动IDA会显示欢迎页面,上面显示许可证信息,之后将显示快速启动对话框。

可以取消 Display at startup,在下一次启动时就不会出现这个对话框而是直接进入主界面。如图1所示。如果需要显示这个对话框,可以单击主界面里面Windows→Rest hidden message,将会显示之前隐藏的所有信息。

图1  快速启动

3个不同选项的简单介绍如下。

New:新建一个项目,在File Open对话框中选择要分析的程序。

Go:在IDA打开一个空白的工作区。

Previous:打开最近用过的文件。

(1)加载程序

可以 File→Open 选择想要分析的程序打开,也可以直接将程序拖入到 IDA 中,会出现如图2所示的界面。一般只要单击“OK”按钮就好了。最上面是装载器的选择。下面的Processor type是处理器的选择。Processor option、Kernel option、Option都是对IDA分析文件的详细设置。

图2  加载分析程序

(2)IDA数据库文件

在程序加载完之后IDA会创建5个文件保存项目的信息,如图3所示。

图3  创建文件保存项目信息

在项目关闭时,这些文件会被压缩成一个IDA Database文件。当存在IDB文件后,下次再要调试程序就不需要再访问程序,只要打开IDB文件就可以了,如图4所示。

图4  生成IDA Database文件

IDA的功能十分强大,主界面也分为好几个部分。下面对载入程序后的主界面进行简单的介绍,如图5所示。

图5  IDA主界面

工具栏:这一区域包含IDA的大量工具。

IDA状态导航栏:呈现了程序加载后在内存空间的线性视图。鼠标单击不同的区域,反汇编窗口会显示对应的反汇编代码。不同的颜色表示不同的文件。

标签:用来关闭打开各种窗口。

函数窗口:IDA将解析出来的所有函数显示在这里,双击函数可以看到对应的反汇编代码。

反汇编视图:主要显示各种数据的窗口,如汇编代码、流程图、导入导出库和函数。可以使用空格键在这些窗口间进行快捷切换。

Graph overview:显示总的流程图,虚线框表示当前主窗口显示的位置。

输出窗口:输出IDA载入程序的各种信息。

(3)操作

下面用一个简单的例子展示IDA的一些基本操作。选择Release生成可执行文件。代码如下所示。当输入“0”时会显示“HelloWorld”,其他数字输出“HelloBug”。

#include "stdafx.h"
#include<stdio.h>
int _tmain(int argc,_TCHAR* argv[])
{
    int a;
    scanf_s("%d",&a);
    if(a==0)
    {
        printf("HelloWorld");
    }
    else
    {
        printf("HelloBug");
    }
}

首先用IDA载入test.exe,如图6所示。

图6  载入test.exe

先看Imports和Exports这两个视图,可以基本确定这个程序导入和导出了什么函数,可以通过函数推测这个程序有什么功能,当然也可以直接执行程序。建议在虚拟机里运行不了解的程序,避免木马病毒等。导入函数中最明显的两个就是“printf”和“scanf_s”,如图7所示。再看导出函数,发现只有一个“start”,推测这个程序并不能导出函数,如图8所示。

图7  导入函数


图8  导出函数

查看 String 窗口。通过 View→Open subview→Strings 打开 String 窗口,当然也可以用Shift+F12快捷键方式。String可以查看程序中用到了哪些字符串,可以对程序进行大致了解,有时可以通过字符串定位到关键代码或关键的跳转。如图9所示,可以知道有两个字符串
“HelloWorld”和“HelloBug”,同时可以发现加载了两个动态链接库“MSVCR100.dll”和“KERNEL32.dll”。


图9  查看String窗口

接下来是 IDA 很强大的一个功能。在反汇编窗口按快捷键 F5,可以逆向分析出源码,当然不可能分析出原来的代码。变量名也是IDA的命名风格,只要稍加修改就得到和源码差不多的代码,如图10所示。可以直接看到整个程序主要是输入一个数字,然后判断数字,最后输出字符串。当变量比较多的时候,最好根据对程序的理解重命名变量名。选中要重新命名的变量rename lvar,然后输入变量名,就会进行全局替换。

图10  逆向分析源码

(4)绘图功能

IDA有丰富的绘图功能。可以根据用户的需求绘制不同类型的图,方便对程序功能流程等的了解。IDA提供了两种绘图功能:捆绑绘图应用程序的绘图功能和已经集成的交互式绘图工具。捆绑绘图应用程序在Windows中使用的是wingraph32。

在view→Graphs中可指定生成5种类型的图形。

外部流程图:快捷键为 F12,生成流程图。类似控制流程图,提供简单的函数信息,如图11所示。

图11  外部流程图

外部调用图:通过外部调用图可以快速的知道函数调用的层次结构。使用View→GraphsÆFunction Calls可以生成一个函数调用图。可以用工具栏的+、-来控制放大缩小,也可以用CTRL和滚轮,如图12所示。

图12  外部调用图

外部交叉引用图:有两种不同类型的交叉引用图,分别是Xrefs To(交叉应用目标)和Xrefs From(交叉引用源)。Xrefs To会给出指定函数被引用的情况。Xrefs From会给出指定函数引用其他函数的情况。如图13和图14所示分别是_atexit的Xrefs To图和start的Xrefs From的图。

图13  Xrefs To


图14  Xrefs From

自定义交叉引用图:用户可以自己定义交叉引用的各个参数,获得个性化的图。可以选择某个符号为目标或源,递归深度等,如图15所示。

图15  自定义交叉引用图

集成绘图:在反汇编窗口按空格键或右键选择Text view和Graphs view进行切换。如图16所示,左边的Graph overview是图形的概览图,虚线框中内容对应反汇编窗口的代码。

图16  集成绘图



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-21 04:40 , Processed in 0.016224 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表