1.实验内容
一、恶意代码文件类型标识、脱壳与字符串提取
二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
三、分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
四、取证分析实践
2.实验过程
一、恶意代码文件类型标识、脱壳与字符串提取
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
在Kali虚拟机中使用file RaDa.exe命令分析目标文件的类型和结构

结果表明RaDa.exe是一个32位Windows GUI可执行文件,是一个带有图形用户界面的应用程序。它是针对Intel x86处理器设计的,内部包含3个段。
接着,在Windows主机中使用软件PEiD对目标文件进行分析

结果表明,该文件使用了UPX加壳,且Markus & Laszlo是该UPX的开发者
(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理


(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁
使用IDA Pro分析我们脱壳后的RaDa_unpacked.exe,查看IDA View-A,在地址为00403F7A处可以知道RaDa文件的作者信息,为Raul Siles&&David Perez;在地址为00403FD4处可以看到RaDa文件的创作时间,为2004年9月

二、使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
(1)crackme1.exe
在Windows主机的PowerShell中运行此文件,简单输入几个参数

可以看到发现当输入额外的参数不唯一时,文件给出提示“I think you are missing something.”,当输入1个参数时,文件提示“Pardon? What did you say?”
可以推测,该文件需要我们输入一个正确的参数
在IDA Pro中打开文件crackme1.exe,选择View→Graphs→Function calls,打开该文件的函数调用图

在函数调用图中,发现函数sub_401280会调用strcmp用于字符串比较的库函数以及fprintf、printf等涉及IO的库函数,说明sub_401280函数可能会对接收的参数进行比较判断,并输出相应语句

打开函数管理工具,在函数管理窗口中,双击需分析的函数sub_401280,打开该函数的流程图


从函数流程图中分析可知,输入的参数不为2时,该程序将给出输出“I think you are missing something.”。当程序得到两个输入时,如果第二个输入为“I know the secret”,则程序给出输出“You know how to speak to programs, Mr. Reverse-Engineer”;否则输出“Pardon? What did you say?”。因此,我们需要输入的第二个参数为字符串“I know the secret”
在Windows主机的PowerShell中再次运行此文件,输入额外参数“I know the secret”

(2)crackme2.exe
在Windows主机的PowerShell中运行此文件,发现返回情况大体与crackme1.exe相似.但输入额外参数为“I know the secret”时,仍然无法验证通过,说明还需寻找适合文件二的正确参数

我们查看函数调用图,发现函数sub_401280会调用strcmp、fprintf、puts、putchar等可疑的库函数,说明sub_401280函数可能仍是对接收的参数进行比较判断的函数

在IDA Pro中找到函数管理窗口,双击需分析的函数sub_401280查看详细情况:

可以看到,除crackme1所具有的比较内容外,crackme2还对输入的第一个参数进行了比较,要求其为“crackmeplease.exe”
所以我们需要将该文件的文件名修改为crackmeplease.exe再运行即可。

三、分析一个自制恶意代码样本rada,并撰写报告,回答以下问题
(1)分析文件的基本信息
在kali中输入以下命令获取基本信息,包括运行平台、md5校验和以及时间戳
file RaDa.exe
md5sum RaDa.exe
exiftool RaDa.exe | grep "Time Stamp"

从返回值中可以看出RaDa.exe是一个32位Windows GUI程序,其md5摘要值为caaa6985a43225a0b3add54f44a0d4c7,且在2004年10月30日编译的
(2)找出并解释这个二进制文件的目的
在IDA Pro中分析脱壳后的RaDa文件。打开函数调用图,发现函数sub_404FB0下有很多的子函数,可以分析该函数的流程图以获取更多信息

命令mov edx, offset aHttp10_10_10_1;"http://10.10.10.10/RaDa",是将地址http://10.10.10.10/RaDa 加载到edx寄存器。而IP地址10.10.10.10很可能是攻击者的命令控制服务器。后续所有的下载指令、上传数据都会与这个服务器通信

对于四条命令
mov edx, offset aRada_commands_ ; "RaDa_commands.html"
mov edx, offset aCgiBin ; "cgi-bin"
mov edx, offset aDownload_cgi ; "download.cgi"
mov edx, offset aUpload_cgi ; "upload.cgi"
它们连续调用了字符串拼接函数,分别将四个字符串复制到内存中。其中RaDa_commands.html可能是攻击者用来下发指令的网页文件。cgi-bin可能是Web服务器上存放脚本的通用目录。download.cgi可能是用于下载新指令或恶意模块的脚本。upload.cgi可能是用于上传窃取数据的脚本。使得这个恶意文件具备了接收命令与回传数据的双向通信能力

命令mov edx, offset aCRadaTmp ; "C:\\RaDa\\tmp"表示恶意软件在C盘根目录下创建一个名为RaDa的文件夹,并在其中创建一个名为tmp的子文件夹,存放下载的临时文件或窃取的数据

命令offset aSoftwareMicros ; "Software\\Microsoft\\Windows\\CurrentVersion",表示该文件通过HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run修改注册表路径,将自身添加为开机自启动项,确保每次开机自动运行

命令mov edx, offset aCRadaBin ; "C:\\RaDa\\bin",是将"C:\RaDa\bin"复制到内存。随后连续调用两次字符串拼接函数,得到完整的可执行文件路径“C:\RaDa\bin\RaDa.exe”。这个路径将被用于保存自身的文件,并完成开机自启动配置

(3)回答问题
问题1:提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
问题1回答:它的md5摘要为caaa6985a43225a0b3add54f44a0d4c7。其他的基本信息包括:RaDa.exe是一个32位Windows GUI可执行文件,是一个带有图形用户界面的应用程序。它是针对Intel x86处理器设计的,内部包含3个段。
问题2:找出并解释这个二进制文件的目的
问题2回答:这个程序是一个为了维持远程持久控制而制作的后门程序。它会开机自启动,同时有窃取数据、下载新的恶意指令等功能。
问题3:识别并说明这个二进制文件所具有的不同特性
问题3回答:这个二进制文件被运行之后会在目的主机上创建文件夹,并将自己加入自启动项,然后会通过访问指定的地址在目的主机上上传或者是下载一些文件及数据,并且可以在目的主机上执行其他的指令对目的主机进行操控。
问题4:识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
问题4回答:该文件采用了UPX加壳技术,它通过压缩原始代码和劫持入口点隐藏程序逻辑
问题5:对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
问题5回答:属于一个远程控制软件(后门程序)。这个程序不能进行自我复制和自我传播,所以肯定不是病毒或者是蠕虫程序,但是这个程序可以通过在目的主机上执行来获取目的主机的Shell,所以猜测这个程序很有可能就是后门程序、木马程序或者是僵尸程序
问题6:给出过去已有的具有相似功能的其他工具
问题6回答:灰鸽子
问题7:可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
问题7回答:可以,该二进制文件的开发者是Raul Siles && David Perez。在IDA Pro中可以找到开发作者的信息。能够获取该信息需要作者在创作时就留下此类信息,同时该文件还需要以明文的形式展示(若加壳则需脱壳),此外还需要有一些专门的分析工具,比如此处的IDA Pro
问题8:给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法
问题8回答:
- 基于特征码的检测方法
- 原理:提取已知恶意软件的唯一特征,如特定的文件哈希值(MD5、SHA256)、关键代码片段、特定字符串(如恶意指令、配置信息),将这些特征存入特征库。检测时,扫描目标文件并与特征库比对,若匹配则判定为恶意。
- 优势:技术成熟、检测速度快、误报率极低,对已知恶意软件的识别准确率接近 100%。
- 劣势:无法检测未知恶意软件(零日攻击),且恶意软件可通过加壳、混淆、修改代码等方式改变特征,绕过检测。
- 应用场景:杀毒软件的基础检测模块、企业终端常规扫描。
- 基于行为的检测方法
- 原理:预先定义 “正常行为基线”(如程序正常的文件操作、网络连接、注册表修改范围),检测时实时监控目标程序的动态行为,若出现超出基线的操作(如擅自修改系统关键文件、静默创建后门进程、向陌生 IP 发送大量数据),则触发警报。
- 关键监控维度:
进程行为:如注入其他进程、创建悬浮进程、修改进程权限。
文件操作:如删除系统日志、加密用户文件(勒索软件典型行为)、篡改可执行文件。
网络行为:如建立可疑 TCP/UDP 连接、使用非标准端口通信、传输加密数据且无合理解释。
系统交互:如修改注册表启动项、禁用安全软件服务、获取敏感权限(如管理员权限)。 - 优势:可检测未知恶意软件,不受代码混淆、加壳等伪装手段影响。
- 劣势:对 “正常行为基线” 的定义要求高,可能因基线过严导致误报(如合法程序的特殊操作被判定为恶意),且需要持续监控,对系统资源有一定占用。
- 应用场景:终端检测与响应(EDR)工具、沙箱动态分析、服务器安全监控。
- 基于启发式的检测方法
- 原理:不依赖具体特征或实时行为,而是分析程序的静态结构(如代码逻辑、功能模块),并基于安全专家总结的 “恶意特征规则” 进行推理。例如,若一个程序包含 “自我复制代码 + 修改其他文件的逻辑 + 隐藏自身进程的模块”,即使没有匹配的特征码,也会被判定为高风险(可能是新病毒或蠕虫)。
- 常见启发式规则:
代码层面:包含加密 / 解密模块但无合理用途(如非压缩软件却有强加密代码)、存在直接操作内存的底层指令。
功能层面:程序体积极小但包含复杂的系统调用、无需用户交互即可自动运行并修改系统设置。
结构层面:文件格式异常(如伪装成文档的可执行文件)、代码段与数据段混淆。 - 优势:可提前识别未知恶意软件的变种,弥补特征码检测的盲区。
- 劣势:启发式规则的准确性依赖专家经验,规则过松可能漏报,过严则容易误报(如某些正常的工具软件可能触发规则)。
- 应用场景:杀毒软件的 “深度扫描” 模式、未知威胁预警系统。
- 基于机器学习的检测方法
- 原理:分为 “训练” 和 “检测” 两个阶段。
训练阶段:收集海量标注数据(包括恶意软件样本和正常软件样本),提取数据的特征(如静态的文件结构特征、动态的 API 调用序列特征),使用算法(如决策树、支持向量机、神经网络)训练检测模型,让模型学会区分 “恶意” 和 “正常”。
检测阶段:将待检测文件的特征输入训练好的模型,模型输出 “恶意概率” 或 “分类结果”,以此判断文件是否为恶意软件。 - 常见特征类型:
静态特征:文件大小、PE 文件头信息、导入的 API 函数列表、字符串熵值(恶意软件通常熵值更高,因包含加密代码)。
动态特征:API 调用次数、进程创建数量、网络连接频率等行为统计数据。 - 优势:能自动学习新的恶意模式,适应恶意软件的快速变异,检测效率高,可处理海量数据。
- 劣势:依赖高质量的标注样本(样本不足或标注错误会影响模型 accuracy),模型可能被 “对抗样本”(恶意软件通过微调特征欺骗模型)绕过,且对普通用户而言 “黑箱性” 强,难以解释检测结果。
- 应用场景:云安全检测平台(如邮件网关、Web 应用防火墙)、大规模终端安全管理系统。
- 基于沙箱的检测方法
- 原理:
环境搭建:创建与真实系统相似但隔离的虚拟环境(如虚拟机、容器),屏蔽与真实硬件、网络的直接交互(如限制对外网络连接、禁止修改真实系统文件)。
样本执行:将待检测的可疑程序放入沙箱,模拟用户正常操作(如双击运行、打开文档),让程序充分执行。
行为捕获:记录程序在沙箱内的所有行为,包括文件创建 / 修改、注册表操作、进程活动、网络请求、内存操作等,并生成详细的行为报告。
恶意判定:根据行为报告,结合预设规则(如是否出现加密文件、创建后门、窃取敏感信息)或机器学习模型,判断程序是否为恶意软件。 - 优势:可安全地分析未知恶意软件,避免其对真实系统造成破坏;能捕获程序的完整行为,减少 “表面无害、后台作恶” 的漏报情况。
- 劣势:检测耗时较长(需等待程序充分执行,通常需要几分钟到几十分钟),资源占用高(每个沙箱需独立分配计算资源),可能被 “沙箱检测技术” 绕过(恶意软件通过检测虚拟环境特征,发现处于沙箱时不执行恶意行为)。
- 应用场景:可疑文件深度分析(如邮件附件、下载的未知文件)、零日恶意软件样本取证、安全研究机构的恶意软件分析。
四、取证分析实践
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
- IRC(Internet Relay Chat)是一种基于文本的实时通信协议,允许用户通过服务器连接形成的网络进行群聊或私聊。
- 客户端申请加入IRC网络时发送的核心消息是 NICK(设置昵称)和 USER(设置用户信息)。
- 常用TCP端口:默认未加密端口 6667,加密(SSL/TLS)端口 6697,部分服务器也使用6660-6669等端口范围。
(2)僵尸网络是什么?僵尸网络通常用于什么?
- 僵尸网络是由攻击者通过恶意软件控制的大量受感染设备(如电脑、手机)组成的远程操控网络,这些设备被称为“僵尸机”。
- 僵尸网络通常用于三类活动:
- 发起网络攻击,如分布式拒绝服务(DDoS)攻击,瘫痪目标服务器。
- 进行恶意活动,如发送垃圾邮件、传播恶意软件、窃取用户敏感信息(账号、密码)。
- 利用资源牟利,如占用僵尸机算力进行非法挖矿,或出租网络资源给其他攻击者。
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
- 蜜罐主机与IP地址为209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10的IRC服务器进行了通信
在Wireshark中打开botnet_pcap_file.dat文件,通过命令ip.src172.16.134.191 and tcp.dstport6667,筛选源IP为172.16.134.191,目的端口为6667的数据包

经过图可知,蜜罐主机与4台IRC服务器进行通信,IRC服务器的IP分别是209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10
(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
- 有3461个不同的主机访问了这一僵尸网络
通过命令tcpflow -r botnet_pcap_file.dat “host 209.196.44.172 and port 6667”。使用tcpflow,从botnet_pcap_file.dat文件中,筛选出与IP为209.196.44.172且端口为6667的主机相关的所有TCP流量数据

执行后,tcpflow会生成report.xml报告文件,包含了TCP流量的统计信息。此外还会生成独立的TCP连接流文件
在僵尸网络场景中,受感染的主机会主动去连接服务器。因此,此处需要查找源IP为209.196.44.172的文件,使用命令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,精确统计访问僵尸网络服务器的不同客户端数量

从返回数据可知,共有3461台不同的主机访问了以209.196.44.172为服务器的僵尸网络
(5)哪些IP地址被用于攻击蜜罐主机?
- 共有165个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 > 20232407.txt;wc -l 20232407.txt
查看输出的20232407.txt文件,即可查看详细数据,可以看到共有165个IP地址被用于攻击蜜罐主机。


(6)攻击者尝试攻击了那些安全漏洞?
在Wireshark中打开将botnet_pcap_file.dat文件,选择统计-->协议分级统计,分析网络流量中各种协议的分布情况和层次结构

可以看到攻击者大部分使用了TCP数据包(占比约99.7%),也有使用少量的UDP数据包(占比约0.3%)
输入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网络邻居功能)
(7)那些攻击成功了?是如何成功的?
- TCP连接的445端口、4899端口、80端口成功了
1.TCP连接135端口
输入ip.addr==172.16.134.191 and tcp.port==135

经分析可知,对于TCP连接的135端口,只有三次握手的数据包,而没有后续的恶意数据包,且客户端很快发送FIN请求断开连接。因此135端口虽被成功连接,但未被成功利用
2.TCP连接139端口
输入ip.addr==172.16.134.191 and tcp.port==139

139端口建立了完整的三次握手,且攻击者尝试访问共享目录\PC0191\c,但服务器返回RST拒绝。通过观察发现后续也没有恶意数据包的传输。所以可以判断139端口未被利用。
3.TCP连接25端口
输入ip.addr==172.16.134.191 and tcp.port==25

经分析可知,对于TCP连接的25端口,具有三次握手的数据包。但接建立后,没有后续的恶意数据包,且服务器很快发送FIN,ACK请求断开连接。因此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是Windows系统中PsExec工具用于远程执行命令的服务端组件,删除该文件会导致PsExec无法正常工作,可能是攻击者为清除痕迹或阻止后续检测而采取的行动。
说明TCP连接的445端口,已被攻击者成功利用。
5.TCP连接4899端口
输入ip.addr==172.16.134.191 and tcp.port==4899

外部主机向172.16.134.191:4899发起TCP三次握手,随后发送了大量rbakcupl > radmin-port [PSH,ACK]数据包,表示攻击者通过4899端口持续传输数据。而PSH表示“紧急需要立即处理的数据”,说明攻击者已建立稳定的通信通道

最后,攻击者通过HTTP请求,发送目录遍历攻击HEAD /cgi/../../../../../winnt/system32/cmd.exe?/c+dir

说明TCP连接的4899端口,已被攻击者成功利用。
6.TCP连接80端口
输入ip.addr==172.16.134.191 and tcp.port==80

在正常的TCP三次握手后,攻击者向80端口发送了由大量字符“c”组成的数据包,这是一个缓冲区溢出的攻击载荷。且在攻击包发送后,服务器没有返回任何RST或ICMP错误信息,说明服务器接收并处理了这个恶意请求。同时,在攻击之后,客户端和服务器之间还有正常的HTTP通信,虽然此次攻击没有导致服务崩溃,但攻击者可能已在服务器中植入后门或维持了访问权限,使得服务器被控制。

说明对于TCP连接的80端口,已被攻击者成功利用
7.UDP连接137端口
输入ip.addr==172.16.134.191 and udp.port==137

经分析可知,对于UDP连接的137端口,虽然具有大量的NetBIOS服务扫描活动,但数据包内容均为正常的名称查询与响应,未包含任何攻击载荷,应当未被攻击者成功利用。
3.问题及解决方案
- 问题1:我的电脑(Win11)无法下载学习通提供的IDA Pro
- 问题1解决方案:以管理员身份运行即可
4.学习感悟、思考等
通过本次实验,主要是对于恶意代码的认识上升了一个等次。本次实验涉及到了后门程序、木马程序、僵尸网络、蠕虫病毒等一系列恶意代码程序,可以说是为我之后的学习打下了良好的基础。但是在本次实验中也暴露出了对于恶意代码分析所需要使用的各种工具的不熟练,在各个工具进行操作的时候,可能会出现找不到功能,或者是看不懂页面等等一系列的问题,但是最后都通过自己的努力进行了解决。总的来说,我对于各种恶意代码之间的分别以及如何识别不同的恶意代码都有了很深的体会,现在如果给我一个恶意的软件或者是程序,我也能按照一定的方法对其进行分析,虽然没有特别的深入,但是基本的信息也是都能获得到,对于其目的、特性等等的掌握也都有所心得。