1.实验内容
- 1.恶意代码文件类型标识、脱壳与字符串提取
- 2.使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
- 3.分析一个自制恶意代码样本rada,并撰写报告,回答以下问题:
- 4.取证分析实践
2.实验过程
2.1恶意代码文件类型标识、脱壳与字符串提取
(1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式
- 在Linux中查看文件类型
file RaDa.exe - 使用应用程序PEiD查看套壳情况
- 发现RaDa文件是一个32位可执行文件,运行于windows平台下,带有图形化界面(GUI)。
- 经PEiD查看发现,该程序存在套壳情况,使用upx压缩壳。

(2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理
- 使用脱壳机进行脱壳

(3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁
此处需使用ida pro程序进行逆向分析,进入程序后选择PE Executable。

- 选择strings,提取字符,下划一段距离发现代码作者名字,以及代码编写时间


- 双击上图标蓝部分,视窗切换到该信息所在位置,如下图

2.2 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。
(1)分析crack1.exe
- 动态分析该文件,直接运行该文件,第一次不带参数,第二次带一个参数。
发现输出结果不同,第二次显示Pardon? what did you say?,说明参数输入错误

- 第二次测试,尝试两个参数与三个参数,输出结果均与第一次无参数测试一样,说明该函数很有可能仅需要一个参数

- 动态分析结束,使用ida pro 进行静态分析
选择crackme1.exe文件,点击View->Graphs->Function calls查看函数调用情况
-
发现函数sub_401280函数调用了fprintf与printf,与该程序动态分析时的输入输出情况有关联,选择该函分析
![分析函数调用情况,确定目标函数]()
-
打开函数窗口快速寻找到sub_401280函数,双击切换到具体位置
![function窗口快速确定位置]()
点击如图按钮,sub_401280函数内部情况

-
具体情况如下,由此可以得知如果输入的1个参数为
“I know the secret”,则程序给出输出You know how to speak to programs, Mr. Reverse-Engineer,输入其他1参数则会输出“Pardon,What did say”,输入0个参数或1个以上参数则会输出“I think you are missing something”
![函数内部情况]()
-
试运行,成功
![成功]()
(2)分析crackme2.exe
-
动态分析crackme2.exe,使用上一步的结果测试,输入
“I know the secret”,输出结果为“I have an identify problem.”
![测试程序]()
-
同样使用ida pro进行静态分析,sub_401280函数依然调用fprintf函数,所以选择该函数进行分析
![函数调用图确定目标函数]()
打开function calls,发现要求的第一个参数为crackmeplease.exe,即需要把文件名更改为crackmeplease.exe

- 试运行,在cmd中第一次使用
.\crackmeplease.exe带参数输入失败,第二次使用crackmeplease.exe带参数输入成功。 - 在powershell中运行exe程序必须使用
./crackmeplease.exe才能运行,失败
![成功运行,需要cmd且不使用]()

2.3 分析一个自制恶意代码样本rada,并撰写报告,回答以下问题
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
file RaDa.exe 查看文件类型信息
md5sum RaDa.exe 查看该文件的摘要值
exiftool RaDa.exe | grep "Time Stamp" 查看文件生成时间

(2)找出并解释这个二进制文件的目的;
-
使用ida pro进行静态分析,打开function calls查看。
-
发现函数sub_404FB0调用较多子函数,考虑从该函数开始调查
![选择一个函数进行展示,该函数涉及较多子函数]()
-
查看函数内部情况,它将一个硬编码的URL字符串 "http://10.10.10.10/RaDa"的地址加载到 edx寄存器。
-
"cgi-bin/download.cgi"和 "cgi-bin/upload.cgi":用于下载新的恶意载荷或命令,以及上传从受害者机器上窃取的数据。 -
"C:\\RaDa\\tmp"和 "C:\\RaDa\\bin":这揭示了软件在计算机上的工作目录。它会在C盘根目录下创建RaDa文件夹。
"HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"和 "RaDa":它准备向系统的启动注册表项写入一个名为RaDa的键值,导致自启动。
目的分析:建立后门程序,在受害者的计算机上窃取数据并上传,同时接受攻击者控制。


(3)识别并说明这个二进制文件所具有的不同特性;
- 使用了upx压缩壳
- 具有自启动特性
- 可以远程操控
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;
- upx压缩壳,隐藏程序逻辑与入口点。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;
- 我认为该程序是一个后门程序,因为该程序并不具有自我复制与自主网络传播的特性,且能被攻击者远程操控,符合后门程序的特征。
(6)给出过去已有的具有相似功能的其他工具;
- msfvenom,veil
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
- 可以,使用ida pro进行逆向分析。在脱去upx压缩壳的情况下。
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。
-
基于特征码的检测:比对文件与已知恶意软件的特征码,例如哈希值、特定字符串。
特点:速度快,对已知威胁准确;无法检测未知或变种后门。
工具:杀毒软件 -
行为分析:监控程序的实际行为,例如文件操作、网络连接、注册表修改,判断是否异常。
特点:能发现未知后门;可能需较多资源,可能产生误报。
工具:沙箱(Sandbox) -
网络流量分析:分析网络通信(如异常连接、非常用端口)
特点:不依赖主机文件,能发现隐藏活动;需处理大量数据,加密流量分析难度大。
工具:wireshark -
静态分析:不运行程序,直接分析其代码、文件结构、字符串等。
特点:相对安全,适用于初步筛查;对代码混淆或加壳的后门效果可能受限。
工具:IDA Pro -
文件及系统完整性检查:计算系统文件的哈希值或校验和,与已知正常值比对。
特点:能有效发现文件篡改;依赖于可靠的基础校验库或先前保存的正常状态。
工具:系统自带工具(例如Linux下的rpm -v),第三方完整性检查工具
2.3 取证分析实践
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
-
IRC(Internet Relay Chat,互联网中继聊天)是一种基于文本的实时通信协议
-
当IRC客户端申请加入一个IRC网络时,将发送JOIN消息以请求加入特定的频道
-
客户端通常需要完成注册过程,包括发送以下消息:
PASS:设置连接口令
NICK:设置用户昵称
USER:提供用户信息 -
常用tcp端口:
6667:IRC协议的默认端口,用于明文传输
6697:用于SSL/TLS加密传输的IRC连接
(2)僵尸网络是什么?僵尸网络通常用于什么?
- 定义:僵尸网络(Botnet)是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。
僵尸网络主要用途:DDos攻击,垃圾邮件分发,数据窃取,恶意软件传播
(3)蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
通过源IP地址与端口过滤,发现与蜜罐主机通信的IRC服务器有5个,分别是
66.33.65.58
63.241.174.144
217.199.175.10
209.196.44.172
209.126.161.29

(4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
首先将数据包botnet_pcap_file.dat传输至kali虚拟机
下载tcpflow工具,sudo apt install tcpflow
使用命令tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"获取TCP流数据文件。包含蜜罐主机向服务器发送的数据流,与服务器向蜜罐主机发送的数据流。

分析tcp流数据文件,选择服务器向蜜罐主机发送的数据流,使用命令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
-a: 将二进制文件视为文本文件进行搜索。
"^:irc5.aol.com 353": 匹配以:irc5.aol.com 353开头的行。在IRC协议中,代码353表示NAMES回复,即服务器发送频道中的用户名单
wc -l:wc命令用于统计。
-l选项表示只统计行数。至此,行数就等于唯一昵称的数量
- 发现,存在有3461个主机访问了该服务器。
![统计主机数]()
(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 > 20232319.txt;wc -l 20232319.txt
-n:禁止将IP地址转换为主机名。这会直接显示IP地址(如172.16.134.191),而不是尝试去解析DNS得到可能的主机名,从而加快处理速度并确保输出的一致性
| awk -F " " '{print $3}'
tcpdump的输出通过管道(|)传递给awk进行处理。awk默认的每行输出格式类似于:时间戳 IP发送方.端口 > IP接收方.端口。-F " ":设置字段分隔符为空格。这样可以将每一行文本按空格拆分成多个字段。'{print $3}':打印第3个字段。在tcpdump的默认输出中,第3个字段通常是源IP地址和源端口号
通过观察图片发现,共有165个ip地址用于攻击蜜罐主机。

(6)攻击者尝试攻击了那些安全漏洞?
使用wireshark查看使用哪些协议,发现99.7%使用tcp协议,0.3%使用udp协议

查看tcp协议
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

查看udp协议
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

- TCP:135(RPC,Windows远程过程调用)、139/445(SMB,Windows文件共享)、25(SMTP,简单邮件传输协议)、4899(Remote Administrator,远程控制软件)、80(HTTP,网页服务)
- UDP:137(NetBIOS,Windows网络邻居功能)

(7)那些攻击成功了?是如何成功的?
TCP连接的445端口、4899端口、80端口成功攻击
-
135端口,后续无恶意数据包,攻击失败
![image]()
-
139端口,攻击方多次实现三次握手tcp连接,攻击者尝试访问目录\PC0191\c,后续蜜罐主机发送RST包断开连接,后续无恶意数据包,攻击失败
![image]()
-
25端口,成功建立连接,后续主机发送[FIN,ACK]包请求断开连接,后续无恶意数据包,攻击失败
![image]()
-
445端口,成功建立连接,且后续发送大量SMB包,且受害主机未发送任何RST包断开连接,攻击者通过445端口的SMB协议,成功删除了目标主机172.16.134.191上路径为C:\System32\PSEXESVC.EXE的文件,实质影响到受害主机的文件完整性,攻击成功。

-
4899端口,成功建立连接,攻击者向主机发送大量[PSH,ACK]包
![image]()
-
后续发现,请求中包含了 ../../../winnt/system32/cmd.exe和指令 dir xe /c dir,实现了路径遍历攻击,成功
![屏幕截图 2025-11-05 225107]()
-
80端口,建立连接后,发送带有大量c字符的攻击载荷,且受害主机没有主动断开连接,说明受害主机可能已接收该攻击载荷
![image]()
同样,下方也有路径扫描攻击,受害主机无任何保证安全性的回应,说明攻击成功
![屏幕截图 2025-11-05 230037]()
-
UDP 137端口
具有大量的NetBIOS服务扫描活动,但未包含任何攻击载荷,攻击失败。
![屏幕截图 2025-11-05 230708]()
3.问题及解决方案
- 问题1:crackme2.exe文件改名为crackmeplease.exe后运行依然无法获得正确的结果
- 问题1解决方案:不要使用powershell,而是使用cmd运行,在cmd中可以使用crackmeplease.exe [参数]运行,保证程序名前无任何字符(例如“./”)。
4.学习感悟、思考等
通过本次实验,我掌握了恶意代码分析的全过程,掌握了PEiD,脱壳工具,IDA PRO逆向分析工具。通过这些工具,拓宽了我实现恶意代码分析的方法与视野。
网络攻防,工具是必不可少的,工具让分析任务事半功倍。
参考资料
无
















