20232417 2025-2026-1 《网络与系统攻防技术》实验四实验报告
1.实验内容
1.1实验要求
(1)恶意代码文件类型标识、脱壳与字符串提取。
(2)使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
(3)分析一个自制恶意代码样本rada,并撰写报告。
(4)取证分析实践。
1.2实验内容
本次实验系统完成了恶意代码分析的全流程实践:首先对样本进行文件识别、脱壳和字符串提取;随后使用IDA Pro逆向分析crackme程序,成功破解关键输入;接着深入剖析rada恶意样本的行为机制并撰写报告;最后通过取证分析重建攻击链,精准识别了攻击源与感染主机。
2.实验过程
2.1恶意代码文件类型标识、脱壳与字符串提取
2.1.1分析rada样本的文件类型
输入file RaDa.exe命令,可以从结果看到文件是exe可执行文件
MS Windows 4.00:对应Windows NT 4.0/95/98时代
Intel i386:针对Intel 80386处理器架构
GUI:图形用户界面应用程序
3 sections:只有3个节区

使用PEiD软件可以看出使用了加壳工具UPX。

2.1.2对RaDa文件进行脱壳处理
使用VM Unpacker工具对RaDa文件进行脱壳处理

得到脱壳后的文件如下:

2.1.3利用字符串提取工具对脱壳后的文件进行分析
下载IDA pro,打开后选择PE Executable,选择脱壳后的文件进行分析。

在最后打开的界面选择string界面,点击查看,可以找到样本相关的信息,例如,制作人的姓名以及制作年月等。

2.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe
2.2.1分析crackme1.exe
直接使用./crackme1.exe命令运行crackme1.exe,可以看到输出的结果为I think you are missing something.,在命令后面加上一个参数后,输出的结果为Pardon? What did you say?,由此可以推断出需要一个正确的参数。

打开IDA pro,选择PE Executable后,选择crackme1.exe进行分析,选择IDA View-A界面。

选择View,再选择Graphs,再选择Function calls,可以打开函数调用图。

函数调用图如下,可以看到sub_401280函数调用了strcmp函数、fprintf函数和printf函数。这三个函数都是与字符串处理相关的函数,由此推测sub_401280函数与crackme1.exe的参数判断有重要作用。

回到主界面后,点击Functions界面,选择sub_401280。

再点击View后,在Graphs下选择Flow chart。如果Flow chart无法使用,可以双击sub_401280打开函数流程图。

对函数流程图进行详细分析:

cmp [ebp+arg_0], 2->比较参数(arg_0)的值是否等于2,如果相等设置ZF=1
jz short loc_4012D2->如果相等(Zero flag set),即ZF=1,则跳转到loc_4012D2标签处
loc_4012D2标签对应的是参数相等的情况,而这段代码是将用户的输入与I know the secret字符串进行比较,所以由此推断应该输入I know the secret。
push offset aIKnowTheSecret:将字符串"I know the secret"的地址压栈
push dword ptr [eax]:将eax指向的字符串地址压栈(可能是用户输入)
call strcmp:调用字符串比较函数

根据我们的推断输入正确的参数后,运行crackme1.exe,可以看到输出的结果是对应的。

2.2.2分析crackme2.exe
运行crackme2.exe,可以看到其对输入的参数的要求与crackme2.exe大体上一致,但是在输入正确的参数“I know the secret”后,需要进一步的验证。

依据2.2.1中的方法打开函数调用图,可以看到fprintf函数、strcmp函数、putchar函数和puts函数等与字符串处理函数相关的函数,那么类似的,与之相关的sub_401280函数一定与参数处理相关。

参照2.2.1的方法打开sub_401280函数的函数流程图。

这个流程图大体上与crackme1.exe的流程图相似,以下是对流程图的详细分析。
首先是对参数个数的判断,与crackme1.exe的相似,参数个数为2时跳转到loc_4012D标签处。

当参数相同时,会对程序的名称进行判断:

push offset aCrackmeplease_:将字符串"crackmeplease.exe"的地址压栈
push dword ptr [eax]:将eax指向的字符串压栈(当前程序的名称)
call strcmp:比较两个字符串
当程序的名称相同时,再进行下一步的判断。

按照上面的分析,我们只需要将程序的名称改为"crackmeplease.exe"即可,改名后运行crackmeplease.exe就可以得到我们想要的结果。我的截图出现要覆盖crackmeplease.exe吗的提示是由于之前在powershell下运行过一次

2.3分析恶意代码样本rada,并撰写报告
2.3.1信息获取过程
分别输入file RaDa.exe和md5sum RaDa.exe命令查看RaDa样本的相关信息和哈希值。

运行脱壳后的RaDa样本,即运行RaDa_unpacked.exe,打开process explorer,找到这个进程。

双击进程后,查看Strings窗口,可以看到如下信息:

根据以上信息可以进行以下分析:
(1)网络访问和CGI脚本:
http://10.10.10.10/RaDa: 这是攻击者掌控的命令与控制服务器。使用HTTP协议使其流量易于混入正常的网页访问中。
RaDa_commands.html: 这是木马的“任务清单”。木马会定期(如每分钟)访问这个文件。攻击者通过更新此HTML文件的内容(可能隐藏在HTML注释或特定标签中)来向所有受感染主机下发指令。
/cgi-bin/download.cgi 和 /cgi-bin/upload.cgi: 这是木马的文件传输通道。
download.cgi: 木马通过此脚本从C&C服务器下载其他恶意工具、配置文件或更新自身。
upload.cgi: 木马通过此脚本上传从受害主机窃取的敏感数据(如文档、密码、键盘记录日志等)。
(2)文件系统操作:
C:\RaDa\bin\RaDa.exe: 这是木马将自身复制到的最终驻留路径,表明它具有高度的组织性,并非临时存在。
C:\RaDa\tmp\: 这个目录很可能用作临时工作区,用于存放下载的额外工具、待上传的窃取数据,或命令执行的中间结果。
(3)注册表操作:
启动项持久化 (HKLM...\Run\): 这是木马确保在系统重启后依然存活的核心持久化机制。通过将自身路径写入此注册表项,它获得了“开机自启”的能力。
虚拟机检测 (VMware Tools): 这是木马反分析和反沙箱的关键技术。通过查询VMware Tools的安装路径,木马可以判断自己是否运行在一个虚拟化环境中(分析人员常用虚拟机或沙箱来分析恶意软件)。如果检测到虚拟机,它可能会终止执行或展示无害行为,从而逃避自动化分析和人工分析。
(4)DDoS攻击:
"Starting DDoS Smurf remote attack...": 这明确表明该木马是僵尸网络(Botnet)的一个节点。攻击者可以同时指令成千上万台被感染的主机,对特定目标发起协同的Smurf攻击,利用流量放大效应,轻易耗尽目标的网络带宽,导致服务瘫痪。
(5)脚本和注册表操作代码:
Scripting.FileSystemObject (FSO):它为木马提供了强大的文件系统管理能力,可以创建、删除、移动、遍历文件和文件夹。
Wscript.Shell: 这是一个“瑞士军刀”对象,允许木马:
执行命令(
Run方法): 运行系统命令或其他程序。
操作注册表(RegWrite/Read/Delete): 进行除了自启动之外的更广泛配置修改(如修改文件关联、禁用安全软件等)。
访问系统环境变量。
InternetExplorer.Application: 木马可能会在后台自动化启动一个IE进程,用于:利用IE的组件发起更“合法”的HTTP请求、自动访问特定网页(如点击欺诈、SEO作弊)、利用IE的漏洞进行进一步的攻击。
2.3.2问题回答
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
从2.3.1中可以得到摘要的内容:caaa6985a43225a0b3add54f44a0d4c7
基本信息:是一个exe可执行文件,在Windows平台运行,是一个图形用户界面应用程序。
(2)找出并解释这个二进制文件的目的;
从以上分析可以看出这个文件是一个功能完整的远程控制木马,属于后门/僵尸网络类型的恶意软件。
(3)识别并说明这个二进制文件所具有的不同特性;
①持久化特性:恶意软件为了在系统重启后依然保持存活所采用的机制②载荷与攻击能力特性:进行了DDoS攻击。③命令与控制特性:恶意软件与攻击者服务器通信以接收指令和上传数据的能力。④反分析/反检测特性:用于阻碍安全研究人员和分析工具,延长自身在受害主机上的存活时间。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
这个文件使用了UPX加壳的技术,这个技术压缩原始代码,隐藏真实的程序结构和字符串,以此来逃避基于特征码的杀毒软件检测。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
这是一个后门程序,理由如下:由于这个文件并不具备感染机制,所以不是病毒,也没有进行传播所以不是蠕虫。这个文件在系统上创建一个未被授权的访问通道,允许攻击者绕过正常的安全控制机制,所以是后门程序。
(6)给出过去已有的具有相似功能的其他工具;
msfvenom和veil
(7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以调查出来,在前面的过程中就出现了疑似制作者的名称,但是需要特定工具的支持,例如IDA pro,另外还需要文件没有进行加密或者压缩处理,最后还需要制作者将自己的名称附上,不然就调查不出来了。
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
①基于特征码的检测:
通过提取RaDa.exe二进制文件中独特的字节序列作为指纹进行精准匹配,例如其UPX加壳后的入口点指令"60 BE"序列或硬编码字符串"I know the secret"的引用代码,该方法部署在防病毒软件和入侵检测系统中可实现高效扫描,但极易因代码修改或重新加壳而失效
②基于行为的检测:
聚焦程序运行时的恶意操作序列,通过监控注册表Run键修改、创建C:\RaDa\bin目录、并发起对RaDa_commands.html的HTTP请求这一系列关联动作,利用终端检测与响应(EDR)系统建立行为规则模型,能有效识别即使用混淆技术后的变种样本
③基于网络流量的检测:
通过分析恶意软件的通信特征,在网络边界部署深度包检测规则来捕捉对/RaDa/RaDa_commands.html的定期轮询请求或向/cgi-bin/upload.cgi上传数据的特定POST模式,结合非常规目标IP(如10.10.10.10)可提前发出入侵预警,但该方法对加密通信效果有限
④基于文件系统和注册表异常的检测:
通过实时监控系统关键路径的变更,针对RaDa特有的C:\RaDa\bin\目录创建和HKLM\Software\Microsoft\Windows\CurrentVersion\Run\RaDa注册表键值写入等行为配置Sysmon警报规则,实现低误报率的精准检测,不过攻击者通过修改路径即可轻松绕过
⑤基于内存分析的检测:
通过扫描进程内存中的恶意痕迹,包括识别RaDa.exe进程路径、在explorer.exe等合法进程中注入的含"RaDa_commands"字符串的异常内存区域,或挂钩RegSetValueEx等关键API调用的序列,使用Volatility等取证工具或EDR的实时内存保护功能,能够揭示最隐蔽的无文件攻击活动,尽管该方法对技术能力和系统性能要求较高。
2.4取证分析实践
2.4.1IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
①IRC(Internet Relay Chat)是一种应用于互联网的实时文本通信协议,诞生于1988年。它采用客户端-服务器架构,用户通过客户端连接到IRC网络中的服务器,并加入特定的频道进行群组聊天或进行私密对话。IRC网络由多个互联的服务器组成,形成一个统一的通信环境。
②申请加入IRC网络时发送的消息:NICK和USER(以及可选的PASS)。
申请加入特定聊天频道时发送的消息:JOIN。
③一般使用6667或者6697等。
6667:最传统、最常用的IRC服务端口。
6697:现代IRC网络通常使用此端口提供SSL/TLS加密连接。
2.4.2僵尸网络是什么?僵尸网络通常用于什么?
①僵尸网络是由攻击者通过一种或多种传播手段,将僵尸程序植入大量计算机,从而在控制者和被感染计算机之间形成的一个可一对多控制的网络。
②
- 分布式拒绝服务攻击:控制成千上万的僵尸计算机同时向目标服务器发送海量请求。
- 发送垃圾邮件与钓鱼邮件:利用僵尸网络的大规模IP资源发送垃圾邮件。
- 挖取加密货币:在受害计算机上秘密运行加密货币挖矿程序。
- 窃取敏感信息:银行凭证、个人身份信息、知识产权数据。
- 点击欺诈:模拟真实用户点击在线广告。
- 分布式计算:破解密码、进行大规模网络扫描、测试攻击工具。
- 出租服务:在黑客论坛上按时间租用僵尸网络资源。
2.4.3蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
将botnet_pcap_file.dat文件给wireshark分析之后,通过把过滤条件设置为ip.src == 172.16.134.191 and tcp.dstport == 6667,得到蜜罐主机与IP地址为209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.126.161.29的这些IRC服务器进行过通信。截图中可以体现出来。

2.4.4在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
首先我们需要下载tcpflower,输入命令apt-get install tcpflow就可以下载。

输入命令tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667",这个命令的作用是使用tcpflow(一个网络取证工具),从名为"botnet_pcap_file.dat"的pcap文件中读取数据(而不是实时捕获),并且只处理:IP地址为209.196.44.172和端口号为 6667 的流量。

找到输出的目录名下,可以看到已经出现了几个文件

使用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命令,这个命令的作用是通过一系列文本处理操作来统计僵尸网络中特定IRC频道内的独立机器人数量,从图中可以看出有3461个不同的主机访问了这一个僵尸网络。

2.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 > 20232417.txt;wc -l 20232417.txt
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191':读取pcap文件,过滤所有目标地址为172.16.134.191的数据包(-n不解析主机名,-nn不解析端口和服务名)
awk -F " " '{print $3}':以空格为分隔符,提取第3字段(源IP:端口)
cut -d '.' -f 1-4:以点号为分隔符,只保留IP地址部分(去掉端口号)
sort | uniq:排序并去重,得到唯一的源IP列表
more > 20232417.txt:将结果保存到文件
wc -l 20232417.txt:统计文件行数,即唯一的源IP数量

可以从截图中看到结果:一个有165个IP地址用于攻击蜜罐主机。165个IP地址已经列在20232417.txt文件中。



2.4.6攻击者尝试攻击了那些安全漏洞?
点击wireshark中的协议分级

可以从截图中看到TCP包占了绝大部分,其中UDP包占了一小部分。

输入命令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来提取并分析来自特定源主机的TCP SYN握手响应,统计目标端口分布情况。

从截图中可以看到响应的端口有135、139、25、445、4899、80。
135:RPC远程过程调用
139:NetBIOS/SMB
25:SMTP简单邮件传输协议
445:SMB,用于文件、打印机等的共享
4899:Radmin,用于远程控制
80:HTTP
在输入命令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统计源主机172.16.134.191在UDP通信中使用的所有不同目标端口号。可以看到响应的端口为137。

2.4.7哪些攻击成功了?是如何成功的
根据目标端口来一个个筛查。
135端口
在wireshark中输入筛选条件tcp.port == 135 &&ip.dst == 172.16.134.191

可以看到这仅仅表明建立了一个连接
139端口
在wireshark中输入筛选条件tcp.port == 139 &&ip.dst == 172.16.134.191

并没有什么不正常的地方
25端口
在wireshark中输入筛选条件tcp.port == 25 &&ip.dst == 172.16.134.191

也是仅仅建立了几个连接
445端口
在wireshark中输入筛选条件tcp.port == 445 &&ip.dst == 172.16.134.191

从截图中可以看见61.111.101.78向主机发送了PSEXESVC.EXE文件,PSEXESVC.EXE 是PsExec工具的服务组件,常被攻击者用于横向移动和远程执行。

从截图中可以看见PSEXESVC.EXE文件已经被删除,这是一个可疑行为。
4899端口
在wireshark中输入筛选条件tcp.port == 4899 &&ip.dst == 172.16.134.191

发现了大量的PSH包,结合典型攻击行为分析:攻击者命令→PSH包立即推送→僵尸主机执行→PSH包返回结果。说明攻击正在进行。
80端口
在wireshark中输入筛选条件tcp.port == 80 &&ip.dst == 172.16.134.191

可以看到出现了有大量包含一长串“c”的包,疑似数据渗出的编码形式。
137端口
在wireshark中输入筛选条件ip.addr==172.16.134.191 and udp.port==137

没有异常
经过以上分析,实现了攻击了的应该是4899和80端口。
3.问题及解决方案
- 问题1:当我运行RaDa_unpacked.exe后,在process explore中双击这个进程的时候,显示拒绝访问
- 问题1解决方案:当你运行RaDa_unpacked.exe的时候,弹出一个弹窗如下,不要关闭这个弹窗,然后在process explore中会出现一个新的RaDa_unpacked.exe进程,这个时候双击这个新的进程就可以打开了。
![image]()
4.学习感悟、思考等
通过本次实验,我深刻体会到理论与实践之间的巨大差异以及网络取证在网络安全中的基石作用:从一个个抽象的IP地址、端口号和协议标志里还原出攻击者的完整行动轨迹,这不仅让我对僵尸网络的工作机制、C&C通信的隐蔽技巧(如心跳包、数据编码)有了直观而深刻的认识,更锤炼了我使用专业工具进行系统性分析的实战能力;同时,此次经历也引发了我的深入思考——面对日益复杂的加密流量和伪装技术,单纯依赖特征匹配已不足以保证安全,必须结合异常行为分析、全流量记录与深度包检测才能构建有效的纵深防御体系。


浙公网安备 33010602011771号