文章

《软件安全》上机实验五

《软件安全》上机实验五

第五次上机作业:课本342页第13题

一、实验内容

操作实验:熊猫烧香病毒分析。实验内容如下。 1)基于虚拟机软件及其快照功能,搭建一个恶意代码分析实验环境。 2)分析熊猫烧香病毒的程序结构和人侵过程。 完成实验报告。

二、实验环境

  • Windows XP

三、实验原理

四、实验步骤

1.搭建虚拟机环境

搭建虚拟机环境并将熊猫烧香文件压缩包复制到XP中,解压压缩包,并将文件后缀改为.exe

image-20251205183319123

测试病毒之前,为虚拟机拍摄了一张快照,并命名为“感染病毒前”

image-20251205183451608

2.运行病毒

双击panda.exe,看他对计算机会产生什么影响(由于刚才做了一次尝试,双击玩panda.exe之后任务管理器打不开了,这里接住了PCHunter工具)

步骤1:双击panda.exe

双击后并没有特殊的弹窗或文本什么的,接下来尝试打开任务管理器、注册表等都会闪退,通过PCHunter发现,有一个名为spoclsv.exe的进程正在运行中,这就是熊猫烧香。

image-20251205193151040

在 PCHunter中发现启动项 sycshare,其启动路径为C:\WINDOWS\system32\drivers\spoclsv.exe

image-20251205193449282

在C:\WINDOWS\system32\drivers文件路径下发现了spoclsv.xe,病毒将他自己复制到了系统目录下,他可以借助系统命令自启动,这样计算机就会一直受到这个病毒的影响。

image-20251205193641686

查看注册表,发现病毒将自己也注册进了注册表

image-20251205194006791

病毒还创建了很多文件,如下图红色所示

image-20251205194111942

3.分析病毒程序结构和入侵过程

步骤1:使用PEiD程序打开病毒程序

PEiD显示病毒程序无壳,且是使用Delphi编写的

image-20251205194538507

步骤2:拦截病毒核心执行步骤

从运行病毒时看到的病毒行为,我们可以分析出病毒的核心执行操作为复制和自启动,通过查阅相关资料,发现核心API为CopyFileA(自我复制)、RegSetValueExA(写注册表值的关键函数) 、CreateFileA(传播制造病毒)。

(1)使用Ollydbg打开病毒源程序

image-20251205194747695

(2)查找关键执行路径,按F2打断点

定位自我复制函数

image-20251206111013348

定位写注册表函数

image-20251206111136984

定位传播制造病毒函数

image-20251206111218603

(3)动态调试,F9执行

首先走到CreateFileA函数,在Windows中理解为其首先要读取病毒程序,使用create函数进行读取,右下角堆栈信息可以看到路劲就是我在桌面上放置的exe文件

image-20251206112423993

继续执行,发现下一步停在函数CopyFileA断点处,可以看到病毒要把自己从

源路径:0012FB48 009B0290ExistingFileName = “C:\Documents and Settings\Administrator\桌面\panda.exe.exe”

复制到

新路径:NewFileName = “C:\WINDOWS\system32\drivers\spoclsv.exe”

仔细观察发现:病毒将自己取名为spoclsv.exe,一位内Windows 系统里有一个合法的打印机服务进程叫spoolsv.exe,病毒改动了一个字母,使得普通用户在任务管理器里很难一眼分辨出来。

image-20251206114243750

之后继续执行,调试程序自动退出了,说明它没有往下执行到写入注册表那一步,大概率是因为熊猫烧香病毒的金蟾脱壳逻辑,当他复制完成之后会启动那个写进系统文件的程序,而kill自身(即我在Ollydbg中打开的这个panda.exe)

现在我们用Ollydbg去打开spoolsv.exe

image-20251206120054241

重新打断点:RegSetValueExA和CreateFileA

F9开始执行,会发现程序走到了RegSetValueExA的断点,观察堆栈信息:

hKey = 1D4:句柄,即程序的通行证

CALL to RegSetValueExA:

  • 含义:调用写注册表值的 API。

  • 分析:这是恶意代码实现“持久化”的标准手段。

ValueName = “svcshare”:

  • 含义:这是病毒在注册表里给自己起的“名字”。

  • 分析:正常系统里并没有 svcshare 这个启动项。病毒起这个名字同样是为了混淆视听,让用户以为是某种共享服务 (Service Share)。

  • 重点:在手动查杀时,这就是我们要删除的那个“键”。

Buffer = 009B05B0 (指向的内容):

虽然这里只显示了地址,但结合下面的 BufSize,我们可以确认这里存的就是病毒路径。

BufSize = 28 (40.):

  • 含义:写入数据的长度是 40 字节。

  • 数学验证:字符串 C:\WINDOWS\system32\drivers\spoclsv.exe的长度正好是 39 个字符,加上 1 个结束符(Null byte),正好是 40 字节。

image-20251206121118264

继续向下执行,会发现程序会持续调用几次CreateFileA,观察堆栈信息,其中两次最重要,一是将自己创建到C:\setup.exe,并且创建/覆盖C:\autorun.inf,这样就会造成病毒开机自启。

image-20251206122007212

image-20251206122027170

以上就是熊猫烧香病毒的入侵步骤了。

本文由作者按照 CC BY 4.0 进行授权