20242316 2025-2026-1 《网络与系统攻防技术》实验四实验报告
20242316 2025-2026-1 《网络与系统攻防技术》实验四实验报告
1.基础知识
一、 恶意代码识别与脱壳技术
- PE 文件格式(Portable Executable)
Windows 系统下的可执行文件(如.exe、.dll)格式。包含 DOS 头、PE 文件头、节表以及各个节区。识别 PE 头是分析恶意代码的第一步。 - 加壳(Packing)与脱壳(Unpacking)
- 加壳:恶意代码作者常使用 UPX 等工具对程序进行压缩或加密,使得静态反汇编工具无法直接看到真实的代码逻辑(如本次样本 RaDa 使用了 UPX 壳)。
- 脱壳:利用脱壳工具(如超级巡警脱壳机),在程序运行时将真实代码从内存中 Dump 出来,还原为原始的 PE 文件,以便后续的逆向分析。
- 字符串提取(Strings)
程序在编译时,硬编码的文本信息(如作者名字、URL、提示语)通常会保留在可执行文件中。使用strings命令可以将其提取出来,是获取恶意代码线索最快捷的手段。
二、 逆向工程与 IDA Pro 分析
- 静态分析工具(IDA Pro)
IDA 是一款强大的交互式反汇编器。它可以将机器码转换为汇编语言,并生成函数调用图。通过Shift + F12可快速查看程序内的所有字符串,并通过交叉引用(Xrefs)快速定位到使用该字符串的代码位置。 - Crackme 破解原理
Crackme 是专门用于练习逆向工程的小程序。通常包含一组硬编码的验证逻辑:接收用户输入,与内置字符串(如I know the secret)进行比较。- 汇编语言中,
strcmp或cmp指令用于比较字符串或数值。 jnz(不相等则跳转)或jz(相等则跳转)决定了程序是走向“失败提示”还是“成功提示”。
- 汇编语言中,
三、 恶意代码分类与防分析技术
- 木马/后门(Backdoor / RAT)
本次分析的样本属于此类。其核心目的是隐蔽地驻留在受害者主机中,建立持久化(如修改注册表自启动),并接受远程控制者的指令,而不是像传统病毒那样破坏文件或自我复制感染。 - 防分析(Anti-Analysis)技术
恶意代码常用的防分析技术包括:- 特征规避:使用 UPX 压缩、代码混淆或字符串加密,阻断静态特征匹配。
- 反调试:检测调试器特征,如在 Crackme2 中检查自身文件名,若发现异常则改变运行逻辑。
四、 网络取证与僵尸网络(Botnet)
- IRC 协议(Internet Relay Chat)
一种早期的实时聊天协议。IRC 客户端连接服务器(默认端口TCP 6667)时,需发送NICK(设置昵称)和USER消息。如果加入频道,需发送JOIN消息。- 353 消息:在 IRC 流量中,服务器响应
353码,表示当前频道内的在线用户列表。通过统计353消息中的去重昵称,可以计算出僵尸网络中的主机数量。
- 353 消息:在 IRC 流量中,服务器响应
- 僵尸网络(Botnet)
攻击者通过恶意软件感染大量网络主机(被称为“肉鸡”或“僵尸”),通过 C&C 服务器(如 IRC 服务器)进行统一控制。通常用于发起 DDoS 攻击、发送垃圾邮件、挖矿或作为跳板。 - SMB / RPC 漏洞与 PsExec 横向移动
- SMB(TCP 445 端口):Windows 的共享协议,常被攻击者用于文件传输和远程执行。
- PsExec 攻击:这是黑客攻击中经典的工具手法。它利用 SMB 协议连接目标主机的
ADMIN$共享,通过 RPC 接口(具体为SVCTL服务控制)发送CreateServiceA请求,注册一个名为PSEXESVC.exe的系统服务,从而以管理员权限静默执行任意命令。
2.实验内容
- 使用
file、PEiD 等工具识别 rada 恶意代码样本的文件格式、运行平台和加壳类型,使用超级巡警脱壳机脱壳,并通过字符串提取寻找样本作者。 - 使用 IDA Pro 对
crackme1.exe和crackme2.exe进行静态分析,找到能够触发成功提示的输入,并在 Windows 命令行中验证。 - 对 rada 样本进行综合分析,回答样本摘要、功能目的、行为特征、反分析技术、恶意代码分类、相似工具、作者溯源条件和检测方法等问题。
- 对蜜罐主机
172.16.134.191的 Snort 流量进行取证分析,研究 IRC 通信、僵尸网络规模、攻击者地址、攻击漏洞和成功入侵过程。
3.实验过程
(一)rada 文件识别、脱壳与作者溯源
首先在 Kali 主机 20242316pyy 的 lab4_20242316 目录中解压 rada.rar。压缩包带有密码,输入实验提供的密码后成功提取出 rada_dump-.exe 和 RaDa.exe。随后使用 md5sum 计算原始样本摘要,得到:
MD5: caaa6985a43225a0b3add54f44a0d4c7
MD5 可作为该样本在当前实验环境中的快速唯一标识。由于样本可能被重新打包或轻微修改,实际检测时还应结合 SHA-256、PE 结构、字符串和网络行为等特征。

[图 1 解压 rada 样本并计算 MD5]
使用 file 识别 RaDa.exe,结果为 PE32 executable for MS Windows 4.00 (GUI), Intel i386, 3 sections,说明它是面向 Windows 的 32 位 GUI PE 程序,包含 3 个节区。

[图 2 使用 file 识别样本文件类型]
为使用 Windows 下的 PEiD 和超级巡警脱壳机,通过 scp 将 RaDa.exe 从 Kali 传入 Windows 主机的 E:\cxdownload 目录,并保留学号命名。

[图 3 将 rada 样本传回 Windows 主机]
使用 PEiD 检查样本,工具给出的壳特征为 UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo。这说明样本使用了 UPX 系列壳;PEiD 的识别结果只能说明“存在 UPX 特征”,不能替代实际脱壳验证。

[图 4 使用 PEiD 查壳]
使用超级巡警脱壳机对样本进行自动脱壳。工具提示“脱壳成功”,并生成 RaDa_20242316_unpacked.exe。由于该样本使用了经过修改的 UPX 壳,直接依赖标准 UPX 参数并不稳妥,使用针对性的脱壳工具更容易得到完整文件。

[图 5 使用超级巡警脱壳机脱壳]
将脱壳后的文件传回 Kali,使用 strings 提取字符串,并通过 grep 筛选作者相关关键词:
strings -a RaDa_20242316_unpacked.exe | grep -i "author\|siles\|perez"
结果中出现 Raul Siles 和 David Perez,可判断样本中保留了作者标记,作者为 Raul Siles 与 David Perez。

[图 6 将脱壳文件传回 Kali]

[图 7 通过字符串定位作者信息]
综合第一部分结果,可整理样本基础信息如下:
| 项目 | 结果 |
|---|---|
| 原始文件 | RaDa.exe |
| 脱壳文件 | RaDa_20242316_unpacked.exe |
| 文件格式 | PE32,Windows GUI 程序 |
| 架构 | Intel i386,32 位 |
| 节区数量 | 3 |
| MD5 | caaa6985a43225a0b3add54f44a0d4c7 |
| PEiD 壳特征 | UPX 0.89.6 - 1.02 / 1.05 - 2.90 |
| 作者字符串 | Raul Siles && David Perez |
(二)使用 IDA Pro 分析 crackme
分析 crack1.exe
把 crackme1.exe 加载到 IDA Pro,在字符串窗口中查看程序引用的提示信息,包括 I think you are missing something、I know the secret、Pardon? What did you say? 和 You know how to speak to programs, Mr. Reverse-Engineer。通过字符串交叉引用进入相应代码区域,可以观察输入字符串与预期字符串的比较过程。

[图 8 crackme1 的 IDA 字符串视图]

[图 9 crackme1 的关键字符串和交叉引用]
根据分析结果,在 Windows 命令行中将 I know the secret 作为参数传入:
crackme1.exe "I know the secret"
程序输出:
You know how to speak to programs, Mr. Reverse-Engineer
由此确认 crackme1.exe 的预期输入为 I know the secret。

[图 10 crackme1 成功输出]
分析 crack2.exe
继续使用 IDA Pro 分析 crackme2.exe。除 I know the secret 外,字符串视图中还出现了 crackmeplease.exe。该字符串表明程序在运行时不仅比较输入内容,还会检查自身文件名;如果直接以 crackme2.exe 运行,可能无法进入成功分支。

[图 11 crackme2 的 IDA 字符串视图]

[图 12 crackme2 中与文件名和输入有关的关键字符串]
将可执行文件复制并重命名为 crackmeplease.exe,然后传入正确参数:
crackmeplease.exe "I know the secret"
程序输出:
We have a little secret: Chocolate
这说明 crackme2.exe 的完整成功条件包含两个部分:文件名必须为 crackmeplease.exe,输入内容必须为 I know the secret。

[图 13 crackme2 成功输出]
(三)Rada 分析报告
(1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
样本基础识别信息如下: 原始文件名:RaDa.exe,脱壳后文件名:RaDa_unpacked.exe; 可通过 md5sum、sha256sum 获取样本哈希值,哈希值可作为样本唯一标识; 编译时间戳:2004 年 9 月,可通过 exiftool 工具或者 IDA 反汇编工具查看; PE 架构:32 位 GUI 程序; 加壳类型:修改版 UPX 壳,标准 UPX 工具无法直接识别; 脱壳后内嵌字符串标识作者信息:Raul Siles && David Perez。
(2)找出并解释这个二进制文件的目的
该样本 RaDa 属于远程控制后门样本。通过 IDA 函数调用图、二进制内嵌字符串分析可知,样本核心目标是获取被控主机的控制权:样本运行后会在本地生成自身副本,修改系统注册表启动项实现持久驻留;同时具备网络通信能力,能够接收远端控制指令,还可以发起 Smurf 类型 DDoS 攻击。 该样本不以破坏主机文件、主动感染大量其他主机作为首要目标,核心诉求是长期驻留受害主机,维持攻击者对主机的远程控制通道,接受攻击者下发各类操作指令。
(3)识别并说明这个二进制文件所具有的不同特性
- 持久化驻留特性:样本存在操作注册表 Run 启动项相关函数,通过写入注册表启动项,实现系统开机自动运行,保证恶意程序在主机重启后不会失效。
- 自我复制特性:程序内包含文件复制相关逻辑,运行时会将自身副本复制到系统指定目录,脱离原始运行路径,方便后续持久化加载。
- 远程网络通信与指令接收特性:内置网络通信相关代码,用于和远端 C2 控制服务器建立连接,持续等待控制端下发指令,是远程控制功能的基础。
- 攻击载荷执行特性:包含 Smurf DDoS 攻击相关功能代码,接收指令后可以向外发起 DDoS 攻击,受控主机可被当作攻击肉鸡。
- 伪装特性:程序为 GUI 类型 PE 文件,存在图形界面外壳,用来掩盖后台隐藏的后门控制功能,降低用户警觉性。
(4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
- 自定义修改版 UPX 加壳:样本使用经过修改的 UPX 壳,原版 UPX 程序无法识别、脱壳。加壳后原始程序代码被压缩加密,静态分析工具无法直接读取原始代码与明文字符串,阻碍自动化沙箱、杀毒工具直接分析原始程序逻辑。
- 运行时解密机制:加壳状态下,原始代码、字符串、导入表都处于加密压缩状态,只有程序在受害主机上运行时,壳代码才会在内存中解压还原原始程序;静态直接查看文件时,导入表残缺、字符串全部密文,无法直接提取关键信息。
- 破坏静态分析条件:加壳后 PE 导入表被壳程序替换,静态查看导入表只能看到壳用到的少量 API,无法直接看到后门真实调用的注册表、网络、文件操作 API,大幅提升静态逆向难度。
(5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
分类:远程访问木马(RAT / 后门木马),带有僵尸网络(Bot)属性
理由:样本核心功能是建立远程控制通道,接收外部指令,允许攻击者操纵主机,符合后门、远程访问木马的核心定义;
- 不存在传统病毒的核心特征:没有搜索、感染其他正常 PE 文件的文件感染逻辑;
- 样本的自我复制、持久化行为,服务于 “长期驻留、接受控制”,而不是病毒、蠕虫那种主动扩散、感染新主机的传播目标;
- 支持接收指令发起 DDoS 攻击,受控主机可以作为肉鸡,附带 Bot 僵尸程序特征。 综上,不归类为传统病毒或者蠕虫,主体为 RAT 后门木马。
(6)给出过去已有的具有相似功能的其他工具
以下工具和 RaDa 功能定位相近,均属于早期远程控制后门类工具,用于远程接管主机、执行指令,部分附带 DDoS 等附加攻击能力,不代表代码同源:
- Back Orifice:经典早期 RAT,支持远程文件管理、命令执行;
- SubSeven:知名 GUI 远程控制木马,具备持久化、远程操控功能;
- Poison Ivy:流行的后门 RAT,C2 通信、持久化、远程命令执行;
- DarkComet:图形化远程访问木马,支持屏幕监控、文件操作、下发攻击指令。
(7)可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
在本次实验场景下可以溯源识别作者。 限定条件:脱壳后的样本明文内嵌作者字符串 Raul Siles && David Perez,样本也没有对该字符串做加密混淆,工具查询样本信息可以直接读取该标识。 局限性:
- 该信息是样本开发者主动留下的标记,在真实的恶意攻击样本中,攻击者一般会擦除、加密所有作者、编译注释信息,依靠字符串溯源基本失效;
- 仅依靠该字符串,不能直接证明就是真实身份,有可能是伪造标记;
- 真实场景溯源还需要交叉佐证:编译时间戳、代码编写风格、C2 服务器基础设施、威胁情报关联等间接线索,这类线索存在不确定性,不能单独作为铁证。
(8)给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法
-
方法 1:基于文件特征码(哈希 / 字节序列)检测
原理:哈希是文件全局唯一摘要,字节序列特征码选取样本中稳定不变的代码片段、明文字符串。 实现方式:计算样本 MD5、SHA256 哈希,将哈希录入杀毒软件、EDR、沙箱黑名单,文件上传或者落地时比对哈希,命中即告警。 针对该 RaDa 样本:单纯原始加壳样本哈希容易因为轻微修改失效,更可靠的方式是提取脱壳后稳定特征,例如作者字符串序列、固定 API 调用代码片段,生成字节特征。 优点:精准,零误报;缺点:只对完全一致样本生效,样本加壳、重新打包、微小修改就会失效,无法识别变体。 -
方法 2:PE 节区与加壳启发式检测
原理:UPX 壳有典型特征,UPX0、UPX1 节名、文件入口点落在节区开头、节区熵值偏高、导入表数量极少,这些异常 PE 结构特征可以作为启发式规则。 实现方式:安全工具解析 PE 结构,读取节名称、熵值、入口点位置、导入函数数量;当匹配到 “UPX 类节名 + 高熵值 + 导入表异常” 组合,判定为疑似加壳可疑样本。 针对 RaDa:虽然是修改版 UPX,不一定保留标准 UPX 节名,但压缩壳带来的高熵、异常入口点特征依然存在,可以触发启发告警。 优点:不需要知道样本全部细节,可以发现未知加壳恶意样本;缺点:存在误报,部分合法压缩打包程序也会触发告警,仅为疑似告警,不能直接判定恶意。 -
方法 3:静态字符串规则 / YARA 规则检测
原理:脱壳后样本存在固定明文特征字符串,包括作者标记、注册表持久化路径、硬编码通信字符串等,将这些特征编写为 YARA 规则进行静态扫描。 实现方式:YARA 规则匹配二进制内指定字符串、代码模式;批量扫描主机文件,文件静态匹配规则就告警。 针对 RaDa:将Raul Siles && David Perez、相关注册表 Run 路径、Smurf 攻击相关字符串写入 YARA 规则。 优点:可以识别同家族变体,只要保留关键字符串就可以检出;缺点:样本对字符串加密之后,该方法直接失效。 -
方法 4:注册表与持久化行为监控(EDR 行为检测)
原理:监控操作系统的注册表、文件系统行为,把多个可疑行为组合形成关联规则,而不是单看文件本身。 实现方式:EDR 实时监控进程行为,当观测到进程同时满足两个行为:①向注册表 Run/RunOnce 启动项写入键值;②将自身复制到系统目录,触发高危告警。 针对 RaDa:样本运行时会同时触发这两类持久化行为。 优点:不依赖文件特征,即使变种修改代码、哈希变化,只要保留持久化逻辑就能够检出;缺点:部分合法软件也会写入启动项,需要优化规则降低误报。 -
方法 5:网络行为检测(流量侧检测,IDS / 蜜罐)
原理:该后门会和 C2 服务器建立通信,存在固定通信模式,还可能发出 Smurf DDoS 攻击流量,在网络层识别异常流量特征。 实现方式:IDS、防火墙、蜜罐采集流量,识别对应的 C2 通信协议特征、异常 DDoS 流量、内网扫描流量;匹配通信行为模板进行告警。 针对 RaDa:监控样本和 C2 信道交互报文、Smurf 攻击相关 ICMP 流量特征。 优点:可以在恶意程序已经落地运行之后,从网络侧发现威胁,适用于内网监测;缺点:如果攻击者加密 C2 通信、改变通信端口,流量特征会失效。
(四)网络取证
(1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?
IRC是什么:IRC(Internet Relay Chat)即互联网中继聊天,是一种基于文本的即时通讯协议,常用于群聊、私聊和文件传输。
发送什么消息:客户端申请加入网络时,通常首先发送 NICK 消息(设置昵称)和 USER 消息(提供用户信息);若要加入具体的某个聊天频道,会发送 JOIN 消息。
使用的TCP端口:IRC 默认使用的标准 TCP 端口是 6667,常用的备用端口还包括 6668、6669、7000 等。
(2)僵尸网络是什么?僵尸网络通常用于什么?
僵尸网络是什么:僵尸网络(Botnet)是指攻击者利用恶意软件(如木马、蠕虫)感染大量互联网上的计算机,并对其进行远程集中控制,从而形成的一个受控网络。被感染的机器被称为“僵尸”或“肉鸡”。
通常用于什么:僵尸网络通常被用于发起分布式拒绝服务攻击(DDoS)、发送垃圾邮件(Spam)、进行点击欺诈、作为代理跳板隐藏攻击者真实IP、窃取敏感数据,以及作为分发勒索软件或挖矿程序的渠道。
(3)蜜罐与哪些 IRC 服务器通信?
使用过滤器 ip.src == 172.16.134.191 and tcp.port == 6667 观察蜜罐主动发起的 IRC 会话,结合会话地址统计,蜜罐通信过的 IRC 服务器包括 209.126.161.29、66.33.65.58、63.241.174.144 和 209.196.44.172。

[图 14 Wireshark 中筛选蜜罐的 IRC 通信]
(4)多少不同的主机访问了以 209.196.44.172 为服务器的僵尸网络?
使用过滤器 ip.addr == 209.196.44.172 and tcp.port == 6667 提取相关会话,再用 tcpflow 重组 IRC 流量并统计频道成员,得到不同主机数量为 3461。

[图 15 筛选与 209.196.44.172 的 IRC 会话]

[图 16 tcpflow 重组流量并统计僵尸主机数量]
(5)哪些IP地址被用于攻击蜜罐主机?
使用过滤器 ip.dst == 172.16.134.191 统计访问蜜罐的端点,共得到 166 个端点;扣除蜜罐自身后,攻击者 IP 数量为 165。

[图 17 统计访问蜜罐主机的攻击者 IP]
(6)攻击者尝试攻击了那些安全漏洞?
通过 ip.dst == 172.16.134.191 and tcp.flags.syn == 1 and tcp.flags.ack == 0 筛选 SYN 扫描包,可以看到攻击者对多个端口进行了自动化探测。

[图 18 筛选发往蜜罐的 SYN 扫描包]

[图 19 蜜罐收到的扫描流量和端口分布]
通过 Wireshark 过滤向蜜罐主机发起的 SYN 探测包,发现攻击者使用了自动化扫描工具对大量端口进行了扫描。结合捕获到的目标端口,攻击者主要尝试攻击了以下安全漏洞及服务:
- SMB/NetBIOS 漏洞(TCP 139、TCP 445):这是本次流量中最核心的攻击方向。攻击者试图利用 Windows 系统的 SMB 共享漏洞(如 MS04-011、MS08-067)进行溢出攻击,或者利用 PsExec 等工具进行远程代码执行。
- HTTP/IIS 漏洞(TCP 80):攻击者扫描 Web 服务,试图寻找 IIS 相关的目录遍历、远程代码执行等高危漏洞。
- SQL Server 数据库攻击(TCP 1433):攻击者试图对 Microsoft SQL Server 进行弱口令爆破,或利用 SQL 服务漏洞获取数据库权限。
- 其他非常用端口(如 TCP 57):属于扫描工具的盲扫探测,试图寻找未公开的私有服务或系统后门。
(7)那些攻击成功了?是如何成功的?
使用过滤器 tcp.port == 445 and frame contains "PSEXESVC" 可以定位 SMB 会话中的 PsExec 痕迹。

[图 20 SMB 流量中的 PsExec 服务痕迹]

[图 21 PSEXESVC.exe 与远程服务创建证据]
流量显示:攻击者(如 IP 61.111.101.78)成功利用 TCP 445 端口(SMB协议) 攻陷了蜜罐主机;通过分析数据包发现,攻击者使用了经典的 PsExec 攻击手法,通过 SVCTL 服务控制协议发送 CreateServiceA 请求,在系统中静默创建并启动了名为 PSEXESVC.exe 的恶意服务,从而成功获取了系统的最高管理员权限,实现了远程代码执行并将蜜罐拉入僵尸网络。
4.问题及解决方案
- 问题:直接运行
crackme2.exe并输入I know the secret不能稳定得到成功结果,因为程序还检查自身文件名。 - 解决方案:根据 IDA 中出现的
crackmeplease.exe字符串复制并重命名程序,再传入I know the secret,最终得到We have a little secret: Chocolate。
5.学习感悟、思考等
这次实验让我第一次比较完整地走完了恶意代码分析流程。刚拿到 rada 样本时,直接查看文件只能看到 PE 结构和少量可疑信息;真正有价值的作者字符串是在脱壳之后才出现的。这让我理解了加壳为什么会增加分析难度:它不只是“压缩文件”,还会隐藏导入表、字符串和原始代码,使静态工具看到的内容与程序真实行为发生分离。PEiD 的 UPX 识别虽然提供了方向,但修改版壳也提醒我不能完全相信单一工具的结论,必须通过脱壳和后续验证形成证据链。
crackme 部分让我体会到静态分析需要把字符串、交叉引用和控制流结合起来。crackme1 的关键是找到输入比较位置,而 crackme2 还额外检查文件名,如果只盯着输入内容就会漏掉条件。重命名为 crackmeplease.exe 后再运行成功的这个过程,比单纯背下答案更能说明程序逻辑和环境条件之间的关系。
取证部分最有收获的是如何从大量流量中建立完整叙事:先确认蜜罐连接了哪些 IRC 服务器,再统计僵尸网络成员和攻击者地址,接着寻找扫描端口与漏洞,最后用 PSEXESVC 证明攻击者通过 PsExec 成功执行远程服务。单独的 IP、端口或单个数据包都不能说明全部问题,只有把它们按时间顺序和通信关系串联起来,才能还原攻击过程。
通过这次实验,我也认识到恶意代码分析既要会使用工具,也要保持证据意识。截图中的主机名、文件名、哈希、过滤条件和命令输出都需要能够相互印证。今后分析类似样本时,应先在隔离环境中保存原始证据,再按“文件识别—脱壳—静态分析—动态验证—网络取证”的顺序工作,避免因直接运行样本破坏现场。
参考资料
- OmniUnpack: Fast, Generic, and Safe Unpacking of Malware,Lorenzo Martignoni 等,ACSAC 2007。
- mandiant/capa,Mandiant 开源恶意代码能力分析工具。

浙公网安备 33010602011771号