20232403 2024-2025-1 《网络与系统攻防技术》实验四实验报告

20232403 2025-2026-1 《网络与系统攻防技术》实验四实验报告

1.实验内容

使用file、PEiD等工具识别可执行文件的格式、加壳情况
利用脱壳工具对UPX加壳的样本进行脱壳,并通过字符串提取分析样本特征
借助IDA Pro对两个crackme程序进行静态分析,理解其逻辑并找到特定输入
对恶意样本RaDa进行基础分析,包括提取文件哈希、识别C&C服务器地址、归纳样本特性及检测方法
最后通过抓包文件分析IRC协议和僵尸网络,统计参与主机数量。

2.实验过程

2.1恶意代码文件类型标识、脱壳与字符串提取

file一下查看文件格式和运行平台
image
结果为RaDa.exe: PE32 executable (GUI) Intel 80386, for MS Windows, 3 sections
通过这个反馈可以获取以下信息:
文件格式:PE32,这表明该文件是32位Windows可执行文件。
运行平台:for MS Windows,也就是Windows。
特性:(GUI),这是图形用户界面程序。
结构:3 sections,该文件只有3个节区。数量算很少的,这也一定程度能反映该文件被加壳,通常未加壳的PE文件会有更多的节区。
用PEID.exe分析RaDa.exe,结果如下:
屏幕截图 2025-11-10 083728
加壳工具为UPX,且作者是Markus&Laszlo。
使用超级巡警脱壳机,对rada恶意代码样本进行脱壳处理:
屏幕截图 2025-11-10 084508
得到RaDa_unpacked.exe
使用字符串提取工具,将脱壳处理的文件提取字符并grep分析,找到文件签名
image
可以看到明确的签名,作者为Raul Siles和David Perez。

2.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。

2.2.1IDA静态分析crackme1.exe

F5反汇编一下,结果如下:
image
伪代码逻辑十分清晰,我们来分析一下,
程序检查命令行参数argc的数量,
如果参数数量不等于2,则输出:"I think you are missing something."
如果参数数量等于2,则继续检查第二个参数argv[1]的内容。
程序使用strcmp函数比较第二个参数与字符串"I know the secret":
如果匹配,则输出成功信息:"You know how to speak to programs, Mr. Reverse-Engineer"
如果不匹配,则输出:"Pardon? What did you say?"
也就是说,我们只需要使argv有两个参数,且第二个参数为"I know the secret"即可得到正确结果。
值得注意的是,argv的第一个参数为程序名本身,所以我们需要提供的只有第二个参数
image
输入错误数据,结果符合刚刚的分析过程。
image

2.2.2IDA静态分析crackme2.exe

接下来静态分析crackme2.exe
image
注意到这样一句伪代码!strcmp(*argv, "crackmeplease.exe")
前文提到,argv的第一个参数为程序名本身,那么这句话的含义大致就是检查该文件的文件名是否为crackmeplease.exe,
也就是说,程序要求该可执行文件必须命名为crackmeplease.exe
然后!strcmp(argv[1], "I know the secret")
和crackme1一样检查参数内容是否为 "I know the secret"
那么结果很明确了,需要将文件名重命名为crackmeplease.exe,然后输入参数"I know the secret"即可
image
哟,结果不对,为什么呢,乱试了一通,最后想到可能程序只比对了 "crackmeplease.exe",而我输入的是实际是路径,所以换到cmd重新做一遍
image
虽然解决了,但是还是有一个小疑问,为什么刚刚crackme1.exe没有这样的问题?
这是因为crackme1只检查参数数量和参数内容,而没有检查程序名称。

2.3分析恶意代码样本rada,并撰写报告

2.3.1提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。

image
基础文件信息
文件名: RaDa.exe
文件类型: PE32 executable (GUI) Intel 80386, for MS Windows
MD5: caaa6985a43225a0b3add54f44a0d4c7
SHA1: 4164423ece62c5c4c287f8c2003b84e4e3a6cfda
SHA256: 13c2379e9d9f679396e21a3391804cc834892f25691381b6d078d07b56d38f90
这些哈希值是文件的数字指纹,全球唯一,是可靠的识别依据,可以帮助识别同一样本。

2.3.2找出并解释这个二进制文件的目的。

屏幕截图 2025-11-10 110713
在反汇编中找到如下一行关键信息
JDR0:004023A4 text "UTF-16LE", 'http://10.10.10.10/RaDa',0
http://10.10.10.10/RaD是一个很可疑的网站,继续寻找相关信息
image
在sub_404FB0函数中有一行关键信息
JDR0:00404FE1 mov edx, offset aHttp10101010Ra ; "http://10.10.10.10/RaDa"
这是C&C服务器配置,其中10.10.10.10是一个私有IP地址,很可能为攻击者控制的服务器地址。
因此这段代码的目的很可能是建立HTTP通信通道。基本上可以确定RaDa是一个HTTP后门程序。

2.3.3识别并说明这个二进制文件所具有的不同特性。

该二进制文件是一个使用VBA编写并经过UPX加壳的HTTP后门程序。它通过C&C服务器地址和http://10.10.10.10/RaDa进行通信。是一个Windows远程控制工具。

2.3.4识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。

该二进制文件主要采用UPX加壳技术来混淆原始代码。同时使用HTTP协议进行通信,伪装成正常网络流量。

2.3.5对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。

我认为该恶意代码样本是后门。因为它不具备自我复制和主动传播的特性,不属于病毒或蠕虫,且主要功能是为攻击者提供一个隐蔽的远程控制通道,使其能够对目标主机进行操作,这是一个后门程序。

2.3.6给出过去已有的具有相似功能的其他工具。

netcat、BO、冰河、灰鸽子

2.3.7可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

可以,在前面的操作中我们已经找出作者为Raul Siles和David Perez。

2.3.8给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。

1.基于特征码的检测
原理:提取样本独特的字节序列作为检测特征
计算文件哈希:MD5(caaa6985a43225a0b3add54f44a0d4c7)、SHA256(13c2379e9d9f679396e21a3391804cc834892f25691381b6d078d07b56d38f90)
创建YARA规则检测字符串特征:"(c) Raul Siles && David Perez"、"http://10.10.10.10/RaDa"
检测UPX加壳特征和3个节区的文件结构
2. 网络行为检测
原理:监控异常的HTTP通信模式
检测到硬编码IP 10.10.10.10的HTTP连接
监控特定URL路径/RaDa的请求
分析HTTP流量中的命令响应特征和特定User-Agent
3. 行为监控检测
原理:检测样本运行时的可疑行为
监控文件系统活动,检测"RaDa"工作目录的创建
观察进程创建行为,特别是cmd.exe的异常启动
检测注册表修改,寻找自启动持久化证据
4. 内存分析检测
原理:分析运行进程的内存特征
使用Volatility检测加壳程序的内存映像
查找内存中的明文字符串特征
分析进程的API调用序列和网络连接状态
5. 启发式分析检测
原理:基于代码行为特征评分
分析导入函数表,检测网络、文件、进程相关API的密集使用
检测UPX加壳特征和异常节区结构
评估代码复杂性和异常时间戳

2.4取证分析实践

2.4.1IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?

IRC是一种应用于互联网的实时文本通信协议。它采用客户端-服务器模型,用户可以在不同的“频道”中进行群组聊天或进行私密对话。
当客户端想要加入一个特定频道时,会发送JOIN命令。格式通常为JOIN#频道名称。
IRC传统上使用6667端口。此外,也常使用端口范围6660-6669以及7000和194。

2.4.2僵尸网络是什么?僵尸网络通常用于什么?

僵尸网络是指由攻击者通过命令与控制服务器集中控制的大量被植入恶意软件的计算机所组成的网络。
主要用于
1.分布式拒绝服务攻击,利用大量僵尸机同时向目标发送流量,使其服务瘫痪。
2.发送垃圾邮件。
3.窃取敏感信息。
4.模拟用户点击网络广告,骗取广告费。
5.挖矿,利用受害主机的计算资源进行加密货币挖矿。

2.4.3蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?

使用ip.addr == 172.16.134.191 && tcp.port == 6667对botnet_pcap_file.dat进行过滤
image
从过滤结果看,蜜罐主机(172.16.134.191)与以下IRC服务器进行了通信:
209.126.161.29:6667
66.33.65.58:6667
63.241.174.144:6667
217.199.175.10:6667

2.4.4在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?

利用了IRC协议的特性来统计僵尸网络中的客户端数量
IRC服务器会定期发送353消息,其中包含当前频道中的所有用户列表。
每个僵尸客户端在IRC频道中都有一个唯一的昵称,统计这些昵称就等于统计了不同的主机。
在Kali虚拟机中执行tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
生成了三个文件,report.xml,172.016.134.191.01152-209.196.044.172.06667,209.196.044.172.06667-172.016.134.191.01152
image
执行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
cat 209.196.044.172.06667-172.016.134.191.01152读取服务器到客户端的数据流文件
grep -a "^:irc5.aol.com 353"查找以:irc5.aol.com 353开头的行
tr ' ' '\n'将空格分隔的用户名转换为每行一个用户名
tr -d "\15"删除Windows回车符\r(八进制015)
grep -v "^$"过滤掉空行
sort -u排序并去重,得到唯一的用户名列表
wc -l统计行数,即唯一用户数量
image
从结果可以看出,在这段观察期间,共3461台不同的主机访问了以209.196.44.172为服务器的僵尸网络。

3.问题及解决方案

  • 问题1:静态分析crackme2时实际结果与预期不符
  • 问题1解决方案:祥见2.2.2
  • 问题2:在分析rada时,发现有一大块分区无法分析
    image
    image
  • 问题2解决方案:经过思考,意识到这是加壳的结果,应该先脱壳再分析,解决问题的同时感受到了加壳的作用。

4.学习感悟、思考等

通过本周的实验,我更加系统地掌握了恶意代码分析的基本流程和常用工具,对PE文件结构、加壳与脱壳、静态反汇编分析有了更直观的认识。在分析过程中遇到预期之外的结果时,逐步排查问题根源,加深了对程序实际运行机制的理解。此外,我也体会到恶意代码如何利用加壳、网络通信等手段隐藏自身,而作为分析者则需要多角度结合文件特征、行为、网络流量等进行综合判断。

posted @ 2025-11-10 22:06  20232403  阅读(10)  评论(0)    收藏  举报