一.实验内容
- 恶意代码的文件类型识别,脱壳与字符串提取。
- 使用IDA Pro静态或动态分析所给exe文件,找到输出成功信息的方法。
- 分析自制恶意代码样本并撰写报告。
- 取证分析实践。
二.实验目的
- 掌握恶意代码的分析技术,像逆向分析,文件类型识别,取证分析和网络安全威胁识别等等。
三.实验环境
- Kali Liunx虚拟机
![image]()
- Windows 11主机
四.实验过程与分析
1.使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具
- file命令:file RaDa.exe 对目标文件进行分析
![866fc44d3700d8a25d4039d3b4f5148c]()
结果显示这是一个针对x86设计的基于32位Windows系统的可执行程序,采用经典的PE格式,内部包含三个节区。
*通过strings查看内部数据
![51263a6c0de3795f7004514352824113]()
结果都为乱码,因为该文件被加壳 - 将文件传入主机,使用peid工具对其分析。
![ba978717debd41663c5809e362eab297]()
可以看到该文件的入口点、文件偏移、EP段,作者等信息。
2.使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
- 对目标文件进行脱壳处理,得到RaDa_unpacked.exe
![f0e26cae2a52ee1097f0f2abd6b5fcdb]()
- 打开IDE pro,选择PE Executable
![39e165384f07cfd54b96dfb0bcaaa7b9]()
- 导入脱壳后的文件,选择IDA ViewA,得到下图
![f88ef6c6c1796da88b9dd58fa4c35fa6]()
![c90819ee8ce2be41f9c69d659f1a96ed]()
可以看到 00403F7A 地址处为RaDa的作者信息,是Raul Siles && David Perez;00403FD4地址处为RaDa的创建时间,是2004年9月。
3.分析crackme1.exe
- 在主机PowerShell里运行该文件
![dfe4c0bd69d7751aa111ed55b51f2e08]()
发现当不输入参数时,程序输出“I think you are missing something.”
当输入1时,程序输出“Pardon? What did you say?”
当输入1 2时,程序输出“I think you are missing something.” - 在IDA Pro中打开文件crackme1.exe,选择View→Graphs→Function calls,打开该文件的函数调用图
![4628b9177856661d34add58eeddf19ca]()
函数调用图中,函数sub_401280调用了很多用于字符串输入输出的函数,因此sub_401280函数中可能有我们要的信息 - 选择Windows→Functions,打开函数管理工具
![fd5a2eecfa8e54cd5e395dd5052a26f4]()
- 在函数管理窗口中,找到函数sub_401280
![bc411e942862ae0bb43b0b216f1a051c]()
观察函数流程图可知,输入的参数不为2时,该程序将给出输出“I think you are missing something.”。当输入两个参数时,如果第二个输入为“I know the secret”,则程序给出输出“You know how to speak to programs, Mr. Reverse-Engineer” - 按照分析运行文件
![e0386a147ad51a645512a254b9352e3c]()
4.分析crackme2.exe
- 在主机PowerShell里运行该文件
![5f0ec924132003abb8c2de6e4f4a5dcc]()
结果说明我们还需要去寻找crackme2.exe的正确参数 - 打开函数调用图,分析函数sub_401280可能是我们要找的函数
![c88026029efae4107ad07fa92c21aade]()
- 打开函数流程图
![3ec47bf58dc0a42f23692d30e7d6ec2f]()
分析说明我们需要将该文件的文件名修改为crackmeplease.exe再运行 - 按照分析运行文件
![ac6d9594690d4ee6baf28abd608a922f]()
5.分析恶意代码样本RaDa
- 输入以下命令对RaDa进行分析
file RaDa.exe #识别文件类型
md5sum RaDa.exe #计算文件的md5摘要值
exiftool RaDa.exe | grep "Time Stamp" #提取文件元数据并过滤时间戳信息

由结果可知:
文件类型:32位Windows GUI程序,针对X86,有三个字段
md5摘要值:caaa6985a43225a0b3add54f44a0d4c7
时间戳信息:2004:10:30 07:59:58+08:00
- 将脱壳后的文件放入IDA pro中,分析后打开函数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”
- 运行该程序
![892676b9866cc7de2af36e20b122bba3]()
显示超时
6.问题回答
-
问题一:提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
回答:摘要为caaa6985a43225a0b3add54f44a0d4c7。其他信息有:它是32位Windows GUI程序,针对X86,包含三个字段 -
问题二:找出并解释这个二进制文件的目的
回答:它创建相应文件夹存放窃取的数据,将自身设置为开机自启动,之后连接远程服务器执行恶意指令,所以我认为这是一个后门文件 -
问题三:识别并说明这个二进制文件所具有的不同特性
回答:它可以和远程服务器连接执行恶意操作、可以开机自启动、可以进行DDos攻击 -
问题四:识别并解释这个二进制文件中所采用防止被分析或逆向工程的技术
回答:它运用了UPX加壳技术 -
问题五:对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
回答:这是一个后门程序,因为它通过建立一个隐蔽的通道连接攻击者的服务器来进行攻击 -
问题六:给出过去已有的具有相似功能的其他工具
回答:msfvenom和veil -
问题七:可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
回答:可以,作者为Raul Siles && David Perez。脱壳后在IDA中或者使用strings命令都可以查看到作者信息 -
问题八:给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法
回答:
1.基于特征码的检测方法:当杀毒软件对文件、内存、网络数据包进行扫描时,它会逐字节地读取数据。扫描引擎将读取到的数据与本地存储的“特征库”中的每一个特征码进行比对。一旦发现某段数据与特征库中的某个特征码完全匹配,杀毒软件就会立即报警,提示发现特定病毒,并采取隔离、删除等行动。
2.基于行为的检测方法:当一个程序开始运行时,检测系统会启动全方位的监控,记录其在系统中的一举一动。将采集到的行为数据与内置的恶意行为规则库或机器学习模型进行比对。一旦程序的行为触发了足够的恶意“指示器”或严重偏离了正常基线,系统就会判定其为恶意软件,并立即采取行动。
3.基于启发式的检测方法:扫描引擎会像语法分析器一样,反汇编或解析可疑文件的二进制代码。它不会寻找完整的匹配,而是寻找一系列“可疑的”代码模式和行为指令引擎内部有一个“可疑行为清单”和一套评分规则,每匹配一条可疑特征,就给文件一个相应的“恶意分数”。如果文件的总分超过了阈值,扫描引擎就会判定它为“可能恶意”或“可疑”,并触发警报。
4.云查杀:将本地无法判定的可疑文件上传到云安全中心进行分析。云端拥有海量的样本数据和更强的计算能力,可以进行更复杂的静态和动态分析。
5.人工智能技术:通过在海量的恶意软件和正常软件样本上训练AI模型,让机器自己学会区分良性与恶意文件的“特征”。AI模型会分析文件的成千上万个特征(如PE头信息、API导入表、字节等),并给出一个恶意概率评分。
7.取证分析实践
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC是Internet Relay Chat的缩写,它基于文本的实时聊天系统,不是一个软件,而是一套协议。任何人都可以按照这个协议开发IRC客户端软件或搭建IRC服务器。客户端加入IRC网络时会发送“NICK”消息指定昵称和“USER”消息提供用户信息。IRC通常使用TCP端口6667,有时也会使用其他端口。
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是由一台主控端通过命令与控制服务器远程控制的、大量被恶意软件感染的互联网设备组成的网络。通常用于发动分布式拒绝服务攻击、发送垃圾邮件、窃取敏感信息、挖掘加密货币等恶意活动。
(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.src==172.16.134.191 and tcp.dstport==6667,筛选源IP为172.16.134.191,目的端口为6667的数据包。
![0d5757e5434fc19abf1437d765d9fae5]()
看到IRC服务器的IP分别是209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10 - 查看在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
- 安装tcpflower
![c1669d531ad6ed1cb45844fb48ed1e9c]()
- 输入
tcpflow -r botnet_pcap_file.dat “host 209.196.44.172 and port 6667”筛选出与IP=209.196.44.172且端口为6667的主机相关的所有TCP流量数据。
![f4c1277c23d4f3dff5edbb1f965a0b61]()
- 输入
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查找源IP为209.196.44.172的文件
![8e27d09df065cb1e6a85b5c4c281249a]()
共有3461台主机 - 查看哪些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 > 20232322.txt;wc -l 20232322.txt找出所有向主机172.16.134.191发送数据包的源IP地址
![820b328589690809dec375d5499b9371]()
![6b68188d216257d90e18378a51ce9e8a]()
- 查看攻击者使用的安全漏洞
- 在wireshark中打开botnet_pcap_file.dat文件,找到统计->协议分析
![72c5b4a273c6e037fa2f1406a0bd2c9e]()
可以看到使用的大多数是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查找主机172.16.134.191发起的所有TCP的源端口号
![b8e8e69d09f7c520f610ae86dbac88b7]()
- 输入
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的源端口号
![9fd051728a1a7eb24588290731a59d68]()
8.成功的攻击与原因
TCP:
- 135端口:
![image]()
成功连接但无后续的恶意数据包 - 139端口:
![image]()
成功连接并发出访问\PC0191\c的请求,但被服务器拒绝,后续也没有恶意数据包 - 25端口:
![image]()
成功连接但无后续的恶意数据包 - 445端口:
![image]()
成功连接后不断向主机发送SMB请求,看起来像是在进行扫描
![image]()
通过445端口的SMB协议,成功删除了目标主机上路径为C:\System32\PSEXESVC.EXE的文件 - 4899端口:
![image]()
通过HTTP请求,发送目录遍历攻击HEAD /cgi/../../../../../winnt/system32/cmd.exe?/c+dir - 80端口:
![image]()
发送大量的c字符来进行攻击缓冲区,造成目标主机缓冲区溢出被控制
UDP:
137端口:

成功连接但无后续的恶意数据包
五.心得体会
此次实验不同于前几个实验,没有那么多的命令和代码,主要是在于分析端口和是否有攻击行为。所以对结果的分析识别能力有较大的要求。像使用IDA pro和ProcessExplorer对RaDa_unpacked.exe的分析时,就需要理解汇编中的调用关系,strings中信息内容是什么含义,同时对于捕捉的数据包的分析能力也有所提升。本次实验让我意识到了网络安全面临的问题的复杂度有多高,也让我更加坚定网络攻防的学习信心。

































