20234320 2025-2026-1 《网络与系统攻防技术》实验四实验报告
1.实验内容
1.1 识别恶意代码的文件类型标识,进行脱壳与字符串提取。
1.2 使用IDA Pro静态或动态分析所给exe文件,找到输出成功信息的方法。
1.3 分析自制恶意代码样本并撰写报告。
1.4 取证分析实践。
2.实验目标
掌握恶意代码分析相关技术,包括脱壳、逆向工程、样本分类、行为分析等方法,撰写实验报告,提升识别恶意代码、分析网络攻击等解决安全问题的能力。
3.实验环境
基于VMware的Kali虚拟机,具体配置如下:

4.实验过程
4.1 恶意代码文件类型标识、脱壳与字符串提取
4.1.1 文件类型与加壳识别
首先对目标样本RaDa.exe进行基础分析,明确其文件属性与加壳情况:
在Kali虚拟机中执行file RaDa.exe命令,显示该文件为PE32 executable for Ms Windows 4.00(GUI),程序为32位Windows图形界面可执行程序。

在Windows主机中使用die工具分析加壳情况。检测到该文件采用UPX加壳技术,版本区间为0.94-1.93。

4.1.2 分析脱壳后的RaDa样本
使用“超级巡警之虚拟机自动脱壳器”对RaDa.exe进行脱壳:
点击脱壳,成功生成脱壳后的文件RaDa_unpacked.exe。

将生成的RaDa_unpacked.exe可执行文件拖入IDA Pro进行分析,选择PE Executable。

选择IDA ViewA,在地址为00403F7A处可以看到RaDa文件的作者信息,为Raul Siles && David Perez;在地址为00403FD4处可以看到RaDa文件的创作时间,为2004年9月。


4.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe
4.2.1分析文件crackme1.exe
在cmd中直接运行crackme1.exe,观察:
无参数输入:输出 “I think you are missing something.”
输入1个任意参数:输出 “Pardon? What did you say?”
输入2个及以上参数:输出 “I think you are missing something.”
初步认为程序需要特定格式的1个参数才能输出成功信息。

在IDA Pro中打开文件crackme1.exe,选择View→Graphs→Function calls,打开该文件的函数调用图。

函数调用图中,函数_main调用了如fprint、print、strcmp等函数,说明该函数可能读取用户输入与已有字符串作比较之后输出结果,因此_main函数中可能存在我们需要的参数信息

在function name窗口选择_main函数,双击打开该函数的流程图



从流程图中可以看到,该函数会将传入的参数(在这里是用户输入)与已知字符串”I know the secret"进行比较,尝试一下将参数改为这个字符串运行,如图所示:

参数正确,成功
4.2.2分析文件crackme2.exe
同crackme1.exe分析流程,将程序放入IDA pro,对main函数的执行流程进行分析

可以发现crackme2除了对“I know the secret”比较,还对输入的第一个参数进行了比较,要求其为“crackmeplease.exe”。说明我们需要将该文件的文件名修改为crackmeplease.exe再运行。

运行失败,这里不要在PowerShell下运行,因为PowerShell中运行需使用./crackmeplease.exe,这样会使得第一个参数匹配不通过而失败。
直接在cmd中运行,不添加./,如图所示

可以看到成功弹出了提示We have a little secret: Chocolate。
4.3 分析一个自制恶意代码样本rada
4.3.1 分析文件的基本信息
依次输入:
点击查看代码
file RaDa.exe #识别文件类型
md5sum RaDa.exe #计算文件的md5摘要值
exiftool RaDa.exe | grep "Time Stamp" #提取文件元数据并过滤时间戳信息
由返回信息可知:
该文件的MD5摘要为:caaa6985a43225a0b3add54f44a0d4c7
该程序的类型为PE32 executable for MS Windows 4.00 (GUI), Intel i386, 3 sections;
时间戳为2004:10:29 19:59:58-04:00

4.3.2 分析文件目的
使用IDA Pro分析脱壳后的RaDa_unpacked.exe文件,打开函数调用图,重点分析sub_404FB0函数,它包含大量子函数调用,推测为核心逻辑模块。

查看该函数的流程图

发现函数的通信模块存在一行命令,edx, offset aHttp10101010Ra ; "http://10.10.10.10/RaDa"

该行命令将地址http://10.10.10.10/RaDa加载到edx寄存器中,这说明IP地址10.10.10.10很可能是攻击者的命令控制服务器
后续调用字符串拼接函数,分别将四个字符串复制到内存中。RaDa_commands.html可能是攻击者用来下发指令的网页文件。cgi-bin可能是Web服务器上存放脚本的目录。download.cgi可能是用于下载新指令或恶意模块的脚本。upload.cgi可能是用于上传窃取数据的脚本。

下面还有创建C:\RaDa\tmp的命令,推测这个目录是存放临时恶意文件或窃取数据作为中转的地方。

最后一部分修改注册表路径"Software\Microsoft\Windows\CurrentVersion\Run"的逻辑,将自身添加为开机自启动项,确保系统重启后仍能运行。

综上,RaDa.exe是一个功能复杂的恶意程序,主要目的是入侵Windows系统后实现远程控制、持久化驻留,并具有发起DDoS攻击和深度系统操作的能力,属于远程访问后门类恶意软件。
尝试运行脱壳后的RaDa进程,发现超时,被阻止。

4.3.3识别并说明这个二进制文件所具有的不同特性
- 具有远程控制能力:通过HTTP协议与C&C服务器通信,支持上传、下载文件,并接收远程指令。
- 可修改注册表自启动项:HKLM\Software\Microsoft\Windows\CurrentVersion\Run\RaDa,确保系统重启后仍能运行。
- 动态动态创建工作目录:在本地创建目录(如C:\RaDa\tmp、C:\RaDa\bin),用于存储临时文件和恶意组件。
- 使用了UPX压缩壳,隐藏原始代码,逃避杀软。
4.3.4 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
该文件采用了UPX加壳技术,通过压缩原始代码和劫持入口点隐藏程序逻辑,增加静态分析难度,使直接提取原始功能逻辑和特征变得困难,需先脱壳才能进行有效逆向分析。
4.3.5 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
该程序未发现可以进行自我复制并通过各类方式传播感染其他计算机,而是持续性地与远程服务器进行连接建立通路,且支持文件上传下载、屏幕截取、注册表修改等远程操控功能,故我认为这个恶意代码样本是一个后门程序。
4.3.6 给出过去已有的具有相似功能的其他工具
msfvenom和veil等可以生成后门的工具
4.3.7 可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
可以,该二进制文件的开发者是Raul Siles && David Perez。
方法一:

逆向后直接找到对应的字符串
方法二:
在windows的命令提示符中,输入./RaDa.exe --authors查看作者。

4.3.8 给出至少5种检测该恶意软件的方法
- 基于签名/特征的检测
通过相应的杀软工具检测RaDa.exe的哈希值、特定的代码序列、字符串等,将扫描的特征与病毒特征库进行比对,速度快、资源占用少,对已知威胁准确率高。 - 沙箱动态检测
将样本放入Any.run, Hybrid Analysis, Cuckoo Sandbox等隔离沙箱环境中运行,记录其注册表操作、网络连接等行为,重点检测是否存在修改注册表自启动项、创建“C:\RaDa”系列目录、发起可疑IP连接等行为,当异常行为触发时,判定为恶意软件,自动生成行为报告。 - 网络流量分析
使用入侵检测/防御系统基于规则检测恶意流量,或是使用Wireshark等网络流量分析工具进行抓包和手动分析。重点分析出站和入站的网络流量,寻找可疑模式,例如软件尝试连接大量随机域名、与已知恶意IP/域名的通信、 在非标准端口上使用HTTP/HTTPS、大量的DNS查询等 - 启发式检测:
基于恶意代码共性特征构建检测规则,若程序同时满足“UPX加壳+修改系统关键注册表+发起非标准端口通信”等条件,即使未匹配到具体特征码,也判定为高风险恶意软件。 - 基于日志分析的检测
收集和分析系统运行过程中产生的各类日志(例如系统日志、网络日志、文件操作日志等),挖掘日志中与RaDa.exe恶意行为相关的异常记录,可清晰识别RaDa.exe的恶意行为链路,该方法具备强可追溯性和抗加壳能力。
4.4 取证分析实践
4.4.1 IRC
- IRC是什么?
IRC是Internet Relay Chat的缩写,是一种基于文本的实时互联网通信协议。它采用客户端—服务器架构,主要用于群体(聊天室,也称为“频道”)和一对一的实时文本通信。 - 当IRC客户端申请加入一个IRC网络时将发送哪个消息
当IRC客户端申请加入一个IRC网络时,会发送NICK和USER命令。
NIC命令用于设置用户在IRC网络中的昵称
USER命令用于提供用户的身份信息,包括用户名、主机名等 - IRC一般使用那些TCP端口
6667:传统的默认端口,使用最广泛的无加密连接端口
6697:SSL/TLS 加密,现代推荐的首选端口,用于安全的加密连接
7000:SSL/TLS 加密,另一个非常常见的加密端口
6660-6669:传统非加密端口范围,6667 是其中的代表
4.4.2 僵尸网络
- 僵尸网络是什么?
僵尸网络是由大量被恶意软件感染并受黑客远程控制的互联网设备组成的网络。其核心特点是其集中控制和分布式执行的能力。 - 僵尸网络通常用于什么?
僵尸网络可用于DDoS攻击、发送垃圾邮件、加密货币挖矿、充当网络跳板、点击欺诈等。
4.4.3 蜜罐主机
问题:蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通信?
在Wireshark中打开botnet_pcap_file.dat文件,通过ip.src==172.16.134.191 and tcp.dstport==6667,筛选源IP为172.16.134.191,目的端口为6667的tcp数据包。

分析可知,蜜罐主机与4台IRC服务器进行通信,IP分别是209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10。
4.4.4 僵尸网络
问题:在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?在kali中,使用命令sudo apt install tcpflow安装tcpflow(用于捕获和分析TCP网络流量)
再把文件botnet_pcap_file.dat放入kali,使用命令tcpflow -r botnet_pcap_file.dat 'host 209.196.44.172 and port 6667',从文件中过滤出与IP(209.196.44.172)和端口6667相关的流量,结果输出为xml文件

然后使用命令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频道中的僵尸主机数量
点击查看代码
1. cat 209.196.044.172.06667-172.016.134.191.01152
读取一个网络连接日志文件(文件名看起来像是IP地址和端口号)
2. grep --text "^:irc5.aol.com 353"
过滤出AOL IRC服务器发送的353响应(RPL_NAMREPLY)
353响应包含频道中的用户列表
--text 确保即使文件包含二进制数据也按文本处理
3. sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g"
删除响应前缀,只保留用户名列表
移除类似 :irc5.aol.com 353 rgdiuggac @ #x{频道名}x : 的部分
4. tr ' ' '\n'
将空格替换为换行符,使每个用户名单独一行
5. tr -d "\15"
删除回车符(\r,ASCII 15),处理Windows风格的换行符
6. grep -v "^$"
移除空行
7. sort -u
排序并去重,只保留唯一的用户名
8. wc -l
统计行数,即唯一用户名的数量

发现有3461个主机访问过该僵尸网络
4.4.5 哪些IP地址被用于攻击蜜罐主机
在kali虚机中,通过命令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 > ipaddr.txt;wc -l ipaddr.txt统计所有与蜜罐主机172.16.134.191通信的外部ip地址数量。

打开ipaddr.txt查看

共有165个ip地址
4.4.6 攻击者尝试攻击了那些安全漏洞?
在wireshark中打开botnet_pcap_file.dat文件,选择点统计→协议分级,分析网络流量中各种协议的分布情况和层次结构。

从分析结果中可以看出,攻击者大部分使用了TCP数据包(占比约99.7%),也有使用少量的UDP数据包(占比约0.3%)
在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筛选主机172.16.134.191发起的所有TCP连接的源端口号

使用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数据包的源端口号

对于TCP的分析结果可知,使用的端口有135(RPC,Windows远程过程调用)、139/445(SMB,Windows文件共享)、25(SMTP,简单邮件传输协议)、4899(Remote Administrator,远程控制软件)、80(HTTP,网页服务);对于UDP的分析结果可知,使用的端口为137(NetBIOS,Windows网络邻居功能)。
故可能进行的攻击有:
- 端口135-RPC(远程过程调用):远程代码执行(RCE)漏洞、拒绝服务攻击(DoS)
- 端口139&445-SMB(服务器消息块):远程代码执行(RCE)漏洞、权限提升、中继攻击、暴力破解/密码喷射、拒绝服务攻击(DoS)
- 端口25-SMTP(简单邮件传输协议):开放中继、用户枚举、SMTP服务软件漏洞
- 端口4899-Remote Administrator:弱口令、缓冲区溢出漏洞、明文传输
- 端口80(HTTP - 超文本传输协议):Web应用攻击(SQL注入、XSS、CSRF等)、目录遍历、HTTP慢速攻击、HTTP洪水攻击、HTTP方法滥用
- 端口137-NetBIOS名称服务:缓存投毒
4.4.7 哪些攻击成功了?是如何成功的?
(1)TCP连接135端口
使用ip.addr==172.16.134.191 and tcp.port==135过滤

失败,只有三次握手的数据包,而没有后续的恶意数据包,
(2)TCP连接139端口
使用ip.addr==172.16.134.191 and tcp.port==139过滤

失败,攻击者尝试访问共享目录\PC0191\c,但服务器返回RST拒绝访问,后续也没有恶意数据包。
(3)TCP连接25端口
使用ip.addr==172.16.134.191 and tcp.port==25过滤

失败,三次握手成功后没有后续恶意数据包
(4)TCP连接445端口
使用ip.addr==172.16.134.191 and tcp.port==445过滤


成功,外部主机195.36.247.77向172.16.134.191:445发起TCP三次握手,进行了NTLMSSP认证协商且通过认证,发起Tree Connect请求以访问共享资源。多个源IP向目标172.16.134.191:445发起大量SMB请求,其中包含了重复的NTLMSSP认证、Tree Connect到不同路径以及大量的SAMR/DCE/RPC操作,尝试枚举蜜罐所在域的账号和域名信息。攻击者还通过445端口的SMB协议,成功删除了目标主机172.16.134.191上路径为C:\System32\PSEXESVC.EXE的文件,PSEXESVC.EXE是Psexec工具的服务端组件,常用于远程命令执行,达到了破坏目的。
(5)TCP连接4899端口
使用ip.addr==172.16.134.191 and tcp.port==4899过滤

成功。根据上图中数据可知,攻击者与蜜罐主机成功建立了TCP连接,且攻击者发送了“HEAD /cgi/../../../../winnt/system32/cmd.exe?...”的HTTP请求,试图通过构造特殊路径访问cmd.exe(cmd.exe是Windows命令行工具,可用于执行任意系统命令),这是典型的目录遍历攻击,然后该HTTP请求被蜜罐响应,所以攻击者在tcp的4899端口成功了进行攻击。
(6)TCP连接80端口
使用ip.addr==172.16.134.191 and tcp.port==80过滤

成功。210.22.204.101向蜜罐发起“GET /NULL.IDA?CCCCCCCC...”请求,这是针对IIS漏洞的经典攻击payload,属于僵尸网络常见的Web攻击手段,且后续中蜜罐主机并没有对其发送[RST]数据包终止,说明该攻击很有可能成功了。
在第二张图中可以看到,207.172.16.150与蜜罐完成三次握手后,发起了大量包含[PSH, ACK]、[TCP Previous segment not captured]、[TCP Out-Of-Order]的HTTP数据交互,这符合僵尸网络“通过HTTP信道传输恶意载荷、维持C&C连接或执行命令”的行为逻辑,且后续中蜜罐主机并没有对其发送[RST]数据包终止,说明该攻击很有可能成功了。
(7)UDP连接137端口
使用ip.addr==172.16.134.191 and udp.port==137过滤

所有流量都显示为一个固定的模式,攻击者发送Name query NBSTAT *,蜜罐回复Name query response NBSTAT。NBSTAT查询是一种通过NetBIOS名称服务获取远程主机网络信息的请求,它要求对方返回其NetBIOS名称表和其他详细信息。包中未包含攻击载荷,故可以判断,攻击者是在进行“信息侦察”,攻击未成功。、
5.问题及解决
问题:在powershell中运行改名后的crackmeplease.exe失败
问题解决方案:改成使用cmd运行,并且不使用"./",避免了第一个参数不同
6.学习感悟与思考
AI好,要善用AI,本次实验我认为难点在于通过分析抓包分析可能成功的攻击,一开始我人工看包,一方面有些异常的包看不出来,一方面信息量太大,即使结合了过滤、统计信息、颜色分类也很难看完,用上AI后,能够快速定位异常包的位置,从而进一步深入分析可能发生的攻击行为。
在分析RaDa恶意样本时,我系统性地探究了其远程控制、持久化驻留等恶意行为,理解了后门程序的工作原理。本次分析的样本逻辑较为简短,且没有进行混淆,可以直接通过查找关键的字符串拿到key,同时我也感慨,新版的IDA pro就是好用!