0x00 前言

总之就是分析了下这个病毒吧,毕竟当年还是影响很大的,分析起来也算友好,也算是熟悉熟悉病毒的分析过程。

 

0x01 行为分析

仅从PE文件上获得的信息看不出什么名堂来,因为它是Delphi写的,有许多乱七八糟的字符串,导入表也很多,看起来啥功能都有。

分析熊猫烧香

所以还是得用监视器来看看它的运行情况(Win7运行后还真中毒了。。。)

分析熊猫烧香

过滤一下文件操作可以看到它多次操作了C:\Windows\System32\drivers\spcolsv.exe这个东西,去看一眼这个文件,发现它和病毒样本是同一个东西。接着过滤下这个spcolsv.exe文件看有哪些操作

开启了一些子进程

分析熊猫烧香

注册表创建的键主要是自启动和资源管理器不显示隐藏文件的属性

分析熊猫烧香

文件操作

分析熊猫烧香

可以看到貌似每个文件夹下都有一个Desktop_.ini,且C盘根目录下有setup.exe,autorun.ini等文件,该病毒都对它们进行了操作,但这些文件都被隐藏了。

 

(PS:由于该程序由Delphi编写,这些库函数都需要动态分析来了解功能,然后标注函数名)

0x02 启动器

入口点进行了一些解密和自检测的操作,以及病毒作者的鸣谢。。。

分析熊猫烧香

紧接着调用了3个函数,经分析这3个函数就是病毒主要的功能函数,而启动器部分在function1中,进入该函数。

分析熊猫烧香

首先检测该路径下是否存在Desktop_.ini,若存在,则将其删除

分析熊猫烧香

经过一些信息写入后,检测当前程序是否为spcolsv.exe

分析熊猫烧香

由于这里分析的是启动器,所以自然不会是spcolsv.exe程序,于是执行以下指令

CODE:004084C2 3F0                 mov     eax, offset aSpcolsv_exe ; "spcolsv.exe"
CODE:004084C7 3F0                 call    KillByProcessName
CODE:004084CC 3F0                 mov     eax, offset aSpcolsv_exe ; "spcolsv.exe"
CODE:004084D1 3F0                 call    KillByProcessName
CODE:004084D6 3F0                 push    80h
CODE:004084DB 3F4                 lea     eax, [ebp+var_3EC]
CODE:004084E1 3F4                 call    GetSystem32
CODE:004084E6 3F4                 push    [ebp+var_3EC]
CODE:004084EC 3F8                 push    offset aDrivers ; "drivers\\"
CODE:004084F1 3FC                 push    offset aSpcolsv_exe ; "spcolsv.exe"
CODE:004084F6 400                 lea     eax, [ebp+var_3E8]
CODE:004084FC 400                 mov     edx, 3
CODE:00408501 400                 call    PathCat
CODE:00408506 400                 mov     eax, [ebp+var_3E8]
CODE:0040850C 400                 call    ret_self
CODE:00408511 400                 push    eax ; lpFileName
CODE:00408512 404                 call    SetFileAttributesA
CODE:00408517 3FC                 push    1 ; dwMilliseconds
CODE:00408519 400                 call    Sleep
CODE:0040851E 3FC                 push    0 ; lpNewFileName
CODE:00408520 400                 lea     eax, [ebp+cpt]
CODE:00408526 400                 call    GetSystem32
CODE:0040852B 400                 push    [ebp+cpt] ; cpt
CODE:00408531 404                 push    offset aDrivers ; "drivers\\"
CODE:00408536 408                 push    offset aSpcolsv_exe ; apt
CODE:0040853B 40C                 lea     eax, [ebp+var_3F0]
CODE:00408541 40C                 mov     edx, 3
CODE:00408546 40C                 call    PathCat
CODE:0040854B 40C                 mov     eax, [ebp+var_3F0]
CODE:00408551 40C                 call    ret_self
CODE:00408556 40C                 push    eax ; hdc
CODE:00408557 410                 lea     edx, [ebp+var_3F8]
CODE:0040855D 410                 xor     eax, eax
CODE:0040855F 410                 call    GetPath
CODE:00408564 400                 mov     eax, [ebp+var_3F8]
CODE:0040856A 400                 call    ret_self
CODE:0040856F 400                 push    eax ; lpExistingFileName
CODE:00408570 404                 call    CopyFileA
CODE:00408575 3F8                 push    1
CODE:00408577 3FC                 lea     eax, [ebp+var_400]
CODE:0040857D 3FC                 call    GetSystem32
CODE:00408582 3FC                 push    [ebp+var_400]
CODE:00408588 400                 push    offset aDrivers ; "drivers\\"
CODE:0040858D 404                 push    offset aSpcolsv_exe ; uCmdShow
CODE:00408592 408                 lea     eax, [ebp+var_3FC]
CODE:00408598 408                 mov     edx, 3
CODE:0040859D 408                 call    PathCat
CODE:004085A2 408                 mov     eax, [ebp+var_3FC]
CODE:004085A8 408                 call    ret_self
CODE:004085AD 408                 push    eax ; lpCmdLine
CODE:004085AE 40C                 call    WinExec
CODE:004085B3 404                 push    0 ; uExitCode
CODE:004085B5 408                 call    ExitProcess_0

这段指令将程序自身复制到C:/Windows/System32/driver/spcolsv.exe,然后命令行执行该程序,最后退出当前进程。

 

0x03 文件递归遍历

若当前运行程序为spcolsv.exe则进行感染,感染的主要函数在function2部分。

分析熊猫烧香

这是function2的第一个函数,它开启一个感染文件的线程。

分析熊猫烧香

在经过一些内存操作后,对C:\进行递归操作,进入该函数

分析熊猫烧香

GetFileInfo内部调用FindFirstFileA来获取文件信息,根据文件信息,来决定之后的两个跳转分支,0x10的文件属性表示文件夹,而file_name为"."则表示当前文件夹。若当前文件为一个文件夹,则检测该文件夹名是否为以下名称

分析熊猫烧香 

若文件夹为这些名称,则直接读取下一个文件。

若并非这些文件名,则判断当前文件夹下是否存在Desktop_.ini,若存在则判断与当前日期是否相同,否则重现创建一个Desktop_.ini并写入当前日期。

分析熊猫烧香

分析熊猫烧香

若Desktop_.ini内容和当前日期相同,则表明当前文件夹已被感染过,然后开始下一次递归。

 

0x04 文件感染

若递归操作中当前文件属性不为0x10,即不为文件夹,则开始感染文件。首先对exe,scr,pif,com为后缀的文件进行感染,感染方式如下

首先判断文件中是否存在"WhBoy"字符串,出现它说明被感染过,就跳过感染

分析熊猫烧香

若未被感染过,就开始感染文件,首先将自身(spcolsv.exe),复制为要感染的文件

分析熊猫烧香

然后将原本的文件追加写入到复制后的文件中,并在末尾写入WhBoy+文件名+随机数。这里其实不太好分析,要慢慢得调试并查看内存变化。

分析熊猫烧香

也就是说,这个病毒感染文件的本质是通过将病毒程序和原文件进行绑定来完成的。

0x05 感染后的文件行为

由于这里被感染的文件本质上是在原文件前面附加了病毒程序,当PELoader加载PE文件时,只会执行前面的程序,即病毒程序,但实际运行时,会发现被感染的程序也会执行成功,且运行后发现文件大小发生了改变,病毒文件也从头部消失了,所以可以推测,该病毒首先作为启动器执行,然后将自身与原文件剥离,最后启动原程序。这里要回到function1来逆向分析。

在判断出该文件并非spcolsv.exe且当前文件已被感染时,首先将原文件部分写入到一个新文件

分析熊猫烧香

然后通过一个函数进行批处理操作,这个函数将一些命令行写入到批处理文件中,然后执行,调试中发现的实例如下

分析熊猫烧香

完成的是一个删除和重命名操作,然后对该批处理文件进行自删除。

 

0x06 自启动

在function2中存在一个函数,由于太长就不贴了,但根据以下字符串可以判断大致功能

分析熊猫烧香

之前监视器看到在C盘根目录下的隐藏文件中就有autorun.inf和setup.exe,这个setup.exe就是病毒程序本身,而autorun.inf就是自启动的配置文件了。

 

0x07 网络操作

由于没开局域网,没法动态调一调,就静态的简单看了看,主要是对两个端口进行了连接。

分析熊猫烧香

分析熊猫烧香

其实就是通过139和445两个危险的端口,来进行局域网的病毒传播。

在function3中可以看到一些网络命令行的操作

分析熊猫烧香

分析熊猫烧香

具体传播细节就没分析了。

 

0x08 注册表和服务操作

这些操作多在function3中,且均用定时器来完成,隔一段时间就会更新一次。

0.关闭安全相关软件和进程

首先提权

分析熊猫烧香

分析熊猫烧香

分析熊猫烧香

1.资源管理器无法显示隐藏文件

分析熊猫烧香

2.删除一些服务和注册表,多半与安全服务相关吧

分析熊猫烧香

0x09 总结

和大佬们说的一样,熊猫烧香并未使用什么先进的技术,更像是把基础病毒的功能糅合在了一起,但仅仅是这样的病毒,在当年也造成了非同小可的影响,可见当年的安全隐患严重。该病毒并未使用什么混淆或保护技术,理应很容易分析,但实际操作时,由于对Delphi不熟,IDA也并未很好识别,且该病毒有许多多线程定时器,断点一多就容易使跟踪混乱,也带来不少麻烦,一些结构体和函数细节也并未分析到,不过主要功能算是有所理解了。

 

相关文章: