20242418 2026-2027-1《网络与系统攻防技术》实验四实验报告

1. 基础知识

1.1 可执行文件与逆向分析

知识点

关键内容

用在哪里

PE 文件格式

Windows EXE 通常采用 PE 格式,文件头能反映机器类型、入口点及节表信息。

我用 PEiD、IDA 检查 RaDa.exe,还从 PE 头读取了 COFF 时间戳。

UPX 加壳

UPX 对程序进行压缩和封装,程序的入口和可读内容会发生变化;遇到改动过的包头时,标准工具可能无法解包。

原始 RaDa 在 PEiD 中呈现 UPX 特征,但 UPX 5.2.1 报错;我改用实验提供的脱壳器。

脱壳结果核对

脱壳后需要观察程序结构是否更容易分析,并核对入口、导入表及字符串。

我比较了文件大小、PEiD 检测结果、字符串数量,并用 IDA 查看 ThunRTMain。

IDA 交叉引用

从字符串位置沿着引用关系找到代码,能够进一步弄清数据用在什么地方。

我追踪 RaDa 的 URL、Run 注册表路径和 C:\RaDa 目录,找到了相应的汇编指令。

VB6 运行时

Visual Basic 程序会借助 MSVBVM60 等运行时例程执行初始化、字符串处理和对象操作。

我在导入表看到 ThunRTMain、__vbaStrCopy 等名称,结合代码理解字符串如何被加载。

Crackme 常用判断

参数比较、条件跳转、文件名检查和简单编码都可能影响程序的成功分支。

Crackme1 通过 strcmp 判断口令;Crackme2 还检查程序名,并用 XOR 0x42 还原提示文本。

1.2 恶意代码与网络取证

知识点

关键内容

用在哪里

后门与远程访问木马

这类程序通常具有远程指令处理、文件操作或维持访问能力。分析时要把潜在功能与已发生的行为区分开。

RaDa 的 CGI 路径、命令解释器及自启动字符串帮助我判断它可能具有的功能。

病毒、蠕虫

病毒往往依靠感染文件复制;蠕虫可以利用网络弱点传播。

我把 RaDa 的程序功能与 PCAP 中的 SQL Slammer 传播流量分别分析,没有混成同一种行为。

PCAP 文件

PCAP 记录已捕获的数据包,时间、协议、源目的地址和负载可以用于还原通信经过。

我用 capinfos 看总体情况,再用 TShark/Wireshark 筛选 IRC、HTTP、UDP 1434 和 SMB。

IRC 通信

IRC 客户端可用 NICK、USER 注册,用 JOIN 加入频道,PRIVMSG 发送消息;常见端口是 TCP 6667。

我追踪到 209.196.44.172:6667 的 IRC 会话,查看了欢迎信息、频道名单与消息正文。

NBNS 与 SMB

NBNS 可查询 NetBIOS 名称;SMB 通过会话请求和共享连接请求访问网络共享。

我把 NBSTAT 查询、响应与 TCP 139 上的 SMB Tree Connect 请求联系起来分析。

证据判断

报文里出现目标路径、命令或错误码,只能先说明对应字段出现过;还要查看双方是否有后续交互。

在 HTTP 和 SMB 部分,我追踪了 TCP 流,再判断现有抓包能说明什么。

2. 实验内容

这次实验分为四个部分。我先识别并脱壳 RaDa,再完成两个 Crackme 的逆向验证;随后围绕 RaDa 回答八个分析问题,最后对给定的蜜罐 PCAP 回答七个取证问题。

部分

已完成内容

主要工具

任务一

识别 RaDa 的文件类型、运行平台和壳,完成脱壳与字符串提取,并找出样本中声明的作者。

PowerShell、PEiD、VMUnpacker、IDA

任务二

找出 Crackme1、Crackme2 输出成功信息所需的条件,说明判断过程并实际运行验证。

IDA、Windows 命令行

任务三

围绕 RaDa 依次分析文件摘要、用途、特性、反分析手段、类别、相似工具、作者和至少五种检测方法。

IDA、文件哈希及公开资料

任务四

分析 Windows 2000 蜜罐的 PCAP,重点回答 IRC、僵尸网络规模、攻击来源、漏洞类型和攻击结果。

Kali、Wireshark、TShark、Python

3. 实验过程

3.1 任务一:RaDa 文件识别、脱壳与字符串提取

(1)先确认样本和文件信息

我先把 RaDa 文件解压到 Windows 10 虚拟机中,之后将这一部分的工作目录统一放在 C:\lab4\samples\rada。最开始做 Crackme 时用过 C:\lab3,所以前几张界面的目录与后面的不同;后续分析都围绕同一组实验样本进行。

我在 PowerShell 中查看 RaDa.exe 的文件大小、MD5 和 SHA256,并保存输出。原文件为 20,992 字节,MD5 是 CAAA6985A43225A0B3ADD54F44A0D4C7。再用 PEiD 打开它,工具检测到 UPX 壳特征,入口点落在 JDR1 段。结合 Windows PE 文件结构,可以得出它是一个面向 Windows 的 32 位可执行程序。

cd C:\lab4\samples\rada

Get-Item .\RaDa.exe | Select-Object Name,Length,LastWriteTime

Get-FileHash .\RaDa.exe -Algorithm MD5 | Format-List

Get-FileHash .\RaDa.exe -Algorithm SHA256 | Format-List

图41 Kali 安装 tcpflow 时出现代理连接超时

解决五: 我发现 Wireshark 已经能够打开所需会话,于是没有继续折腾软件源,而是用 Follow TCP Stream → Save As 导出 irc_1539.txt,再通过 Python 统计不同昵称和主机标识。最终拿到了 Q4 的具体数量,并生成了可复查的 q4_hosts.txt 和 q4_statistics.txt。

5. 学习感悟、思考等

做完实验四,我印象最深的不是某一条命令,而是自己几次改变判断的过程。

最开始我以为 RaDa 被 PEiD 识别为 UPX,就能直接运行 UPX 解包。真正动手后,工具先报错,换用 VMUnpacker 又遇到 IDA 地址映射警告。我没有把“脱壳成功”四个字当作终点,而是继续核对文件大小、入口和字符串,并从 URL、注册表路径一步步跟到代码。以前看 IDA 中一大页汇编,我很容易迷失;现在至少知道可以先抓住有意义的字符串,再通过引用关系进入对应的处理位置。

Crackme2 也让我记得很清楚。口令已经对了,程序还是报身份错误,我起初只盯着输入内容,后来看出它还检查程序名。找到 crackmeplease.exe 这个条件并完成验证后,我才真正理解:一道逆向题的关键条件可能分散在不同位置,不能凭一条提示就急着下结论。

PCAP 取证的工作量更大。面对五万多个数据包,我一开始只是试着切换过滤器,结果越看越乱。后来先统计总体信息,再按 IRC、UDP1434、NBNS、HTTP、SMB 分开检查,思路才清晰起来。第 33 帧的 376 字节载荷、第 12 帧的 NBSTAT 响应、第 8 帧的 SMB 共享路径,都是我一步步展开协议字段才找到的。尤其是 Q4 的 4752 和 5573,我曾经以为选一个数字就能回答题目,真正做去重后才意识到,统计方法本身就决定了这个数字能说明什么。

我还学会了处理工具故障:挂载失效要检查共享目录,TShark 告警要先缩小范围,安装工具失败时也能考虑现成工具的其他功能。这些排障过程花费了不少时间,但正因为留下了错误界面和修复后的结果,后来整理报告时才有完整的操作经过。

参考资料

[1] Oikarinen J., Reed D. Internet Relay Chat Protocol. RFC 1459, 1993. https://www.rfc-editor.org/rfc/rfc1459.html

[2] CAIDA. Analysis of the Sapphire Worm. https://www.caida.org/archive/sapphire/

[3] Moore D., Paxson V., Savage S., et al. The Spread of the Sapphire/Slammer Worm. CAIDA, 2003. https://www.caida.org/catalog/papers/2003_sapphire/

[4] Microsoft. MS01-033: Unchecked Buffer in Index Server ISAPI Extension. https://learn.microsoft.com/en-us/security-updates/securitybulletins/2001/ms01-033

[5] MITRE ATT&CK. PoisonIvy (S0012). https://attack.mitre.org/software/S0012/

[6] MITRE ATT&CK. njRAT (S0385). https://attack.mitre.org/software/S0385/

[7] MITRE ATT&CK. DarkComet (S0334). https://attack.mitre.org/software/S0334/

[8] Wireshark. User's Guide: Following Protocol Streams. https://www.wireshark.org/docs/wsug_html_chunked/ChAdvFollowStreamSection.html