当前位置: 首页 > news >正文

20251903 2025-2026-2 《网络攻防实践》第八周作业

一、实践内容

1、实验应达到的目标

1.1 动手实践任务一(Rada 恶意代码样本基础分析)

能独立用 PEiD、file 等工具,准确识别 rada 恶意代码样本的文件格式、运行平台和加壳工具类型;会用超级巡警脱壳机完成 rada 样本脱壳,还能验证脱壳结果是否有效;能用 Strings 工具提取脱壳后样本的有效字符串,精准找到代码作者信息;初步理解 PE 文件结构和加壳 / 脱壳原理,梳理出 “文件识别→脱壳→字符串提取→关键信息获取” 的恶意代码初步分析流程。

1.2 动手实践任务二(Crackme 程序逆向分析)

在 WinXP Attacker 虚拟机中配置并使用 IDA Pro 加载 crackme1.exe 和 crackme2.exe;掌握 IDA Pro 静态反汇编和动态调试两种分析方法,能根据程序复杂度选对应的策略;找到两个 Crackme 程序的输入验证逻辑,找出能让程序输出成功信息的输入值并验证;理解 Windows 可执行程序的运行机制和输入验证逻辑,形成 “静态定位→动态验证→结果输出” 的逆向分析闭环。

1.3 分析实践任务一(Rada 恶意代码深度分析与报告撰写)

能生成 rada 恶意代码的完整文件摘要(含哈希值、PE 元信息、依赖库等);通过静态 + 动态分析还原 rada 核心功能,明确其设计目的和危害;识别 rada 的网络通信、持久化、隐蔽性等技术特性;拆解 rada 的加壳、反调试、字符串加密等反分析技术并说明原理;给 rada 恶意代码分类并阐述理由;调研 3 种以上和 rada 功能类似的恶意工具,对比核心差异;梳理 rada 作者溯源的线索,明确溯源所需环境和限制因素。

1.4 分析实践任务二(Windows 2000 僵尸网络流量分析)

能说清 IRC 协议的定义、客户端加入 IRC 网络的流程及常用 TCP 端口;理解僵尸网络的定义、核心架构和典型应用场景;用 Wireshark/Snort 分析蜜罐日志,提取蜜罐主机([172.16.134.191](172.16.134.191))通信过的 IRC 服务器地址;通过流量统计去重,算出访问 [209.196.44.172](209.196.44.172) 僵尸网络的不同主机数量;从日志中筛选攻击蜜罐的源 IP 地址;结合流量特征和漏洞库,识别攻击者尝试利用的安全漏洞;还原攻击成功的全过程,分析根本原因并给出防护建议。

2、各实验核心知识点

2.1 动手实践任务一核心知识点

  • 恶意代码文件识别:PE 文件由 DOS 头、DOS 存根、PE 头、节区表、节区数据构成,DOS 头 “MZ” 标识、PE 头 Machine 字段可区分 32/64 位运行平台;加壳是压缩 / 加密 PE 文件,压缩壳(如 UPX)会在文件头部加解压缩代码,加壳文件节区少、有专属节区名称;PEiD 靠特征码匹配识别壳,file 命令通过文件头魔数判断文件类型。

  • 脱壳技术:超级巡警脱壳机先加载文件到内存运行,追踪找到原始入口点(OEP),转储内存中的 PE 镜像并修复导入表等,生成脱壳文件;验证脱壳成功可看 PEiD 无加壳标识、节区数量恢复正常、文件能正常运行、Strings 提取到更多有效字符串。

  • 字符串提取:Strings 工具扫描二进制数据提取可打印字符,常用\-n 8过滤短字符串;重点筛选身份(Author、Contact 等)、网络通信(IP、URL 等)、系统操作(Registry、CreateFile 等)、错误提示类敏感字符串。

2.2 动手实践任务二核心知识点

  • IDA Pro 逆向基础:控制台程序可通过搜索 “Input”“Password” 等交互字符串、跟踪入口点定位主函数;交叉引用能快速找到函数 / 字符串的调用关系;F5 伪代码可将汇编转为 C 风格代码,但复杂代码需结合原始汇编分析。

  • 静态分析:简单 Crackme 的正确密钥常硬编码,找到 strcmp、memcmp 等比较函数的调用位置就能获取;分析导入表可快速判断程序功能(如导入 ws2_32.dll 说明有网络功能)。

  • 动态分析:IDA Pro 有软件、硬件、条件三种断点,分别适用于不同场景;调试时重点看 EIP(指令指针)、EAX(函数返回值)、ESP(栈顶)、EBP(栈帧底)等寄存器,查看栈内存可获取函数参数和返回地址。

2.3 分析实践任务一核心知识点

  • 恶意代码摘要:MD5、SHA1、SHA256 等哈希值是恶意代码的唯一 “数字指纹”,SHA256 抗碰撞性最强;PE 元信息(编译时间、路径等)、节区信息、依赖库能辅助判断程序编译信息、是否加壳、功能模块。

  • 反逆向工程技术:反调试可通过查 BeingDebugged 标志、远程调试器检测、时间差检测实现;花指令是插入的无效指令,干扰反汇编结果;字符串加密常用 XOR 算法,运行时动态解密避免被 Strings 提取。

  • 恶意代码分类:病毒需感染文件、手动运行传播;蠕虫自主扫描漏洞传播,无用户交互;木马伪装正常程序,用于远程控制 / 数据窃取,无自主传播能力;勒索软件加密文件索赎金;间谍软件偷偷收集敏感信息。

2.4 分析实践任务二核心知识点

  • IRC 协议:客户端连服务器后,依次发 NICK、USER 命令完成注册,再用 JOIN 加入频道、PRIVMSG 通信;IRC 僵尸网络靠攻击者控制的服务器和频道,向僵尸机广播指令。

  • 僵尸网络生命周期:分感染(植入程序)、加入(连控制服务器)、控制(发指令)、执行(DDoS / 挖矿等)、更新(升级程序)阶段。

  • 网络流量分析:Wireshark 可按协议、IP、端口等过滤流量(如过滤 6665-7000 端口找 IRC 流量);能识别不同攻击的流量特征(如 MS08-067 攻击针对 445 端口发 SMB 请求)。

二、实践过程

1、动手实践任务一:Rada 恶意代码样本分析

1.1 环境准备

本次实验选用Win2kServer_SP0_target虚拟机做为靶机,其IP地址为192.168.200.124,首先需要将学习通里的rada.exe文件在本地解压好(windows11的自带系统解压不了,360解压又不断出错,必须将主机上的病毒检测防火墙关闭以后,才可以借用解压软件解压),解压包的密码为rada,在解压到主机的桌面以后直接拖拽进准备好的虚拟机中即可。

屏幕截图 2026-05-12 195912

1.2 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具

首先,在命令行里输入

file RaDa.exe

命令,试图识别文件的类型,但实验的开始我出现了无法识别的情况,后我在用ls命令排查了文件的具体位置,再用cd命令切换到文件所在目录,再重新执行该命令后,成功识别文件信息(具体操作见第三节学习中遇到的问题以及相应的解决措施中的动手实践任务一问题)。

屏幕截图 2026-05-12 210103

image-20260512210152613

输出结果为RaDa.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit,在这其中RaDa.exe是本次实验分析的恶意代码样本文件名;PE32 executable表明该文件采用Windows系统标准的可移植执行文件(PE)格式,属于32位PE文件;for MS Windows (GUI)说明该程序是专门针对微软Windows系统开发的图形界面(GUI)程序,无法直接在Linux、macOS等其他操作系统上运行,运行时会弹出可视化窗口;Intel 80386代表程序基于32位x86指令集架构编译,可在搭载主流Intel、AMD处理器的计算机设备上运行;

其次,在命令行里输入

string RaDa.exe

在执行该命令后,由于输出多为乱码,猜测该样本处于加壳状态,因为仅提取到程序标识ORaDa,无法直接获取作者信息,所有需先脱壳再进行字符串提取。

image-20260512214528165

于是之后我点开菜单栏里的PE菜单选择PEiD选项中的PEiD_应用打开

image-20260512212934147

最后,在该软件中的文件选择对话框中我找到并选择RaDa.exe ,PEiD 自动扫描文件并显示识别结果,主界面结果显示:该文件入口点地址为0000FD20,文件偏移为00004120,连接器版本为 6.0,属于 Win32 图形界面程序,EP 段为JDR1,首字节特征为60, BE, 00, C0;关键识别结果为该样本使用了UPX 0.89.6 - 1.02 / 1.05 - 2.90 版本的压缩壳,壳的开发者为 Markus & Laszlo,这也解释了此前直接执行strings命令只能提取到乱码的原因,为后续使用超级巡警脱壳机进行脱壳处理提供了明确依据。

image-20260512213102561

1.3 脱壳处理(超级巡警脱壳机)

首先打开超级巡警脱壳机,点击 “选择文件”将 RaDa.exe文件导入;

之后点击“给我脱”,工具自动识别 UPX 壳并解压缩代码段,脱壳成功后,其脱壳的输出路径与RaDa.exe在同一目录,该文件的名字为RaDa_unpacked.exe

image-20260512215736552

最后再次打开用 PEiD v0.95加载RaDa_unpacked.exe,界面显示 “Microsoft Visual Basic 5.0/6.0”(无壳标识),确认脱壳成功。

image-20260512220142867

1.4 字符串提取与作者信息识别

首先在命令行中输入命令

string RaDa.exe

使用字符串提取工具对脱壳后的RaDa_unpacked.exe进行分析

image-20260512220521190

但上述方法并未发现该恶意代码的编写作者,因此我选用另一个工具IDA。之后我点开菜单栏里的反汇编菜单选择IDA Pro Free选项中的IDA Pro Free应用打开,之后点击go将RaDa_unpacked.exe拖入软件中进行分析。

image-20260512220943490

成功找到作者信息和发布时间,结果显示作者为 DataRescue sa/nv,邮箱为 ida@datarescue.com 。

image-20260512221200138

2、动手实践任务二:Crackme 程序分析(IDA Pro)

2.1 环境准备

本次实验选用Win2kServer_SP0_target虚拟机做为靶机,其IP地址为192.168.200.124,首先需要将学习通里的crackme1.exe和crackme2.exe在解压到主机的桌面以后直接拖拽进准备好的虚拟机中。

之后执行

md5sum crackme1.exe
md5sum crackme2.exe
file crackme1.exe
file crackme2.exe

image-20260518143914436

这四条命令,是 Crackme 程序分析实验的前置基础操作,核心目的为文件完整性校验与文件属性识别。

第一通过 md5sum 命令计算 crackme1.execrackme2.exe 的 MD5 哈希值,md5sum 是基于 MD5 哈希算法的文件校验工具,可生成文件唯一的数字指纹,本次操作已成功得到两个程序的专属哈希值,后续可通过比对预设值快速验证样本是否存在篡改、损坏或传输错误,保障实验样本的原始性与完整性;

第二再通过 file 命令检测文件核心属性,结果明确两个文件均为适配 32 位 Windows 系统的控制台 PE 可执行文件,验证了样本完全兼容 Windows XP Attacker 虚拟机环境与 IDA Pro 32 位调试工具,为后续静态反汇编、动态调试分析提供了合规可靠的实验前提。

2.2 Crackme1.exe 分析

第一步,我先在命令行里依次输入

crackme1.exe 1
crackme1.exe 1 2
crackme1.exe 1 2 3

三条命令,向程序传入不同的错误参数进行初步探索。
输出结果分别为:

Pardon? What did you say?
I think you are missing something.
I think you are missing something.

实验得到的结果表明程序对输入参数有严格的校验规则:单个参数会触发第一个错误提示,两个及以上参数会触发第二个错误提示,但简单的数值参数无法通过验证,因此我还需要通过打开IDA Pro程序进行进一步验证。

image-20260518144421423

第二步,我点开菜单栏里的反汇编菜单选择IDA Pro Free选项中的IDA Pro Free应用打开,并将crackme1.exe文件拉入该程序之中。

屏幕截图 2026-05-18 162212

第三步,我保持默认加载选项,等待程序自动分析完成。 自动分析完成后,在IDA ViewA中调出 Strings 字符串查看窗口进行检索查看,发现在字符串窗口内一共检索识别出四处关键程序内置字符串,具体内容分别为:I think you are missing somethingI know the secretPardon? What did you say?You know how to speak to programs,Mr.Reverse—Engineer

结合前期命令行输入不同参数运行程序得到的返回结果,我进行对照猜测分析。其中Pardon? What did you say?为程序判定输入参数数量达标,但输入参数内容错误时弹出的提示语句,由此进一步合理推测I know the secret就是该程序用于验证解锁的正确口令,而You know how to speak to programs,Mr.Reverse—Engineer则是使用者输入正确口令后,程序运行成功所输出的成功提示信息,I think you are missing something为输入参数数量不足、参数格式错误时程序弹出的错误提醒语句。

image-20260518145358340

第四步,为验证上述猜测,我在反汇编窗口中右键点击I know the secret,选择Edit function选项,打开函数编辑对话框。 实验结果显示,该函数的起始地址为.text:00401280,结束地址为.text:0040132C,局部变量区大小为0x8字节,保存寄存器大小为0x4字节,并且勾选了BP based frame选项。 通过查找相关资料得知,这表明sub_401280是一个标准的基于 EBP 寄存器的栈帧函数,符合 C 语言编译生成的函数结构特征,进一步验证了该函数是程序中一个独立的、功能完整的验证逻辑单元。

image-20260518145444795

第五步,我在Graphs子菜单中点击Function calls选项,生成crackme1.exe的全局函数调用图。

image-20260518145634765

image-20260518150013971

在全局函数调用图中找到sub_401280函数的节点,放大查看其向下的调用分支。

实验结果显示,sub_401280函数直接调用了 5 个函数:sub_401510(自定义子函数)、strcmp(字符串比较函数)、fprintf(格式化输出函数)、sub_401840(自定义子函数)、printf(标准输出函数)。

通过查找相关资料得知,,strcmp函数的存在直接表明程序采用了字符串比较的方式进行输入验证,这是破解该 Crackme 程序的关键突破口;而fprintfprintf函数则用于向控制台输出不同的验证结果提示信息。

image-20260518150122072

第六步,点击 IDA Pro 主界面下方的Functions标签页,打开函数列表窗口。

实验结果显示,该窗口列出了crackme1.exe程序中所有的函数,包括系统导入函数和自定义函数,每个函数都显示了其所在段、起始地址和长度信息。在函数列表中可以清晰地找到sub_401280函数,查看该函数的汇编源码可得其汇编码为401280

image-20260518150800095

第七步,回到IDA View A页面,将光标定位到sub_401280函数内部的任意位置,然后在View菜单中的Graphs子菜单中点击Flow chart选项,生成该函数的控制流图。

实验结果显示,该函数的控制流图包含三层清晰的条件判断分支:

  1. 第一层判断:检查命令行参数数量是否为 2,如果不是,跳转到输出 I think you are missing something. 的分支;

  2. 第二层判断:调用strcmp函数,将用户输入的第二个参数与硬编码字符串 I know the secret 进行比较,如果不相等,跳转到输出Pardon? What did you say? 的分支;

  3. 第三层分支:只有当参数数量为 2 且输入字符串与硬编码值完全匹配时,才会进入输出成功信息的分支 I know the secret。

image-20260518151447428

最后一步,回到命令提示符窗口,输入指令

crackme1.exe "I know the secret"

命令,向程序传入通过静态分析提取到的正确输入参数。

实验结果显示,程序成功输出:

You know how to speak to programs, Mr. Reverse-Engineer

该结果与静态分析的预期一致,验证了通过 IDA Pro 反汇编分析、函数调用图和控制流图分析提取正确密钥的方法可以完成对于crackme1.exe的静态分析与破解任务。

image-20260518151611236

2.3 Crackme2.exe 分析

​ 对crackme2.exe的分析与对crackme1.exe的分析类似。

第一步,我先在命令行里依次输入

crackme1.exe 1
crackme1.exe 1 2
crackme1.exe 1 2 3

三条命令,向程序传入不同的错误参数进行初步探索。
输出结果分别为:

I have an identity problem.
I think you are missing something.
I think you are missing something.

实验得到的结果表明程序对输入参数有严格的校验规则:单个参数会触发第一个错误提示,两个及以上参数会触发第二个错误提示,但简单的数值参数无法通过验证,因此我还需要通过打开IDA Pro程序进行进一步验证。

image-20260518192637893

第二步,我们点开菜单栏里的反汇编菜单选择IDA Pro Free选项中的IDA Pro Free应用打开,并将crackme2.exe文件拉入该程序之中。

第三步,我保持默认加载选项,等待程序自动分析完成。 自动分析完成后,在IDA ViewA中调出 Strings 字符串查看窗口进行检索查看,发现在字符串窗口内一共检索识别出五处关键程序内置字符串,具体内容分别为:I think you are missing somethingcrackmeplease.exe I have an identity problemI know the secretPardon? What did you say?

结合前期命令行输入不同参数运行程序得到的返回结果,我进行对照猜测分析:其中I have an identity problem对应输入单个参数时的错误提示,I think you are missing something对应输入两个及以上参数时的错误提示;由此可判断,程序首先会校验命令行参数的数量,参数数量不符合要求时会输出对应的错误语句;而Pardon? What did you say?则推测为参数数量正确,但输入内容不匹配时的提示信息;I know the secret极有可能是程序预设的正确验证口令,crackmeplease.exe 在此时暂时不知道有何作用。

image-20260518193152051

第四步,为验证上述猜测,我在反汇编窗口中右键点击I know the secret,选择Edit function选项,打开函数编辑对话框。 实验结果显示,该函数的起始地址为.text:00401280,结束地址为.text:0040139D,局部变量区大小为0x18字节,保存寄存器大小为0x4字节,并且勾选了BP based frame选项。与实验1中的sub_401280函数相似,它也是一个标准的基于 EBP 寄存器的栈帧函数。进一步验证了该函数在程序中也是一个独立的、功能完整的验证逻辑单元。

image-20260518194201943

第五步,我在Graphs子菜单中点击Function calls选项,生成crackme2.exe的全局函数调用图。

image-20260518194728961

在全局函数调用图中找到sub_401280函数的节点,放大查看其向下的调用分支。

实验结果显示,sub_401280函数直接调用了 6 个函数:fprintf(格式化输出函数)、strcmp(字符串比较函数)、putchar(单个字符输出函数)、puts(字符串输出函数)、sub_4018B0(自定义子函数)、sub_401580(自定义子函数);其中sub_401580函数又进一步调用了sub_401250(自定义子函数)。

通过查找相关资料得知,strcmp函数的存在直接表明程序采用了字符串比较的方式进行输入验证,这是破解该 Crackme 程序的关键突破口;而fprintfputcharputs等输出类函数,用于向控制台输出不同的验证结果提示信息,与前期字符串窗口中发现的多组提示语句形成对应;自定义子函数sub_4018B0sub_401580sub_401250则承担着参数预处理、辅助校验等内部逻辑,进一步支撑了程序的完整验证流程。

image-20260518194823147

第六步,回到 IDA View A 页面,将光标定位到sub_401280函数内部的任意位置,然后在View菜单中的Graphs子菜单中点击Flow chart选项,生成该函数的控制流图。

实验结果显示,该函数的控制流图包含三层层层递进的条件判断分支,完整还原了程序的验证逻辑:

  1. 第一层判断、参数数量校验,程序首先通过指令cmp [ebp+arg_0], 2检查命令行参数数量是否为 2:

    若参数数量不等于 2(false 分支),直接跳转到输出I think you are missing something.的分支,结束验证流程;

    若参数数量等于 2(true 分支),则进入下一层判断。

  2. 第二层判断、程序身份校验,程序调用strcmp函数,将程序自身名称(argv[0])与硬编码字符串crackmeplease.exe进行比较:

    若二者不相等(false 分支),跳转到输出I have an identity problem.的分支,结束验证流程;

    若二者相等(true 分支),则进入下一层判断。

  3. 第三层判断、输入口令校验,程序再次调用strcmp函数,将用户输入的第二个参数(argv[1])与硬编码字符串I know the secret进行比较:

    若二者不相等(false 分支),跳转到输出Pardon? What did you say?的分支,结束验证流程;

    若二者完全匹配(true 分支),则进入最后一层内部状态校验。

  4. 第四层判断、内部状态值校验(反破解防护),程序执行mov \[ebp\+var\_4\], 0初始化内部状态变量后,通过指令cmp [ebp+var_4], 21h将该变量与十六进制值0x21(十进制 33)进行比较:

    • 若内部状态值大于0x21(true 分支),跳转到异常处理分支,执行单个字符输出逻辑后直接结束程序;

    • 若内部状态值小于等于0x21(false 分支),则最终进入成功分支,调用puts函数输出预设的验证成功信息,完成全部验证流程。

image-20260518194409160

第七步,回到命令提示符窗口,输入指令

crackme2.exe "I know the secret"

尝试使用原文件名crackme2.exe传入正确口令运行程序,实验的最初输出结果为

I have an identity problem.

该结果与控制流图分析的第二层判断完全一致,验证了程序确实存在文件名身份校验机制:当程序运行文件名与硬编码的crackmeplease.exe不匹配时,即使输入正确口令也会触发身份错误提示。

之后,执行文件复制重命名命令,将crackme2.exe复制并重命名为程序要求的crackmeplease.exe

copy crackme2.exe crackmeplease.exe

再之后,使用符合身份校验要求的文件名,再次传入指令

crackmeplease.exe "I know the secret"

实验的最终输出结果为

We have a little secret: Chocolate

该结果与静态分析的预期一致,不仅验证了I know the secret是正确的用户口令,同时也完整验证了程序包含的参数数量校验、文件名身份校验、用户口令校验、内部状态校验四层验证逻辑正确,证明通过 IDA Pro 反汇编分析、全局函数调用图梳理、核心函数控制流图拆解的方法能够准确破解带有多重防护机制的 Crackme 程序,可以完成对于crackme2.exe的静态分析与破解任务。

image-20260518201058859

3、分析实践任务一:Rada 恶意代码样本深度分析

3.1 RaDa 样本动态与静态分析过程

首先我使用md5sum命令生成并校验样本的 MD5 哈希值,用于唯一标识该样本:

md5sum RaDa.exe

image-20260519131943646

得到的实验输出结果为:

caaa6985a43225a0b3add54f44a0d4c7 *RaDa.exe

通过查询相关资料得知,该哈希值是识别同一样本的核心依据,任何对样本的修改都会导致哈希值发生变化。

其次,我点开菜单栏里的监视工具菜单选择Process Explorer 工具打开,开启进程监听,双击运行RaDa_unpacked.exe,之后右击打开的RaDa_unpacked.exe,选择菜单栏中的Properties子菜单,打开后选择string选项。

image-20260519132758491

image-20260519141908967

打开String,看监听信息可知,该恶意软件先访问了http://10.10.10.10/RaDa这个网站,通过cgi-bin目录下的download.cgiupload.cgi两个接口和服务器交互,将RaDa_commands.html下载到了C:\RaDa\tmp目录,用来接收攻击者下发的指令。

屏幕截图 2026-05-20 192340

之后,它在C盘创建了两个隐藏目录:C:\RaDa\bin用来存放自身副本,C:\RaDa\tmp用来保存下载的文件、临时数据和偷取的信息。与此同时,其还往HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run里写入了RaDa的开机启动项(类型为REG_SZ)。这里的Starting DDoS Smurf remote attack可以发现该恶意程序似乎对主机实行了DDos拒绝服务攻击

image-20260519144647324

接着它修改了系统注册表,用到了Wscript.Shell对象的RegWriteRegReadRegDelete三个方法,与之前的操作结合,不仅确保电脑重启后自动运行,还支持读取系统配置、删除注册表项来清除攻击痕迹。

image-20260519144822284

再之后,其探测了三大内网网段,即192.168172.1610开头的内网地址,同时通过WMI查询Win32_NetworkAdapterConfiguration信息,获取主机的MAC地址、IP地址等完整网络配置,为后续内网渗透做准备。

image-20260519150947811

该文件运行时会在主机执行getputscreenshot等关键指令:get表示将攻击者服务器的文件下载到目标主机;put表示将目标主机的文件上传至攻击者指定的主机,还用到了第三方开源的文件上传脚本实现这一功能;screenshot表示对当前主机屏幕内容截图,窃取用户信息;还能通过Scripting.FileSystemObject管理文件、用Wscript.Shell执行系统命令,甚至能控制主机上的IE浏览器,同时用sleep控制请求服务器的频率,不容易被防火墙发现。

image-20260519151018192

此外,还能在这里看到作者的完整信息,该程序是Scan Of The Month 32 (SotM) - September 2004公开项目的样本,作者为Raul Siles & David Perez,于2004年编写了此恶意软件,同时还能看到它的配置页面、使用说明等相关字符串。

屏幕截图 2026-05-19 133917

之后,在程序运行半分钟左右后,我检查系统文件发现,果然在C盘根目录上自动创建了C:\RaDa\binC:\RaDa\tmp两个隐藏目录。进一步验证的实验结果的分析正确性

image-20260519134031076

image-20260519134049735

最后,我打开IDA Pro Free,将RaDa_unpacked.exe拖入其中,再在 IDA Pro 主界面下方的Strings标签页,在Edit菜单栏的Setup子菜单中,设置类型为 Unicode。

屏幕截图 2026-05-19 133401

查看Strings信息参数,可以看到作者和日期信息与我之前查到的一致,证明该实验得到的结果真实有效。

image-20260519140702309

3.2 RaDa样本核心问题解答

根据上述实验得到的结果,我对以下七个需要详细阐述的问题做了总结

1. 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息;
信息项 详情
MD5 哈希值 caaa6985a43225a0b3add54f44a0d4c7
文件名 原始文件名RaDa.exe
文件类型 Windows 32 位图形界面可执行文件(PE32 GUI)
编译 / 发布时间 2004 年 9 月
运行环境 以 Windows XP 为主的 32 位 Windows 系统
核心标识 Scan Of The Month 32 (SotM) - September 2004
技术栈 C 语言主程序 + VBScript 第三方组件混合开发
运行模式 支持 13 种命令行参数,可灵活配置安装、运行与通信参数
用途分类 开源渗透测试 / 远程控制后门工具
2. 找出并解释这个二进制文件的目的

该程序是 2004 年发布的开源 Windows 渗透测试攻击工具,核心目的是通过 HTTP 协议连接到 10.10.10.10 主机下的 RaDa 网页页面,从中获取并解析远程控制命令,完成文件上传下载、内网探测等操作,还可执行 DDoS 攻击,以此实现对受害主机的远程操控,属于典型的后门攻击程序。

3. 识别并说明这个二进制文件所具有的不同特性;

该程序可以发起 DDoS 拒绝服务攻击,支持对系统注册表进行读写和删除操作,能够执行各类系统命令、完成电脑本地文件读写传输,还具备桌面屏幕截图功能,运行后自动创建专属文件夹存放文件,同时能够主动探测 192.168、172.16、10 三大常用内网网段。

4. 识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术;

该恶意程序采用 UPX 加壳方式保护程序本体,让原始代码难以直接查看分析,还设置虚假攻击提示字符串混淆分析思路,掩盖自身远程控制的真实功能,以此阻碍安全人员对程序开展逆向分析与行为研判。

5. 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由;

我认为该恶意代码样本属于远程控制后门,理由是它不具备病毒的文件感染能力,无法主动感染其他文件;也没有蠕虫的主动传播机制,不具备邮件传播、漏洞利用传播、U 盘传播等模块,必须依靠攻击者手动植入目标主机;其核心目的并非自我复制或扩散,而是通过在目标主机上建立持久化的远程访问通道,接收并执行攻击者下发的指令,实现对目标主机的隐蔽控制与信息窃取,完全符合远程控制后门的定义与特征。

6. 给出过去已有的具有相似功能的其他工具;

和该样本功能相近的老牌恶意工具为 Bobax,该工具同样依托 HTTP 协议连接远程服务器获取控制指令,执行各类主机操控行为,整体使用方式与攻击功能和此样本基本一致。除此之外,还有渗透测试框架 Cobalt Strike 的 Beacon 模块,其通过 HTTP/HTTPS 协议实现远程控制、指令下发与文件传输,用途与技术架构和 RaDa 高度相似。

7. 可能调查处这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

可以调查出该二进制文件的开发作者,程序内部明文留存作者信息为 Raul Siles & David Perez,只需保证使用原版未改动的程序样本,程序内版权与作者相关字符串没有被删除篡改,就能通过IDA反汇编工具、strings字符串提取工具等直接确定开发作者信息。

4、分析实践任务二:Windows 2000 僵尸网络(Snort 日志分析)

4.1、IRC是什么?当IRC客户端申请加入一个IRC网络时将发送那个消息?IRC一般使用那些TCP端口?

IRC(Internet Relay Chat,互联网中继聊天) 是一种明文即时通讯的应用层协议,用户通过客户端连接IRC服务器后,需依次发送 USER(用户信息)、NICK(昵称)、PASS(口令)等消息申请加入网络,随后通过 JOIN #频道名 进入指定聊天频道进行群组通信。IRC默认使用 TCP 6667 端口(明文传输),加密传输则使用 TCP 6697 端口(SSL)。其特点是速度快、延迟低、占用带宽小,所有用户在"Channel"(频道)内以不同昵称就某一话题进行交谈。

4.2、僵尸网络是什么?僵尸网络通常用于什么?

僵尸网络(Botnet) 是攻击者通过恶意程序(僵尸程序/Bot)批量感染并控制大量联网主机所形成的一对多集中管控的受控主机集群,被控主机隐蔽驻留,等待攻击者通过统一指令下达操作。僵尸网络通常用于发起 DDoS/DoS分布式拒绝服务攻击、批量发送 垃圾邮件(并隐藏发送者IP)、恶意挖矿、窃取用户 隐私与账号密码 等恶意活动。值得注意的是,僵尸网络常常利用 IRC协议作为其命令与控制(C&C)通信通道,攻击者通过IRC服务器向所有受控主机下发攻击指令,实现高效的远程集中操控。

4.3、蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?

首先先在学习通上将botnet_pcap_file.dat数据包下载到主机的桌面,之后将其拖到wireshark的命令行中打开,之后再根据虚拟机上的地址 '/var/run/vmblock-fuse/blockdir/iXX05x/botnet_pcap_file.dat'找到对应的文件,将其先拖到虚拟机的桌面后,再将其放到wireshark中进行分析。

image-20260519210713766

其次,由于通过之前分析,得到输入的筛选条件应当为筛选源地址为蜜罐主机的IP地址,目的端口为6667的包。即过滤条件应当设置为

ip.src == 172.16.134.191 && tcp.dstport ==6667

因此我们经过筛选可以得到五个IP地址,分别为209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172

最终可以得到蜜罐主机(IP地址:172.16.134.191)分别与这些IRC服务器进行了通信。

image-20260519211201199

image-20260519211635009

4.4、在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?

首先需要在命令行中安装tcpflow,该工具是后续分析的基础,具体的指令为

sudo apt-get install tcpflow

image-20260520111452791

其次为了读取离线的流量捕获文件(pcap 格式),因此我选择只过滤与 IP 地址209.196.44.172相关的流量,并进一步过滤端口为6667的流量(由之前可知该端口为IRC 协议默认明文端口),具体的指令为:

tcpflow -r botnet_pcap_file.dat host 209.196.44.172 and port 6667

由上述指令,我得到了一个文件report.xml

image-20260520112048164

在搜索栏里,找到该文件将其打开后,我获知了以下信息,具体包括:

通信双方的完整 IP 与端口:僵尸主机172.16.134.191(本地端口 1152)与 IRC 僵尸网络 C2 服务器209.196.44.172(服务端口 6667)

以及通信双方的 MAC 地址、精确通信时间、双向流量统计和网络传输状态等。

image-20260520112326665

最后,我输入以下指令

sudo 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

读取 IRC C2 服务器下发的流量文件,过滤出服务器返回的频道在线用户列表消息,并剥离所有 IRC 协议头和冗余格式,将空格分隔的僵尸昵称拆分为单行,清理换行符和空行,去重后统计到总共进行通信的主机为3461个。

image-20260520112841878

4.5、那些IP地址被用于攻击蜜罐主机?

为了找出所有连接主机的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 > yht.txt;wc -l yht.txt

读取离线的僵尸网络 pcap 流量文件,过滤出所有发往受害僵尸主机172.16.134.191的数据包,提取所有与该主机通信的源 IP 地址并剥离端口号,去除重复的 IP 地址后将唯一 IP 列表保存到yht.txt文件中,经过统计发现,总共有165个独立的源ip地址。

image-20260520113816988

最后打开yht.txt文件,即可看到所有被蜜罐捕获的源ip地址。

image-20260520114109181

4.6、攻击者尝试攻击了那些安全漏洞?

为了筛选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

读取离线的僵尸网络 pcap 流量文件,过滤出由僵尸主机172.16.134.191发出的、TCP 标志位为 SYN+ACK(0x12,代表连接确认响应)的数据包,提取这些数据包的目标端口号,并在去除重复端口后输出,用于统计该僵尸主机作为服务端响应外部连接时使用的 TCP 端口。

经过上述执行后,我发现该僵尸主机响应 TCP 连接使用的端口有六个,分别为:135、139、25、445、4899、80。

image-20260520114640310

为了筛选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

与上述过程类似,我也是通过读取离线的僵尸网络 pcap 流量文件,过滤出僵尸主机172.16.134.191发出的所有 UDP 数据包,提取这些数据包的目标端口号,并在去除重复端口后输出,用于统计该僵尸主机进行 UDP 通信时使用的端口。

经过上述执行后,我发现该僵尸主机进行 UDP 通信使用的端口只有137一个。

image-20260520114553614

4.7、那些攻击成功了?是如何成功的?

在上述确定了攻击者尝试攻击的端口后,我用wireshark打开该文件,并在过滤器中,逐个设置过滤条件,以实现对其是否攻击成功以及攻击成功的方式具体是什么这两个问题的分析,我的过滤条件统一设置为

tcp.dstport== 对应端口 && ip.dst ==172.16.134.191(僵尸主机的IP地址)

目标是过滤出所有目标 IP 地址为僵尸主机 172.16.134.191且目标 TCP 端口为 列表中对应端口的数据包,通过此可以查看到外部主机向该僵尸主机对应端口发起的所有 TCP 通信。

第一是过滤的135端口,该端口是 Windows 系统默认开放的 RPC(远程过程调用)服务端口,也是早期蠕虫、僵尸网络进行漏洞利用和横向渗透的核心端口,该过滤可用于排查是否存在针对该僵尸主机的 RPC 服务扫描、DCOM 漏洞攻击或远程命令执行尝试。

tcp.dstport==135 && ip.dst == 172.16.134.191

针对该端口,我只发现了公网 IP 195.36.247.77 对被感染僵尸主机135端口的完整 TCP 三次握手与四次挥手,但目前暂没有发现具体的攻击行为

image-20260520160331727

第二是过滤的139端口,该端口是 Windows 系统默认开放的 NetBIOS 会话服务端口,用于局域网内的文件和打印机共享,是早期蠕虫、僵尸网络进行内网横向传播和文件窃取的常用端口,该过滤可用于排查是否存在针对该僵尸主机的 NetBIOS 服务扫描、SMB 共享暴力破解或恶意文件传输尝试。

tcp.dstport==139 && ip.dst == 172.16.134.191

针对该端口,我除了发现多个公网 IP 对被感染僵尸主机139端口的 TCP 连接,还发现了其试图发送NBSS 会话请求和 SMB 树连接请求,以达到非法访问主机 C 盘共享的目的,但没有获得成功。

image-20260520153145385

第三是过滤的25端口,该端口是 SMTP 简单邮件传输协议的默认端口,僵尸网络常利用该端口批量发送垃圾邮件、钓鱼邮件或传播恶意附件,该过滤可用于排查该僵尸主机是否被用于发送恶意邮件或接收邮件形式的 C2 控制指令。

tcp.dstport==25 && ip.dst == 172.16.134.191

针对该端口,我只发现了公网 IP 24.197.194.106 多次对被感染僵尸主机25端口完成完整 TCP 连接建立与关闭,但目前暂无实际邮件数据的传输和具体的攻击行为。

image-20260520160408486

第四是过滤的445端口,该端口是 Windows 系统 SMB 文件共享服务的 TCP 端口,是冲击波、震荡波等知名蠕虫漏洞的攻击目标,也是僵尸网络进行内网横向渗透、远程代码执行和文件窃取的核心端口,该过滤可用于排查是否存在针对该僵尸主机的 SMB 漏洞利用、共享访问或恶意文件投放。

tcp.dstport==445 && ip.dst == 172.16.134.191

针对本次445端口,我发现了来自4个公网IP的两类SMB攻击行为。

其中195.36.247.77、66.139.10.15、129.116.182.239三个IP均执行常规的SMB空会话信息枚举攻击。它们通过匿名身份建立IPC$共享连接,绑定SAMR安全账户管理接口,依次发起枚举域、查找主机名、枚举域用户、查询用户权限等操作,仅能获取目标主机的基础系统信息,未尝试文件上传或远程代码执行,但最终所有连接均被目标主机以TCP RST包强制断开,未造成实质性入侵,攻击没有成功。

image-20260520153418672

image-20260520153535613

屏幕截图 2026-05-20 181832

但公网IP 61.111.101.78发起的是PSEXESVC蠕虫远程代码执行攻击,其已完成攻击的核心步骤并取得完全成功。该攻击者并没有使用权限有限的空会话,而是以管理员权限的账户完成SMB身份验证,成功连接目标主机的ADMIN$系统共享,随后发送NT Create AndX请求在C:\Windows\System32系统目录下创建PSEXESVC.EXE恶意服务文件,并通过多个Write AndX数据包写入完整的恶意代码。结合此前已确认的目标主机向IRC C2服务器发起的6667端口回连流量,可以判定PSEXESVC服务已自动创建并启动,Dv1dr32蠕虫已完成部署并成功上线,成为该僵尸网络的受控节点。

屏幕截图 2026-05-20 181731

第五是过滤的4899端口,该端口是 Radmin 远程管理工具的默认端口,该工具常被攻击者滥用作为后门程序,僵尸网络会通过该端口实现对目标主机的远程桌面控制、文件上传下载和系统配置修改,该过滤可用于排查是否存在针对该僵尸主机的 Radmin 后门连接或远程控制尝试。

tcp.dstport==4899 && ip.dst == 172.16.134.191

针对该端口,目前我只发现公网 IP 210.22.204.101 多次尝试对被感染僵尸主机 4899 端口建立TCP 连接并持续传输数据,但暂时没发现远程控制后门连接或者存在恶意指令下发攻击等,

image-20260520155750095

第六是过滤的80端口。该端口是 HTTP 超文本传输协议的默认端口,僵尸网络常利用该端口下载恶意载荷、与 C2 服务器进行明文通信或发起 HTTP DDoS 攻击,该过滤可用于排查该僵尸主机是否在下载恶意文件、接收 HTTP 形式的控制指令或参与网页攻击。

tcp.dstport==80 && ip.dst == 172.16.134.191

针对 80 端口,我发现多个公网 IP持续向被感染僵尸主机 80 端口发送 HTTP 请求和大量 TCP 连接请求,这是典型的 Web 服务漏洞扫描与缓冲区溢出攻击。其中 210.22.204.101 发送了带有超长填充字符的 GET 请求尝试触发 IIS 缓冲区溢出漏洞,24.197.194.106 通过 HEAD 请求批量遍历 Web 敏感文件与脚本路径,但主机多次返回 TCP RST 包重置异常连接,未发现成功的漏洞利用和敏感信息泄露,攻击没有成功。

image-20260520161708427

image-20260520161951970

image-20260520162416460

最后,我过滤的是137端口,该端口是 UDP 协议的 NetBIOS 名称服务端口,用于局域网内的主机名解析,僵尸网络常利用该端口进行内网主机扫描和存活探测,为后续的横向渗透做准备,该过滤可用于排查是否存在针对该僵尸主机的 NetBIOS 名称查询或内网扫描行为。

udp.port==137

针对该端口,我发现多个公网 IP 持续向被感染僵尸主机 137 的UDP 端口发送 NBNS 名称查询请求,这是典型的内网主机存活探测攻击,但因为无有效 NetBIOS 名称查询响应,因此仅发送了名称查询包,未获得任何系统信息,攻击并没有成功。

image-20260520162929858

三、学习中遇到的问题以及相应的解决措施

问题1:在尝试输入file RaDa.exe指令试图查看该文件类型时,系统提示No such file or directory,出现了无法打开的情况。

image-20260512205901252

于是我首先用ls命令排查文件位置,在C:\Documents and Settings\Administrator>目录下执行ls命令,列出了当前目录的所有文件和文件夹。结果显示,RaDa.exe并不在当前目录,而是存放在 “桌面” 文件夹中,定位到了文件的实际存放路径。

屏幕截图 2026-05-12 210103

之后我执行了cd 桌面命令,将 CMD 的当前工作目录切换到了C:\Documents and Settings\Administrator\桌面,也就是RaDa.exe的实际存放位置。

屏幕截图 2026-05-12 210138

在切换目录后,我再次执行file RaDa.exe命令,系统成功找到了文件,并输出了识别结果:

问题2:IDA Pro 反编译 Crackme2.exe 时伪代码乱码,无法识别验证逻辑。

image-20260518142435774

后来我检查发现原因是因为Crackme2.exe 使用了 Unicode 字符串,IDA 默认编码为 ANSI;在 IDA 中设置 “Options → General → String encoding” 为 “Unicode”,重新反编译后伪代码正常显示。

问题3:tcpflow 过滤表达式语法错误

image-20260520111825274

这里我发现是因为tcpflow 的流量过滤语法与 tcpdump 完全一致,但不能用双引号包裹过滤表达式,因为bash 会提前解析双引号内的特殊字符,导致 tcpflow 无法识别规则 ,我在去掉双引号后就没有报错了。

四、学习感悟

这次实验我最直观的感受是 “细节决定成败”:用file命令识别 Rada 样本时,因没切换目录导致识别失败,看似是基础命令的小失误,却卡了近半小时;解压样本时防火墙的干扰、脱壳后必须校验是否成功,这些实操中的小细节,让我明白恶意代码分析的第一步就是 “把基础操作做扎实”,哪怕是cdls这类简单命令,也容不得马虎。

其次是对 “分析逻辑” 的理解更深刻:恶意代码分析不是盲目试错,而是有固定的流程 —— 先识别文件格式和加壳类型,脱壳后再提取字符串、动态监听行为;逆向 Crackme 程序也不是靠猜口令,而是通过 IDA 看字符串、拆解函数调用和控制流图,一步步还原验证逻辑。尤其是 crackme2.exe 的多层校验,让我意识到逆向分析要 “抠细节”,除了找核心口令,还要注意程序名、内部状态值这类反破解的小手段,也理解了 “静态定位→动态验证→结果输出” 这个逆向闭环的实际意义。

同时,我也真切感受到恶意代码的隐蔽性和危害性:此前只在课本上看到 “持久化”“内网渗透”“DDoS 攻击” 这些概念,这次监听 Rada 运行,亲眼看到它建隐藏目录、写开机启动项、探测内网 IP、发起 DDoS 攻击,才明白这类恶意程序是如何悄无声息驻留主机、窃取信息并发起攻击的,也理解了为什么分析恶意代码要从文件识别到行为还原全流程拆解 —— 只有摸透它的每一步行为,才能针对性制定防护策略。

当然,也暴露了自己的不足:刚开始用 IDA 看控制流图时,对汇编指令、函数调用关系很生疏,得反复查资料、对照教程才能看懂;动态监听 Rada 行为时,对注册表操作、网络请求的分析也不够熟练。但这些不足也明确了后续的学习方向 —— 多练 IDA 的使用,补全 Windows 注册表、网络协议的基础,多找不同类型的恶意样本练手,把这次实验的实操思路固化下来。

总的来说,这次实验不是单纯完成任务,而是真正掌握了恶意代码分析和逆向工程的核心思路,也体会到网络攻防的本质是 “知己知彼”:只有摸透攻击者的手段,才能做好防御。后续我也想多尝试不同类型的样本分析,把这些实操经验转化为实际的分析能力。

http://www.jsqmd.com/news/853339/

相关文章:

  • 2026 淮南高考生近视手术选医选院攻略,医生资质 + 医院实力全对比 - 品牌速递
  • 嵌入式系统性能瓶颈与下一代处理器架构演进方向
  • Perplexity地理查询突然返回空结果?紧急修复指南:3分钟定位OpenStreetMap数据源同步断点+2行代码热修复
  • 全自动吨包机选购指南与品牌排名一览 广州恒尔实力厂家详解吨包设备优劣对比 - 品牌速递
  • 淮南高考生近视手术去哪做?廖荣丰、朱凤领衔合肥普瑞,2026摘镜实力全解析 - 品牌速递
  • 如何用Akagi雀魂AI辅助工具快速提升麻将水平:新手到高手的完整指南
  • 如何快速构建完整的以太坊Go开发实战应用:从入门到精通指南 [特殊字符]
  • 2026年5月最新 超声波泥位检测仪十大品牌榜 - 仪表品牌榜
  • Axure RP — 复杂交互与逻辑验证的终极杀器
  • 淮南近视手术哪家好?2026高考_征兵摘镜必看! - 品牌速递
  • RISC-V RTOS移植实战:从ARM迁移到CH32V307的FreeRTOS移植指南
  • CANN/HCOMM拓扑层级查询
  • Lawnicons入门教程:从下载安装到启用主题化图标的完整流程
  • 2026年5月最新 国内污水管道用管段式超声波流量计十强厂家对比(国产+进口) - 仪表品牌排行榜
  • 暗黑破坏神2存档编辑器完整指南:3步实现角色定制与游戏优化
  • 从毫米波雷达置信度Bug说起:Simulink单元测试如何帮你提前‘排雷’
  • Mentor DFT实战:手把手教你搞定Wrapped Core的Scan Insertion(附完整TCL脚本)
  • 2026 年西南高端门窗五金源头厂家推荐:门窗五金 / 定制门窗 / 开窗器系统 / 选择指南 - 海棠依旧大
  • 古诗检索总漏掉冷门佳句?Perplexity的“典故逆向溯源引擎”已上线:1个关键词反推237部典籍出处(仅限首批500名开发者接入)
  • 为什么英语是编程最重要的前置技能?Newbie-Guideline揭示成功秘诀
  • ROS Topic通讯实战:拆解`/turtle1/cmd_vel`,理解速度指令如何驱动小乌龟运动
  • 如何通过 TaoToken 快速接入 Claude Code 并配置 API 密钥与基础地址
  • FreeJoy固件刷写与配置全攻略:从STM32CubeProgrammer到中文版Configurator
  • CANN/asc-devkit Mins矢量计算
  • 10个实用技巧:PHP Font Lib 字体信息提取完全教程
  • Gregwar/Captcha图像效果详解:扭曲、线条、背景与透明度的艺术
  • Windows上的安卓应用安装专家:APK安装器完全指南
  • Camunda并行会签实战:从BPMN设计到数据库状态变化的完整追踪
  • iOS 18.1 5G功能深度解析:从智能省电到SA网络优化
  • SolidGPT深度集成Notion:项目管理与代码分析的完美结合