20232307 2025-2026-1 《网络与系统攻防技术》实验四实验报告
20232307 2025-2026-1 《网络与系统攻防技术》实验四实验报告
1. 实验内容
1.1 恶意代码文件类型标识、脱壳与字符串提取
1.2 使用IDA静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
1.3 分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
1.4 取证分析实践
2. 实验目的
掌握恶意代码分析技术,包括文件识别、脱壳、字符串提取及静态动态分析,完成样本分析与取证。
3. 实验过程
3.1 恶意代码文件类型标识、脱壳与字符串提取
对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下:
3.1.1 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
将rada.exe文件传输到kali虚拟机,使用file RaDa.exe命令

-
文件格式与运行环境:PE32 executable for MS Windows表明这是一个Windows 平台的可执行文件,Intel i386 说明它是32 位程序,可在 x86架构的Windows系统上运行。
-
程序类型:GUI 表示该程序具备图形界面,3 sections指文件内部结构包含 3 个区块。
使用PEiD对目标文件分析,可以发现RaDa.exe使用了UPX加壳工具,如下图所示:

- 加壳:UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo表明该程序使用UPX 加壳工具进行了压缩。
3.1.2 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
使用超级巡警之虚拟机自动脱壳器软件对RaDa.exe文件脱壳,脱壳后的文件为RaDa_unpacked.exe.

3.1.3 使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者
将脱壳后的文件为RaDa_unpacked.exe传输到kali虚拟机里面,使用命令strings RaDa_unpacked.exe,提取可执行文件中可读字符串。

我们可以在输出的字符串中查找到编写作者的信息,如下图所示,可以看到作者为Raul Siles && David Perez

(2)接下来再使用IDA pro软件来查找编写作者信息:
打开IDA pro软件,再IDA中打开RaDa_unpacked.exe文件,点击Strings,可以在打开的字符串窗口中看到作者信息:作者为Raul Siles && David Perez。
otM 32 - September 2004对应Honeynet Project的“月度扫描样本”记录,进一步证实其作为公开恶意样本的身份。

3.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
3.2.1 分析crackme1.exe寻找特定输入,使其能够输出成功信息。
使用file命令查看crackme1.exe文件信息:

可以看到表明这是一个Windows平台的可执行文件;Intel i386说明它是32位程序,可在x86架构的Windows系统上运行。
1.在windows的powershell中运行crackme1.exe文件,尝试找到正确的参数格式。
crackme1.exe #无参数
crackme1.exe 1 #1个参数
crackme1.exe 1 2 #2个参数
crackme1.exe 1 2 3 #3个参数
crackme1.exe 1 2 3 4 #4个参数
crackme1.exe 1 2 3 4 5 #5个参数
结果如下图所示:

从图片中可以看到,当输入一个参数时,输出结果为“Pardon? What did you say?”,其余情况的输出结果都是“I think you are missing something.”。
下面进一步验证输入一个参数是否正确。
2.在IDA Pro中打开文件crackme1.exe进一步分析
(1)在IDA中选择view-->Open subviews-->Strings,打开Strings windows.

在打开的Strings windows中,我们可以看到之前测试结果中出现过的“I think you are missing something.\n”和“Pardon? What did you say?\n”,以及测试中未出现的“You know how to speak to programs, Mr.Reverse-Engineer\n”和“I know the secret”。我们猜测一下“I know the secret”是特定输入。

(2)接下来在IDA中选择view-->graphs-->Function Call,查看函数调用图。

可以看到sub_401280函数调用了strcmp、fprintf等库函数,可见sub_401280函数较为重要。
(3)接下来具体查看一下sub_401280函数。
点击Functions,在Functions windows窗口中选择sub_401280函数

在下图的函数调用图中可以看到,当输入参数满足条件时,跳转到loc_4012D2执行正确路径;否则执行错误路径。在loc_4012D2中,通过strcmp函数比对输入字符串与"I know the secret",若匹配则进入成功分支(loc_401310),输出 "You know how to speak to programs, Mr....";若不匹配则进入失败分支,输出 "Pardon? What did you say?\n" 或 "I think you are missing something.\n"。

(4)在windows中输入"I know the secret"来验证

可见,"I know the secret"就是特定输入。
3.2.2 分析crackme2.exe寻找特定输入,使其能够输出成功信息。
1.在windows的powershell中运行crackme2.exe文件,尝试找到正确的参数格式。
crackme2.exe #无参数
crackme2.exe 1 #1个参数
crackme2.exe 1 2 #2个参数
crackme2.exe 1 2 3 #3个参数
crackme2.exe 1 2 3 4 #4个参数
crackme2.exe 1 2 3 4 5 #5个参数
结果如下图所示:

从图片中可以看到,当输入一个参数时,输出结果为“I have an identity problem.”,其余情况的输出结果都是“I think you are missing something.”。
下面进一步验证输入一个参数是否正确。
2.在IDA Pro中打开文件crackme1.exe进一步分析
(1)在IDA中选择view-->Open subviews-->Strings,打开Strings windows.

在打开的Strings windows中,我们可以看到之前测试结果中出现过的“I think you are missing something.\n”和“I have an identity problem.\n”。在此,我们猜测一下“I know the secret”是特定输入。
(2)接下来在IDA中选择view-->graphs-->Function Call,查看函数调用图。

可以看到sub_401280函数调用了strcmp、fprintf等库函数,可见sub_401280函数较为重要。
(3)接下来具体查看一下sub_401280函数。
点击Functions,在Functions windows窗口中选择sub_401280函数

由上图可知,crackme2.exe将用户传入的参数与 "crackmeplease.exe" 比较,若比对发现与crackmeplease.exe一致,再将参数与 "I know the secret" 比较,若一致,则输出最终的"We have a little secret:Chocolate"
(4)在windows中进行验证:
将crackme2.exe文件复制,复制生成的文件名应为crackmeplease.exe
copy crackme2.exe crackmeplease.exe
输入正确的参数:
"I know the secret"
验证正确,需将crackme2.exe文件更名或复制为crackmeplease.exe,再输入"I know the secret",则可得到特定输出。

3.3 分析一个自制恶意代码样本rada,回答以下问题:
3.3.1 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
(1)提供对这个二进制文件的摘要
md5sum RaDa.exe
sha256sum RaDa.exe

得到了RaDa.exe文件的摘要。
(2)识别同一样本的基本信息
file RaDa.exe

表明这是一个Windows 平台的可执行文件。
3.3.2 找出并解释这个二进制文件的目的;
RaDa.exe文件通过修改注册表和定义恶意路径,实现对Windows系统的远程控制、数据窃取、DDoS攻击,并通过持久化与隐蔽手段长期危害目标主机。
(1)使用Process Explorer软件进行动态分析
以管理员身份打开命令提示符,进入到RaDa_unpacked.exe的目录下面,运行这个可执行文件。

然后打开Process Explorer软件,双击RaDa_unpacked.exe

点击Strings,查看字符串:

由上图可知:这是一个后门程序。
- 编码的C&C服务器地址是"10.10.10.10",恶意软件通过该地址的RaDa_commands.html获取攻击指令。
- 本地目录C:\RaDa\tmp用于存储临时文件,C:\RaDa\bin用于存放自身副本(RaDa.exe)。
- 通过修改注册表HKLM\Software\Microsoft\Windows\CurrentVersion\Run\RaDa,实现开机自动运行,确保恶意程序持续驻留。
- DDoS 攻击:字符串 “Starting DDoS Smurf remote attack...” 表明其具备发起Smurf攻击的能力。这种攻击通过伪造源 IP,向目标网络广播ICMP echo请求,利用大量主机的响应数据包淹没受害者,属于典型的流量放大型DDoS攻击。
- 该恶意软件由Raul Siles & David Perez于2004年开发,是早期后门类恶意程序的典型样本,兼具远程控制、数据窃取和DDoS攻击功能,主要用于对 Windows系统的渗透控制。

由上图可知,这个文件能截取屏幕截图、执行休眠、退出程序。支持文件的打开和写入操作。
(2)使用IDA进行分析
在IDA中找到"10.10.10.10",然后进入其所在的函数sub_404FB0:

查看函数的调用图像:

结合反汇编进行分析:

从上述图片中可以看出RaDa_unpacked.exe文件http连接到10.10.10.10并进行数据传输;并初始化网络通信的配置参数,为后续和服务端的交互做准备。

从上述图片中可以看出C:\RaDa\tmp用于存储临时文件。文件通过HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run修改注册表路径,将自身添加为开机自启动项,确保恶意程序持续驻留。
综上,我们可以得出RaDa.exe文件可以通过修改注册表和定义恶意路径,实现对Windows系统的远程控制、数据窃取、DDoS攻击。
3.3.3 识别并说明这个二进制文件所具有的不同特性;
该文件通过具有持久化,修改注册表自启动项实现开机自启动;且该文件使用了UPX加壳技术,此外还检测虚拟机注册表项和特定MAC地址,以识别是否在虚拟机环境中运行,从而增加逆向工程和检测的难度。
3.3.4 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
使用加壳工具UPX对程序进行压缩打包,外壳代码会在程序运行时先解压原始代码到内存,再将控制权转移给原始程序。加壳后的程序在静态分析时仅能看到外壳代码,无法直接获取核心逻辑。
3.3.5 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
后门程序。
理由:后门通过访问服务器上的RaDa_commands.html文件获取攻击者写入的系统命令,并在本地执行,形成“远程控制—本地执行”的闭环操作,具备文件管理、信息窃取、系统操控等能力。
RaDa文件通过硬编码C&C服务器、远程命令解析与执行、以及反分析设计,实现了作为后门的核心功能,在目标系统中建立隐蔽通道,供攻击者远程操控,体现了恶意软件在持久化、隐蔽通信与指令执行方面的典型技术特征。
3.3.6 给出过去已有的具有相似功能的其他工具;
-
Meterpreter:集成于Metasploit渗透测试框架,具备远程控制、文件操作、键盘记录、摄像头劫持、权限提升等功能。
-
Rootkit:修改系统内核,隐藏自身进程、文件、网络连接,让管理员难以察觉其存在。
3.3.7 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以
(1)使用IDA打开脱壳后的文件,查看字符串可以看到作者是Raul Siles 和 David Perez。

(2)在Windows中在文件目录下打开该文件,使用RaDa.exe --authors命令,会弹出作者信息。

3.3.8 给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
(1)基于特征码检测:通过提取恶意软件的唯一标识,与数据库中的已知恶意样本特征比对,匹配成功则判定为恶意。特征码是恶意软件中不可替代的独特片段,如特定二进制代码、字符串、加密常量等”。
(2)基于行为检测:不依赖预设特征,而是监控程序运行时的动态行为序列,通过判断行为是否符合 “恶意行为模式”,如未授权数据窃取、系统破坏来检测。核心是行为是否越界。
(3)基于启发式检测:基于概率推理,通过分析程序的静态结构或动态行为特征,计算其 恶意可疑度,当可疑度超过阈值时判定为恶意。核心是 根据经验判断是否像恶意软件。
(4)基于沙箱隔离检测:在隔离的虚拟环境中运行可疑程序,模拟真实系统的硬件、网络、文件系统,完整记录程序的所有操作,如行为日志、网络流量、文件变化,通过分析日志判断是否恶意。
(5)基于机器学习检测:利用机器学习模型,如决策树、神经网络对大量恶意或良性样本的特征进行训练,让模型自动识别恶意软件的模式。
3.4 取证分析实践
Windows 2000系统被攻破并加入僵尸网络
问题: 数据源是Snort收集的蜜罐主机5天的网络数据源,并去除了一些不相关的流量,同时IP地址和其他敏感信息被混淆。回答下列问题:
3.4.1 IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用那些TCP端口?
-
IRC(Internet Relay Chat)是一种基于文本的实时通信协议,允许用户通过客户端连接到IRC服务器,加入频道与其他用户进行实时交互,广泛用于群体聊天、技术交流等场景,早期也被滥用为僵尸网络的命令与控制通道。
-
当IRC客户端申请加入一个IRC网络时,首先需要与IRC服务器建立TCP连接,连接成功后发送的核心消息是NICK命令用来设置用户名和USER命令用来设置用户信息:NICK <用户名>和USER <用户名> <主机名> <服务器名> :<真实姓名>。
-
RC协议默认使用的TCP端口是6667端口和6697端口。6667端口未加密的 IRC 通信默认端口;6697端口是基于SSL/TLS加密的IRC通信默认端口,用于安全连接。
3.4.2 僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是由攻击者通过恶意软件控制的大量“肉鸡”组成的网络集合,攻击者可远程操控这些设备。
僵尸网络常用于实施分布式拒绝服务攻击、发送垃圾邮件、窃取敏感数据、进行加密货币挖掘、制造广告或点击欺诈、传播恶意软件及操纵在线投票等多种恶意活动,对网络安全、用户隐私和经济利益造成严重威胁。
3.4.3 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
在虚拟机的Wireshark中打开botnet_pcap_file.dat文件,使用以下命令筛选:
ip.src == 172.16.134.191 && tcp.dstport == 6667 || tcp.dstport == 6697
筛选出源IP是172.16.134.191且TCP目标端口是 6667或TCP目标端口是6697的数据包。
筛选结果如下图所示:

由上图可知,与蜜罐主机通信的IRC服务器的IP为:209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172。
3.4.4 在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
此处需要安装tcpflower软件,使用如下命令:
sudo apt-get install tcpflow

使用如下命令,读取botnet_pcap_file.dat中的所有数据包。
tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"
筛选出与IP:209.196.44.172通过6667端口进行的 TCP 通信,按TCP流(重组这些数据,将双向传输的内容提取出来,输出到终端或保存为文件。

可以看到多了3个文件:

接着使用如下命令:
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
这个命令是从文件209.196.044.172.06667-172.016.134.191.01152中提取 IRC 服务器返回的频道用户列表,清洗后统计独立用户数量。整个命令链的逻辑是:读取 IRC 通信文件-->筛选用户列表行-->删除无关前缀-->拆分用户为单行-->清理特殊字符-->过滤空行-->去重排序-->统计独立用户数。

由运行结果可知,总共有3461台主机访问了以209.196.44.172为服务器的僵尸网络。
3.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 > 20232307my.txt;wc -l 20232307my.txt
该命令通过tcpdump -n -nn -r读取botnet_pcap_file.dat文件,筛选出目标IP为172.16.134.191的所有数据包;接着用awk -F " " '{print $3}'提取这些数据包的“源IP. 源端口”字段;再通过cut -d '.' -f 1-4从“源IP. 源端口”中切割出纯源 IP 地址(去除端口号);随后经sort对IP列表排序、uniq去除重复IP,将去重后的独立源 IP列表写入20232307my.txt文件;最后用wc -l 20232307my.txt统计文件行数,即得到与该僵尸机通信的独立源 IP 总数。

可以看到总共是有165个IP地址被用于攻击蜜罐主机。
打开生成的20232307my.txt文件可查看这165个IP地址。

3.4.6 攻击者尝试攻击了那些安全漏洞?
(1)wireshark中点击Statistics-->Protocol Hierarchy查看协议分布:
可以看到TCP数据包占比99.7%,UDP数据包占比0.3%。

(2)在kali终端中使用如下命令:
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
筛选出源IP为172.16.134.191且TCP标志位为0x12的数据包;然后提取这些数据包的源端口;最后对端口进行排序和去重,得到该僵尸机在建立TCP连接时使用的所有独立源端口列表。

从图中可以看出建立TCP连接的端口号有:135、139、25、445、4899、80
(3)在kali终端中使用如下命令:
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
通过tcpdump筛选出源IP为172.16.134.191且使用 UDP 协议” 的所有数据包;接着通过两次cut操作提取这些数据包的源端口;最后通过sort排序和uniq去重,得到该僵尸机发送UDP数据包时使用的所有独立源端口列表。

从图中可以看出建立UDP连接的端口号有:137
3.4.7 那些攻击成功了?是如何成功的?
(1)TCP连接135端口
在Wireshark中设置过滤条件:ip.addr==172.16.134.191 and tcp.port==135

由上图可知,通过135端口建立了3次握手但是很快就断开了,并未有实质攻击操作。
(2)TCP连接139端口
在Wireshark中设置过滤条件:ip.addr==172.16.134.191 and tcp.port==139

由上图可以看到,虽然完成了TCP三次握手,但是攻击者试图访问共享目录\PC0191\c是被拒绝,所以并未完全攻击成功。
(3)TCP连接25端口
在Wireshark中设置过滤条件:ip.addr==172.16.134.191 and tcp.port==25

由上图可知,通过25端口虽然建立了三次握手,但是建立之后很快就断开了,所以25端口也并未完全攻击成功。
(4)TCP连接445端口
在Wireshark中设置过滤条件:ip.addr==172.16.134.191 and tcp.port==445
从下图可以看到TCP连接建立成功,完成了SYN-ACK三次握手完成

下图数据包287-288显示Negotiate Protocol Request/Response,双方确认使用SMB协议;数据包289-291进行NTLMSSP认证,最终认证成功。

认证通过后,攻击者通过Tree Connect AndX Request访问\172.16.134.191\IPC$,并通过NT Create AndX Request尝试访问\samr,SAMR 是Windows安全账户管理的远程接口,攻击机试图操作用户账户数据库。

这说明攻击机已通过445端口突破SMB认证,获得了对目标系统的远程资源访问权限,攻击流程完整且成功。
(5)TCP连接4899端口
在Wireshark中设置过滤条件:ip.addr==172.16.134.191 and tcp.port==4899
从下图可以看到TCP连接建立成功,完成了SYN-ACK三次握手完成

下图流量中出现HEAD /cgi/../../../../../winnt/system32/cmd.exe?/c+dir的 HTTP 请求 —— 这是典型的路径穿越攻击,通过绕过权限限制直接访问系统核心目录的cmd.exe并执行dir命令,证明攻击者已获得系统命令执行权限。

可以判断通过4899端口突破服务认证,限制建立远程控制通道并执行系统命令,攻击成功。
(6)TCP连接80端口
在Wireshark中设置过滤条件:ip.addr==172.16.134.191 and tcp.port==80
从下图可以看到TCP连接建立成功,完成了SYN-ACK三次握手完成。

下图流量中出现GET /NULL.IDAPCCCCCCCC...的HTTP请求,这是典型的恶意扫描,目标设备对该请求返回了响应,说明攻击者的恶意请求已被目标处理。攻击者与目标80端口多次建立TCP连接,并发送恶意HTTP请求,目标均未拒绝,证明攻击者已通过 80 端口建立稳定的通信通道,可持续发送攻击载荷。
NULL.IDA请求的本质是利用IIS服务器的文件解析漏洞,尝试执行恶意代码或读取敏感文件。结合该请求的出现,可判定攻击者已通过80端口发起Web漏洞攻击,并成功与目标交互。

(7)UCP连接137端口
在Wireshark中设置过滤条件:ip.addr==172.16.134.191 and udp.port==137

从上图的流量特征看,存在大量不同源IP向172.16.134.191发起NBNS查询,且部分请求得到了响应,但未实施任何攻击。
综上所述,TCP连接445端口、4899端口、80端口攻击成功。
4. 问题及解决方案
- 问题1:在windows中运行rada_unpacked.exe文件时出现如下图所示的报错:

- 问题1解决方案:换成以管理员身份运行命令提示符,即可运行该文件,并且可以在Process Explorer软件中查看到运行的文件信息:

- 问题2:在统计哪些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 > 20232307my.txt;wc -l 20232307my.txt
发现结果是0:

- 问题2解决方案:
这个应该是我运行这个命令时打开终端的位置不对,将终端切换到桌面(因为之前一直是在桌面打开的),重新运行命令后发现结果正确。

5. 学习感悟、思考
本次的恶意代码分析和取证实验让我进一步理解了恶意代码机制、了解了恶意代码的文件类型、进行了脱壳、使用静态分析和动态分析方法分析了恶意代码文件、寻找特定输入输出的操作、学会如何对nort收集的蜜罐主机5天的网络数据源进行分析。本次实验内容充实,使我收获颇丰,让我在实验二和实验三的基础上进一步理解和掌握网络攻防中的恶意代码知识。
值得一提的一点,本次实验没有遇到较大的困难,发现一些小问题如rada_unpacked.exe文件因没有以管理员身份运行而报错的问题也很快解决。实验整体较为顺利,我也意识到实验过程中出现小问题使正常的,只要认真分析出错原因,问题就会迎刃而解。
本次实验进一步增强了我对网络攻防实验的兴趣和信心,希望在下一次实验中能够更进一步。

浙公网安备 33010602011771号