1.实验内容
- 1.1恶意代码文件类型标识、脱壳与字符串提取
- 1.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
- 1.3分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
- 1.4取证分析实践
2.实验目的
掌握恶意代码的分析技术,像逆向分析,文件类型识别,脱壳与字符串提取等等。在实践中会使用恶意代码分析的工具,像pied,逆向工具IDA,脱壳工具,ip分析工具wireshark,tcpflow
3.实验环境
3.1安装kali镜像的虚拟机,配置如下

3.2安装win7镜像的虚拟机,配置如下

4.实验过程及分析
4.1恶意代码文件类型标识、脱壳与字符串提取
4.1.1使用有关工具分析rada恶意代码样本的类型和特征
在kali虚拟机中使用file命令得知恶意软件的文件格式和运行平台。
#查看RaDa.exe的类型特征
file RaDa.exe
RaDa.exe是一个 PE32 可执行文件,运行平台在Intel x86架构的32位Windows系统上,带有图形化界面。

在windows主机中运行PEID.exe获取恶意软件的加壳工具
运行结果表明RaDa.exe被UPX 加压缩壳,且该压缩壳的作者是Markus&Laszlo

4.1.2使用脱壳软件,对rada恶意代码样本进行脱壳处理并使用IDA对脱壳后的文件分析
使用“超级巡警”对恶意软件进行脱壳处理,得到RaDa_unpacked.exe

打开IDA -> Executable,选择刚刚得到的RaDa_unpacked.exe,之后保持默认选项。最终出现IDAViewA,即反汇编结果。
在第00403F7A处注意到RaDa的编写作者为Raul Siles &&David Perez;在第00403FD4处注意到编写日期为2004年9月


4.2使用IDA Pro静态或动态分析要求的两个恶意软件
4.2.1静态分析crackme1.exe
通过IDA打开crackme1.exe后,选择View->Graphs->Function calls查看函数调用图,由于题目要求我们“寻找特定输入,使其能够输出成功信息”,所以我们选择重点关注调用printf和fprintf的sub_401280函数。

打开Windows->Functions window查看函数管理工具,双击sub_401280查看函数具体的调用图


分析该函数调用图,由于arg[1]是该文件的文件名,也是每一次运行必有的参数,所以我们只需要输入一个参数那arg[0]==2成立。画出函数输入输出的流程图

-
1.如果输入的参数数量不为1,输出I think you are missing something.
验证:输入0个,2个,3个,4个参数都输出1.I think you are missing something.
![image]()
-
2.如果只输入一个参数,但这个参数不是字符串 "I know the secret" 输出Pardon? What did you say?
![image]()
-
3.如果只输入一个参数,且这个参数是字符串 "I know the secret",输出 You know how to speak to programs, Mr. Reverse-Enginee
![image]()
4.2.2静态分析crackme2.exe
重复4.2.1,通过IDA打开crackme1.exe后,选择View->Graphs->Function calls查看函数调用图,重点关注调用printf和fprintf的函数。只有sub_401280函数调用了fprintf函数,打开Windows->Functions window查看函数管理工具,双击sub_401280查看函数具体的调用图

分析该函数调用图,由于arg[1]是该文件的文件名,也是每一次运行必有的参数,所以我们只需要输入一个参数那arg[0]==2就成立。画出函数输入输出的流程图

- 1.如果输入的参数数量不为1,输出I think you are missing something.
![image]()
- 2.如果只输入一个参数,但第一个参数不是crackmeplease.exe 即文件名不为crackmeplease.exe 输出I have an identity problem.
验证:一个参数“1”,直接运行 与 更改文件名为crackme20232321.exe都输出I have an identity problem.
![image]()
- 3.如果只输入一个参数,且文件名为crackmeplease.exe 但输入的参数不为 "I know the secret" ,输出 Pardon? What did you say?
![image]()
- 4.如果只输入一个参数,且文件名为crackmeplease.exe 且输入的参数为 "I know the secret" ,输出 We have a little secret: Chocolate
![image]()
4.3恶意代码样本rada并撰写报告
4.3.1分析rada基本信息
通过输入一下指令分析RaDa文件的基本信息
file RaDa.exe
md5sum RaDa.exe
exiftool RaDa.exe | grep "Time Stamp"
RaDa.exe 是 PE32 格式的 Windows 可执行文件,属于 32 位 Intel x86 架构的图形界面。哈希值为 caa0b958a43225a0b3add54f4a40d4c7,编译于2004-10-30 07:59:58

4.3.2分析rada目的
使用IDA Pro分析脱壳后的RaDa文件。模拟4.2的分析方式打开函数调用图,选择函数sub_404FB0作为被分析的函数。打开Windows->Functions window查看函数管理工具,找到双击sub_404FB0。


关于sub_404FB0函数的具体分析如下:
命令mov edx, offset aHttp10_10_10_1;"http://10.10.10.10/RaDa",是程序在 “准备要访问的远程服务器地址,并将其复制到内存中以便后续使用”,是恶意软件中常见的 “C&C 配置” 环节,这个http://10.10.10.10/RaDa 很可能是一个恶意的服务器。

这段代码的核心功能是初始化一系列与恶意通信、文件操作和系统持久化相关的配置字符串,属于典型的恶意程序的 “配置模块。
RaDa_commands.html是用于从 C&C 服务器拉取控制命令的网页文件,程序会通过该页面获取攻击者下发的指令。
cgi-bin、download.cgi、upload.cgi是 Web 服务的常见路径 / 脚本,表明程序会通过HTTP 协议与 C&C 服务器交互。
C:\RaDa\tnp:是程序在本地磁盘的工作目录或临时文件存储路径,用于存放下载的文件、日志或其他恶意组件。
HKLM\Software\Microsoft\Windows\Current...:指向 Windows 系统的注册表路径,配置本地目录C:\RaDa\bin,并通过__vbaStrCat拼接出可执行文件的完整路径C:\RaDa\bin\RaDa.exe实现开机自启,从而长期驻留于受害主机。


- 总结:这是一个用于远程控制的后门程序,有RaDa_commands.html可以让攻击者随时通过该网页发动攻击;有C:\RaDa\tnp保存远程控制得到的文件和恶意组件;有HKLM\Software\Microsoft\Windows\Current实现开机自启动,从而长期驻留于受害主机。
4.3.3识别并说明这个二进制文件所具有的不同特性
该二进制文件拥有32 位 Intel x86 架构的图形界面,被upx压缩加壳,可以开机自启动,安装恶意组件和http://10.10.10.10/RaDa 的远程恶意服务器建立连接,还可以通过RaDa_commands.html这个网页启动攻击和恶意操作。
4.3.4识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
通过upx压缩技术和花指令来防止二进制文件被分析。
UPX 通过修改程序的重定位表,导致调试器或反汇编工具在解析程序地址时出现混乱。
花指令通过添加无实际功能的算术操作,使反汇编后的代码看似复杂,干扰逆向工程师对核心逻辑的理解;还可以通过 call + ret 指令的组合让反汇编工具难以准确识别代码块的边界。
4.3.5对这个恶意代码样本进行分类,并给出你的理由;
我认为该样本属于后门程序,因为该程序不具备自我复制和主动传播的特性,所以排除病毒和蠕虫。而且该程序也没有伪造成正常的程序,暂时排除木马。他主要具有“提供长期未授权访问的功能模块”的特性,所以猜测为后门。
4.3.6给出过去已有的具有相似功能的其他工具;
像灰鸽子(BackDoor.Hupigon),Back Orifice,冰河
4.3.7可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?.
可以,在4.1中我们就找到了开发作者为Raul Siles &&David Perez。首先遇到加壳的文件先脱壳,不然很可能就是乱码,在脱壳之后可以使用IDA对函数调用图和函数调用工具进行分析。
4.3.8给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
- 1.基于特征码的检测方法:
通过提取恶意软件样本的特征码,将其与安全数据库中存储的恶意代码相比对,一旦比对成功就认为他是恶意软件。消耗的资源少,但是需要及时更新安全数据库存储的信息。 - 2.基于行为的检测方法:
通过监测恶意软件的行为,一旦他执行了恶意的行为就认为他是恶意软件。通过分析计算机的行为和操作记录,检测出是否存在异常行为,从而判断是否有恶意软件的存在。容易发生误报,把正常软件当作恶意软件。 - 3.通过网络流量的检测方法:
部分恶意软件会与远程的攻击者交换恶意信息,像本次实验的后门程序就会与http://10.10.10.10/RaDa 的远程恶意服务器建立信息连接。当我们监测主机的网络时,发现主机与未知的服务器多次建立连接,并传送敏感数据时,我们可以根据网络流量日志找到执行此操作的恶意软件。 - 4.基于沙箱的检测方法.:
将疑似恶意软件放入虚拟机中的理想环境中执行,监测恶意软件的行为。精度较高,但消耗资源大。 - 5.静态分析法:
对二进制文件进行扫描,脱壳和反汇编,来解析二进制代码,还原程序逻辑。此方法高效、安全,但耗费精力较大,且攻击者也可以通过加壳和花指令来加大我们反汇编的难度。
4.4取证分析实践
4.4.1IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC 是 Internet Relay Chat 的英文缩写,是一种基于文本的通信协议,用于实现多用户之间的实时聊天。僵尸程序可以通过IRC协议构建攻击者对僵尸主机的控制信道。
当 IRC 客户端申请加入一个 IRC 网络时,通常会发送 “NICK” 和 “USER” 消息。“NICK” 消息用于指定用户的昵称,“USER” 消息则提供关于用户的额外信息。
IRC 一般使用 TCP 端口 6667 进行明文传输,使用端口 6697 进行 SSL 加密传输。
4.4.2僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是指由攻击者通过恶意软件控制的、分布在不同地理位置的受感染计算机所组成的网络。这些受感染的计算机被称为 “肉鸡”。这些网络通常用于发动DDos攻击,传播恶意软件等
4.4.3蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
如图所示,通过Wireshark打开botnet_pcap_file.dat文件,输入筛选ip.src172.16.134.191 and tcp.dstport6667和ip.src172.16.134.191 and tcp.dstport6697,分别查看6667端口IRC明文传输情况和6697端口IRC SSL密文传输情况。可以看到蜜罐主机和5个IRC服务器通信,这些服务器IP分别是
209.126.161.29;66.33.65.58;66.241.174.144;217.199.175.10;209.196.44.172.
#目的ip为蜜罐主机,端口为IRC传输明文传输的6667和密文传输的6697
ip.src==172.16.134.191 and tcp.dstport==6667
ip.src==172.16.134.191 and tcp.dstport==6697



4.4.4在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
#下载tcpflow
sudo apt update
sudo apt-get install tcpflow
tecpflow --version

#筛选目的ip为209.196.44.172 目的端口6667
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"


#grep -a "^ irc5.aol.com 353" 用于筛选,只保留以:irc5.aol.com 353开头的行;
#sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g" 只保留用户名列表;
#tr ' ' '\n' 用于转换格式;
#tr -d "\15" 用于删除隐藏字符;
#grep -v "^$" 用于删除空行;
#sort -u 用于排序去重;
#wc -l 用于计数
cat 209.196.044.172.06667-172.016.134.191.01152 | grep -a "^:irc5.aol.com 353" | sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g" | tr ' ' '\n' | tr -d "\15" | grep -v “^$” | sort -u | wc -l

可以看到有3462个不同的主机访问了以209.196.44.172为服务器的僵尸网络
4.4.5哪些IP地址被用于攻击蜜罐主机?
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 20232321_test.txt

#查看20232321_test.txt
more 20232321_test.txt

4.4.6攻击者尝试攻击了那些安全漏洞?
在Wireshark中打开将botnet_pcap_file.dat文件,选择点统计->协议分级。分析各种协议的分布情况从分析结果中可以看出99.7%是TCP传输,0.3%通过UDP传输。


#分析tcp攻击的端口
tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191 and tcp[tcpflags]==0x12' | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

- 135 端口 用于 Windows 系统中进程间的远程通信
- 139端口 早期 Windows 文件和打印机共享的主要端口(永恒之蓝漏洞)
- 25端口 用于邮件服务器之间发送电子邮件
- 445端口 用于 Windows 文件共享、打印机共享(永恒之蓝漏洞)
- 4899端口 正常用于远程维护设备,却多为远程管理或恶意远程控制工具的默认端口(灰鸽子漏洞)
- 80端口 网页浏览的默认端口,所有未加密的 HTTP 网站均通过此端口传输数据
#分析UDP攻击的端口
tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191 and udp' | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

- 137端口 帮助设备在局域网中找到目标主机 (NetBIOS 名称服务缓冲区溢出漏洞)
4.4.7那些攻击成功了?是如何成功的?
-
135端口 没有成功
ip.src==172.16.134.191 and tcp.port==135
在进行TCP三次握手的过程中,发送[FIN, ACK]包主动断开连接。后续没有包。

-
139端口 没有成功
ip.src==172.16.134.191 and tcp.port==139
没有成功,IP 为172.16.134.191的主机向多个目标 IP发起 139 端口连接时,主机主动发送RST包中断连接。

-
25端口 没有成功
ip.src==172.16.134.191 and tcp.port==25
没有成功,发送[FIN, ACK]包主动断开连接,不断重复 建立连接后快速断开。

-
445端口 成功
ip.src==172.16.134.191 and tcp.port==445
445端口已经被成功攻击,流量中出现DCERPC的Bind_ack响应,以及SRVSVC的NetShareEnumAll调用。出现了NT Create AndX(文件创建)、Write AndX(数据写入)等操作,说明攻击者已获取目标主机的操作权限,可执行文件读写

-
4899端口 成功
ip.src==172.16.134.191 and tcp.port==4899
4899端口被成功攻击,流量中出现大量[PSH, ACK]包。这是远程控制工具传输指令或数据的典型特征,说明攻击者已通过 4899 端口建立控制信道,可向目标主机发送操作指令。

-
80端口 成功
ip.src==172.16.134.191 and tcp.port==80
80端口被成功入侵,成功的 HTTP 数据交互。在与207.68.176.250的 80 端口连接中,出现了完整的HTTP 协议请求与响应,这表明攻击者通过 80 端口成功发起了 HTTP 请求,可能用于信息收集、恶意脚本投递或控制指令传输

-
137端口 没有成功
ip.src==172.16.134.191 and udp.port==137
没有成功,攻击者正在对目标网络进行前期的信息侦察.

5.实验遇到的问题及解决
5.1遇到的问题一:我的主机运行不了IDA,显示缺失了某个组件,出现下图报错

解决方法:
经过查阅我了解到Windows 10、Windows Server 2012或更高版本的 Windows Server 不支持 Windows 帮助程序。 Windows 帮助程序仅适用于 Windows Vista、7、8 和 8.1。所以我在虚拟机的WIN7下安装运行IDA,可以正常运行。


6.实验感悟及总结
- 在本次实验中我学习了恶意代码的分析技术,像逆向分析,文件类型识别,脱壳与字符串提取,还在具体的实践中学会使用分析恶意代码的工具,像pied,逆向工具IDA,脱壳工具,ip分析工具wireshark,tcpflow。掌握了如何静态分析所给的exe文件,如何找到控制特定输入输出的方法,可以对网络上捕获到的恶意软件运行信息进行分析。
- 在学习的过程中,我也遇到了一些问题。初次接触函数调用图时,我常陷入抓不住重点的问题,直到学会聚焦输入输出等关键函数,才理顺了程序参数的判断逻辑。在分析网络流量时,我意识到恶意软件的恶意行为会留痕,静态逆向分析并不是单一工具的使用,而是IDA反汇编,脱壳工具,网络取证的协同合作。只有多个维度的分析验证,才能还原攻击者的手段与目的。
- 当然在实验过程中也遇到了非技术性的问题,就是我的IDA就是无法运行,一开始到处寻找那个组件,结果有的下载不稳定,等待了1个小时去看发现下载失败了,还有的需要额外付费。在报错提示和AI分析的帮助下,我突然想到既然由于版本太高没有必要的组件的话,可以去低版本的WIN7中尝试运行。
- 本次实验,我主要学习恶意代码的分析和实践。主要尝试了静态分析,流量分析的方法。
参考资料
- 《恶意代码分析实践》






