这是我的《逆向分析学习小纪》第一篇,这个系列主要介绍我的逆向分析学习过程,本篇涉及我对逆向分析的理解,IDA工具的简介与安装,IDA的基本使用等内容。对我而言,这既是一种学习笔记的记录方式,也是和大家一起学习、一起交流的一个平台~
简单点儿来说,逆向分析其实就是将机器认识的二进制码字进行反汇编,得到人(也许)可以看懂的汇编代码,在汇编代码基础上实现程序具体功能和逻辑的分析。
源代码编译之后,会丢失其原有的数据结构、符号等信息,导致反汇编生成的汇编代码中只存在较为原始的逻辑,定义好的变量和高级算法在此刻都荡然无存,逆向分析时需要尽可能澄清、还原以上信息中关键的部分,从而分析透程序原有的实现思路,对于集成度较高、功能较复杂、较完整的程序,澄清和还原是有一定难度和工作量的。
基本可以分为静态、动态两种分析方法:
主要逆向分析的目标是Windows、Linux平台下的x86、x64二进制可执行程序。
IDA Pro
学习前期通过调研的方式了解到了很多反汇编工具,其中前辈们最为推荐的就是IDA Pro(Interactive Disassembler Professional),是Hex-Rays公司出品的一款交互式反汇编工具,是目前最流行的静态反编译软件,我试用以后也深感其功能强大和使用便捷,其自带的插件可以算的上是最好的反编译工具之一。
目前,IDA支持的文件类型特别丰富,包括PE、ELF、DOS、Mach-O、.NET等格式,还支持几十种不同的处理器架构。
我使用的IDA版本为7.2.181105,内容无广,放在个人网盘,有需要可自取:
链接:https://pan.baidu.com/s/1S6KNf9xK9E82cIgcQFeOFQ?pwd=c6xa
提取码:c6xa
该版本为破解版,需要安装,下面简要介绍一下步骤:
第一步:压缩包解压后,点击.exe文件,点击Next。
第二步:选择accept,点击Next。
第三步:建议安装Python,点击Next。
第四步:输入Password,在解压后的install_key中(7JpT48a7Y2fv),点击Next。
第五步:选择安装路径,点击Next。
第六步:连续点击Next。
第七步:将Launch IDA取消,点击Finish。
第八步:将解压后的下述文件Copy至IDA安装路径xxx/IDA 7.2下,到此IDA工具就已经安装完毕啦,开始享受!!
根据系统环境选择对应的版本启动IDA,我这里使用的是IDA Pro(64-bit)。“New”选项是直接打开要分析的程序,“Go”选项是先启动IDA界面,二者皆可~
若选择Go选项,启动页面后,通过菜单栏中的File→Open,选择需要分析的目标程序。(ps:注意右下角应选择All Files)
得到下图所示窗口,IDA可以自动识别出程序为x86_64的ELF程序,直接点击OK即可。
IDA主窗口如下图所示,主要包括几个区域:
包括IDA常用工具,可以使用菜单栏的View→Toolbar来显示或者隐藏工具栏。
是加载文件的地址空间的线性视图,默认情况下会呈现二进制文件的整个地址范围。不同颜色意味着不同类型的文件,比如代码或者数据。同时还存在一个当前位置指示符(默认黄色),指向当前反汇编窗口中显示的地址范围对应的导航区域地址。
通常我们分析程序时主要分析自身部分,而不是库函数,可以根据导航区域轻松划定大致范围。
函数窗口上显示了所有的函数。如果程序带符号,那么IDA会自动解析符号信息,将函数真实名称显示出来(有的时候函数名大概能反映某项功能,有利于分析人员猜测和定位)。并且IDA使用了FLIRT签名库识别函数,因此就算没有符号信息,也能识别部分库函数,对于无法识别的函数,会以“sub_”+“起始地址”命名。
数据显示窗口上方有IDA定义的标签,通过菜单中的View→Open subviews可以打开对应的数据显示窗口,主要的窗口包括:反汇编窗口、反编译窗口、导入表窗口、导出表窗口、结构体窗口等等。
显示IDA输出的信息,用户可以通过输出信息找到文件分析有关的状态信息和操作导致的错误信息,这个窗口类似于Pycharm等软件的Console控制台。
通常来说,push ebp/rbp指令开头的地址是函数的起始地址,但有时候IDA未能正确识别其为函数,这时候我们可以手动将其创建为函数,具体操作为:
在起始地址汇编代码处,使用快捷键“p”即可(右键选择Create Function亦可0)。
若某些指令识别错误,可以选中后利用快捷键“d”手动修正。
同样的,在数据段中,一个数据的长度可能为1/2/4/8字节,此时亦可通过快捷键“d”来修改为对应类型。如果数据中某部分为字符串,但没有正确识别,可以点击通过快捷键“a”将其转换为ASCII字符串。
在IDA使用过程中,可通过修改程序中的变量或者函数名等信息,帮助使用者理解和分析程序,在需要重命名处点击右键,选择“Rename”即可重命名。
此外可以添加注释,快捷键“;”可以在反汇编窗口中添加注释,快捷键“/”可在反编译窗口中添加注释,另外IDA对于不常用处理器架构编写的程序,可开启自动注释功能,开启时选中下图中的“Auto comments”即可。
IDA的交叉引用有两类:代码交叉引用和数据交叉引用。
我把学习以来常用的快捷键列在了下面,大家可以参考~
作为一个刚接触逆向分析不久的小白,后续我将继续学习,做一些静态分析、动态分析的案例,也会持续分享,争取早日入门!
与诸君共勉~