免费发布信息
当前位置:APP交易 > 热点资讯 > 资产交易 >  网络安全编程:逆向反汇编分析工具之IDA Pro

网络安全编程:逆向反汇编分析工具之IDA Pro

发表时间:2021-07-09 16:29:32  来源:红帽社区  浏览:次   【】【】【
红帽社区是一个垂直网络安全社区,融合“红帽先锋”正能量精神,每日分享最新安全资讯,提供安全问答、靶场、众测、漏洞库等功能,是网络安全爱好者学习、交流的优质社区。

在逆向领域中,除了大名鼎鼎的OD以外,还有另一款相当出名的逆向工具,该工具是一款反汇编工具,即IDA。IDA是一款支持多种格式及处理器的反汇编工具。反汇编工具并不少见,只是像IDA如此强大的反汇编工具却非常少。IDA的强大在于它的交互式功能,这一点其实从它的名字中就可以看出。IDA的全称为Interactive Disassembler(交互式的反汇编工具)。IDA强大的交互功能可以让逆向分析人员提高逆向分析的效率。IDA同样可以像OD一样,支持脚本、插件来扩展其分析功能。在病毒分析、软件功能分析等方面IDA都表现出了它的强大,当然具体功能只有用过之后才知道。

这里略过安装IDA的步骤,它的安装与其他软件的安装无二。安装完IDA以后,安装菜单中共有两个可以供用户选择使用的软件,分别是“IDA Pro Advanced (32-bit)”和“IDA Pro Advanced (64-bit)”。前者是针对32位平台的,后者是针对64位平台的。这里以32位平台为主来介绍IDA的使用。

1. IDA主界面介绍

在具体了解IDA之前,先对IDA的主界面进行介绍,如图1所示。


图1 IDA主界面视图

在IDA中,其各界面大体可以分为4部分(其实相当多且复杂),分别是工具栏、导航栏、逆向工作区和消息状态栏。下面对各部分进行简单介绍。

(1)工具栏

IDA的工具栏几乎包含菜单中的所有功能。在使用和操作IDA时,掌握工具栏操作要比在菜单中寻找对应的菜单项速度会提高很多。工具栏如图2所示。


图2 IDA工具栏视图

工具栏中的每项功能并不是每次都会用到。由于工具栏内容过多,占用了整个IDA界面的很大一部分,有时会影响到IDA逆向工作区。为了关闭工具栏中不常用的功能,可以在工具栏上单击右键,从而关闭工具栏中暂时不需要的工具。如果整个工具栏都暂时不需要,则直接可以关闭工具栏。当再次需要使用时,可以通过勾选菜单的“View->ToolBars->Main”选项重新打开工具栏。无论是做开发,还是做逆向分析而言,有一个大的显示器还是很享受的。

(2)导航栏

导航栏通过不同的颜色区分不同的内存属性,可以清晰地看出代码、数据等的内存布局。

其实导航栏也属于工具栏的一部分,只是它能够让用户对程序在宏观分布上有一个总体了解。

(3)逆向工作区

逆向工作区一般有7个子窗口,分别是“Function name”“IDA View-A”“Hex View-A”“Structures”“Enums”“Imports”和“Exports”。这几个窗口分别表示“函数名称”“反汇编视图A”“16进制视图A”“结构体”“联合体”“导入数据”和“导出数据”。在逆向分析时,这些窗口都是相当主要的窗口。

(4)消息状态栏

消息状态栏其实是两个窗口,而不是一个窗口。但是消息窗口和状态栏都是提供消息输出或显示提示功能,因此两个窗口合在一起介绍。消息窗口主要是对插件、脚本、各种操作的执行情况的提示。状态栏只能进行简单的状态提示等。

2. 文件的打开

IDA的功能和设置较多,但是并不是所有的功能一开始都会被使用,大部分的设置都保持默认即可。在介绍和学习各种软件的操作时,可能很少会介绍如何打开一个文件。但是IDA在打开文件的同时会对文件进行分析,在打开文件时有两种方案,分别是“向导模式”和“一般模式”。

通过菜单“File->New”可以打开“向导模式”,首先出现的是“New disassembly database”界面,如图3所示。


图3 New disassembly database界面

从图3中可以看出,IDA支持Windows、DOS、UNIX、Mac等多种系统平台的文件格式。这里主要用到的是Windows系统平台下的选项。在Windows下,常用的是前4个选项,分别是“PE Executable”(EXE文件)、“PE Dynamic Library”(DLL文件)、“.ocx PE ActiveX Control”(OCX文件)和“PE/LE/NE Device Driver”(SYS或VXD文件)。

这里选择“PE Executable”,在打开的对话框中随便选中一个EXE文件,然后打开,出现如图4所示的装载向导窗口。选中“Analysis options”复选框,这是告诉IDA要手动设置“分析选项”。如果不需要手动设置,那么可以不勾选该复选框。单击“下一步”按钮,继续设置装载向导界面,如图5所示。


图4 PE Executable file loading Wizard界面(一)


图5 PE Executable file loading Wizard界面(二)

在图5界面中,IDA默认只勾选了“Create imports segment”复选框;而在某些情况下,用户需要对资源也进行分析,因此这里勾选“Create resoureces segment”复选框。单击“下一步”按钮后,继续显示一个设置向导界面,如图6所示。


图6 PE Executable file loading Wizard界面(三)

图6显示的选项特别多。从界面的顶部可以看出,该部分属于“Kernel Options”(核心选项)。在众多选项中,只有靠下的一个选项“Coagulate data segments in the final pass”没有选中,其功能是允许IDA尝试将数据段中未分析的自己转换为数组,这里建议不要选中它。单击“下一步”按钮,出现如图7所示的界面。


图7 PE Executable file loading Wizard界面(四)

图7显示的界面是用来设置处理器的选项,即界面顶部的“PC Processer Options”。该部分也默认即可。单击“下一步”按钮,则出现装载向导的最后一步,如图8所示。


图8 PE Executable file loading Wizard界面(五)

在图8中,IDA默认勾选了“Start analysis now”复选框。单击“完成”按钮后,即刻开始进行分析,然后依据分析文件的大小开始等待IDA文件进行文件的分析。如果不勾选“Start analysis now”复选框,IDA则不会马上进行分析,则打开文件的速度会稍快些。当需要进行分析时,可以通过IDA的菜单依次选择“Options→Generel”,出现图9所示的设置界面。选中“Enabled”复选框,然后单击“Reanalyze program”按钮,最后单击“OK”按钮即可让IDA对程序进行分析。到此,IDA通过“向导模式”打开文件的所有步骤就完成了。


图9 IDA Options界面

如果在图4中不选择“Analysis options”的话,将不会出现图6和图7所示的两个设置界面。在上面的操作步骤中,并没有改变图6和图7所示的界面中的选项,那么完全可以在图4中不选择“Analysis options”选项。这里选中它的目的是为了展示IDA在装载文件时功能选项的强大。

上面介绍了用IDA的“向导模式”打开一个待分析的程序,接下来介绍使用IDA通过“一般模式”打开文件的方式。

在IDA的菜单栏上依次单击“File→Open”,弹出常见的打开文件的通用对话框,供用户选择准备进行反汇编分析的程序。当用户选中一个要反汇编分析的程序后,会出现如图10所示的“Load a new file”窗口。


图10 IDA加载新文件的窗口

一般打开方式中,把很多设置集成到一个界面中。在图10中的“Options”选项组中,IDA默认选中了“Rename DLL entries”和“Make imports segment”,这两项是需要选中的。在分析Win32程序时,需要选中“Create FLAT group”;如果程序存在资源,那么也要选中“Load resources”。

“Options”选项组中的“Manual load”可以手动指定装载可执行文件的哪些节(Windows系统下的可执行文件是PE格式的文件,它将程序不同属性的数据分开存放,比如代码具有可执行的属性,数据具有可读写的属性等)。

图10中的其他选项可以保持默认,然后单击“OK”按钮,IDA则开始对程序进行装载和分析。

3. 反汇编窗口

在进行逆向分析时,主要使用的窗口还是反汇编窗口。要了解程序的内部工作原理及流程结构,还是需要通过阅读和分析反汇编窗口中的反汇编代码。反汇编窗口如图11所示。


图11 IDA反汇编窗口

图11中的最上面有一排选项卡,反汇编窗口是“IDA View-A”一项。该选项卡的意思是“交互式反汇编视图A”,其中“A”代表一个序号,意味着还可能存在“B”“C”和“D”等多个反汇编视图。通过在菜单栏中依次单击“View→Open subviews→Disassembly”,可以打开多个“反汇编视图”。这样的好处是,当显示器一屏放不下所有反汇编代码或查看的反汇编代码不连续时,可以通过多个反汇编视图的切换来阅读反汇编代码。

有时候反汇编代码比较长,而用户只需要找到其中某个分支,如果以这样的代码方式去查找,显然效率不高,因为在反汇编代码中可能存在大量的跳转,而用户只需要针对某一跳转顺序往下查找自己的分支即可。IDA提供了一个非常强大的功能,即将反汇编视图中的反汇编代码转换为流程图的形式。在“反汇编视图”中按下空格键,即可将反汇编代码转换为“流程图”,如图12所示。


图12 IDA反汇编代码转换为流程图形式

图12的左边是具体的流程图,流程图的每个框中有当前流程相应的反汇编代码块,而右边有一个小的流程图的宏观图,通过该宏观图可以方便地移动反汇编流程图。

IDA在分析程序的过程中,会将反汇编代码中相互调用的情况进行表示,它可以辅助用户了解程序的引用关系。图11所示的反汇编窗口分为五部分,最左侧的是“程序控制流”线条,用来指示反汇编代码中的跳转情况;“程序控制流”线条的右侧是反汇编代码的地址;地址右侧则是“标号”或“反汇编代码”;最右边是反汇编的注释。

在注释列中,可能是分析人员自己添加的注释,也可能是IDA增加的注释。自行增加注释的方法是将光标放在对应的反汇编代码行上,然后按下“;”(分号)键,会出现图13所示的添加注释的界面。


图13 添加注释的窗口

在IDA增加的注释当中,最多的是函数的调用和交叉引用(注释中以CODE XREF:开头的都是交叉引用)。交叉引用就是辅助用户了解程序转向流程的提示,如图14所示。


图14 交叉引用

选中一个标号后,所有不同位置的相同标号(标号只有一处,引用标号的代码可能会有多处)都会变成黄色的高亮色。这样方便用户观察有多少个位置引用了该标号。除此之外,双击“交叉引用”注释会跳转到相应的引用位置。图14中,“CODE XREF : start + 34↑j”表示这个引用是从start函数的第34字节处跳转而来,其中“j”表示跳转,如果是“p”,表示是子程序调用,如“CODE XREF : start + 16F↓p”,类似的还有“o”“r”等。

图14中选中的交叉引用部分可以看到“…”(省略号),表明这里有多个交叉引用。按下Ctrl + X组合键即可查看所有的交叉引用,如图15所示。


图15 交叉引用窗口

在进行动态调试时,可能同时会通过IDA阅读反汇编代码。这时可能需要在IDA 的反汇编窗口中不断跳转到某个指定的地址处去阅读反汇编代码。IDA提供了功能丰富的跳转菜单,如图16所示。可能最常用到的是“跳转到指定地址”。在反汇编窗口中按下G键,就会出现“跳转到指定地址”窗口,这类似于OD的Ctrl + G快捷键。


图16 IDA中提供的跳转菜单

在阅读反汇编代码时,会分段进行阅读或分函数进行阅读。当了解某个函数的功能后,可以给函数名进行重命名,这样方便在以后“Function name”窗口中找到已经分析完的函数。而且对于函数的重命名是全局性的,只要将函数名重命名后,在反汇编中,所有对该函数的调用都会变为重命名后的函数名。重命名函数名的快捷键是“N”(反汇编中的变量亦可如此)。

4. 字符串窗口

为什么要介绍字符串呢?通常情况下,一个功能很小的软件都会反汇编出非常多的反汇编代码,而如果要逐行阅读反汇编代码的话,简直是一项不可能的事情。那么要快速定位到程序的功能,就必须查找一些相关特征的内容来帮助程序员在大量的反汇编代码中定位真正需要的反汇编代码。字符串则可以帮助程序员完成这一点。在IDA中查找某个具体功能的反汇编代码时,可以考虑通过查找字符串来定位反汇编代码。

IDA提供了字符串参考的窗口,但是默认并没有打开它。单击菜单的“View->Open subviews->Strings”,打开字符串参考窗口,如图17所示。


图17 字符串参考窗口

5. 导入表窗口

导入表窗口中显示的是程序中调用的API函数,想要快速定位相关功能的反汇编代码,除了字符串参考以外,就要依靠API函数了。导入表窗口如图18所示。


图18 导入表参考窗口

在导入表窗口中,双击某个API函数即可进入导入表在反汇编窗口中的位置,如图19所示。


图19 导入表在反汇编窗口中的位置

在进入反汇编窗口中后,通过API函数对应的交叉引用可以快速定位到调用该API函数的反汇编代码处。使用API进行定位相对比通过字符串定位多了一个要求,那就是在通过API函数进行定位时需要了解API函数的作用。由此可见,在进行逆向分析时,对软件开发知识的掌握也是有一定要求的。

6. 保存工程文件

用IDA进行逆向反汇编分析后,在关闭IDA时会提示是否保存分析文件,选择“Pack database(Store)”即可将IDA的反汇编工程文件进行保存。保存该文件会将程序员在分析时记录的注释、修改的变量或函数名都能完整保存。IDA保存的工程文件扩展名为.idb。下载并用IDA进行分析时,可以接着上次的分析继续进行。当对某个程序分析完成后,进行交流时,只共享.idb文件也非常方便。

7. 强大的F5功能

IDA下有多种多样的插件,有关于格式识别的,有补丁分析的等。其中有一款插件特别有特色,它叫作Hex-Rays Decompiler。该插件可以将反汇编代码直接反编译为高级语言。使用它非常简单,只要在相应的反汇编代码上按下F5键,即可出现相应的高级语言。

在IDA中随便找一处反汇编代码,然后按下F5键,可以看到图20所示的高级语言代码。出现的反汇编代码类似C/C++语言的代码,对于功能相对独立的反汇编代码函数段,可以通过IDA的F5功能将其转换成高级语言后,进行简单的修改,再来使用。


图20 F5功能生成的高级语言

关于IDA的知识就介绍到这里,更多的IDA知识请大家参考相关资料进行更深入的学习和研究。

参考文献:C++ 黑客编程揭秘与防范(第3版)

本文转载自:计算机与网络安全

责任编辑:
声明:本平台发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。

德品

1377 678 6470