1.实验内容
1.1学习内容
1.恶意代码分析方法(静态分析、动态分析等)
2.PEiD、IDA Pro、ProcessExplorer等分析工具的使用方法
1.2实验任务
- 恶意代码文件类型标识、脱壳与字符串提取
- 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
- 分析一个自制恶意代码样本rada,并撰写报告,回答问题
- 取证分析实践
2.实验过程
2.1恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者
2.1.1文件类型识别
使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
1.首先从学习通下载代码样本

2.在Linux虚拟机中可以使用file识别文件格式,结果如下

- PE32 executable
PE:Windows操作系统上标准的可执行文件
32:32位程序
executable:可执行的- for MS Windows
为微软Windows操作系统设计- (GUI)
带有图形用户界面的应用程序- Intel i386
CPU 架构,代表与x86 32位架构兼容,这个程序是为Intel/AMD的32位CPU家族编译的- 3 sections
表明文件内部有3个“节”(“节”即PE文件中用于存储不同类型数据的基本单元,如.text ,.data等)
3.使用PEiD工具识别文件,结果如下

- 使用了UPX加壳工具
- 入口点:整个程序执行的起点地址。当操作系统加载完一个PE文件后,会将CPU的控制权交给“入口点”处的指令,从这里开始运行程序。
- EP段:入口点所在的区段,即前面那个“入口点”地址位于文件的哪个区段。此处的JDR1是一个自定义的、非标准的区段名称,强烈表明这个文件已经被加壳、混淆或加密了。
- 文件偏移:入口点代码在磁盘文件中的具体位置(物理地址而非虚拟地址)
- 首字节:入口点处最开始的几个(通常是20个)机器码字节,不同的编译器或加壳工具,其入口点的起始指令序列有独特的模式(称为“签名”或“特征码”)。
- 连接器:生成此PE文件所使用的编译器/链接器的版本。
- 子系统:文件为图形界面程序还是控制台程序。此处GUI表示图形界面,Win32表示Windows 32位系统。
2.1.2使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理;
1.使用脱壳软件对加壳保护的文件进行脱壳处理

2.得到脱壳后的文件

2.1.3使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
1.将脱壳后的文件复制到kali中,执行strings RaDa_unpacked.exe 提取字符串,结果如下

2.下拉寻找可能是编写作者的字段

或许是这个?
2.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
2.2.1分析crackme1.exe
1.在Windows命令行中输入不同个数参数测试crackme1.exe

可以看到不同参数输出结果不同
2.在IDA中打开程序进行分析
因为程序会对输入做出输出回应,因此在字符串界面寻找可疑字符串

双击可进入引用字符串代码位置

由于在刚开始尝试时只出现了上图中第一、三的字符串,因此猜测正确输入可能和第二、四个字符串有关,根据旁边的XREF信息可知,这几个字符串都在程序段sub_401280中被调用,同时打开View > Graphs > Function calls查看函数调用结构图

可以看到sub_401280后关联的函数中有strcmp(字符串比对)、printf(打印输出)等可能和正确输入有关的内容,可知sub_401280应该为关键函数
因此在functions界面找到该程序段sub_401280并双击进入查看具体汇编信息

进入后下滑找到刚刚的关键字符串部分,通过红框的信息大致可以猜测出如果想要输出“You know how to...”信息需要将输入信息与“I know the secret”进行strcmp比对,也就是说我们应该输入“I know the secret”作为正确答案
查了一下jz代表Jump if Zero 即条件跳转,只有当strcmp返回0(字符串相等)时才跳转到成功分支

3.试了一下的确如此,不过要注意加上双引号

2.2.2分析crackme2.exe
1.同样先在命令行中测试参数个数和输出

2.打开IDA,和前面的分析思路差不多,需要找到关键函数



在这里稍有不同,出现了多层验证
经过查询得知,[ebp+arg_4]代表获取argv(命令行参数数组),参数数组第一个值应为程序名称,即此处在进行程序名称的比对

第二层验证时首先也是获取参数数组argv,但不同的是eax获取后+4,即eax中现为第一个命令行的参数,和“I know the secret”比对

3.由上面的分析可知,应先将程序改名为crackmeplease.exe 再输入参数“I know the secret”即可,验证如下

2.3分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
1.提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
md5sum RaDa.exe选择md5算法获取摘要值

sha1算法摘要值如下,file显示出文件基本信息

2.找出并解释这个二进制文件的目的
(3)识别并说明这个二进制文件所具有的不同特性;
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
(6)给出过去已有的具有相似功能的其他工具;
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
四、取证分析实践
Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
(2)僵尸网络是什么?僵尸网络通常用于什么?
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
(5)哪些IP地址被用于攻击蜜罐主机?
(6)攻击者尝试攻击了那些安全漏洞?
(7)那些攻击成功了?是如何成功的?
3.问题及解决方案
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX - ...
4.学习感悟、思考等
xxx xxx
参考资料
- 《Java程序设计与数据结构教程(第二版)》