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也并未很好识别,且该病毒有许多多线程定时器,断点一多就容易使跟踪混乱,也带来不少麻烦,一些结构体和函数细节也并未分析到,不过主要功能算是有所理解了。