第五步,分析函数sub_4054BC。
在IDA中双击查看该函数的内容。可以发现它主要是调用了GetSystemDirectory函数,从而获取系统的路径。
总结,重命名及对应功能如下:
- sub_4054BC -> GetSystemDir
- 功能:获取系统路径
2、sub_403F8C子函数
第一步,我们让OD跳转到0x004081AB的位置。
直接按F8执行下来,在这里可以看到PUSH是将刚才利用GetSystemDirectory函数所获取的系统路径字符串进行压栈。
压栈内容为system32这个目录。
- C:\Windows\system32
第二步,按下F8继续分析,发现它又将drivers压栈,将spoclsv.exe字符串压榨。
- drivers
- spoclsv.exe
注意,上图仅显示了setup.00408658,没有将具体的值显示出来。
思考:OD中如何查看堆栈中的值?
选中ESP堆栈指针寄存器(主要用于存放堆栈内存储单元的偏移量),在“堆栈窗口中跟随”。然后依次选择值“0x00408644”和“0x00408658”,右键在“数据窗口中跟随”,即可查看堆栈中的值。
发现对应的值为“drivers”和“spoclsv.exe”,如下图所示。
写到这里,我们可以推测:下面这个函数的功能是将压入堆栈的字符串进行拼接,成为一个新的路径。
第三步,按下F8执行到这个Call函数进行分析。
按下F8执行过来后,选中EAX在数据窗口中跟随。
EAX是累加器(accumulator),它是很多加法乘法指令的缺省寄存器。 EBX是基地址(base)寄存器, 在内存寻址时存放基地址。 ECX是计数器(counter),是重复(REP)前缀指令和LOOP指令的内定计数器。 EDX则总是被用来放整数除法产生的余数。
在数据窗口中右键“转到”->“表达式”,然后输入值:
- 01C67E28
接着再CALL函数处按下F8,我们需要关注数据窗口中的前后变化情况。我们可以看到它新生成了一个路径字符串。
- C:\Windows\system32\drivers\spoclsv.exe
总结,重命名及对应功能如下:
- sub_403F8C -> TwoStringCat
- 功能:将两个字符串进行连接
3、sub_4060D4子函数
事实上,这段程序的功能如下:
- 首先通过这个函数将字符串连接;
- 再将路径字符串转换为大写字母;
- 然后将这个字符串与这里进行对比。
第一步,我们通过OD来分析下比较功能,在OD中执行到4081E3位置,然后按F9执行过去。
- 0x004081E3 call sub_404018
第二步,分析sub_404018函数。
我们在这里看下它比对的是什么字符串,在数据窗口中跟随值,可以看到两个字符串分别是拼接的字符串和当前OD分析程序的字符串。
C:\USERS\14551\DESKTOP\SETUP.EXE C:\WINDOWS\SYSTEM32\DRIVERS\SPOCLSV.EXE
很明显,我们分析的熊猫烧香病毒程序在桌面上,而比对的是DRIVERS路径下。
sub_404018函数的目的是分析当前这个程序是不是drivers目录下的这个程序,如果是的话执行一段代码,否则执行另一段代码。
因为目前不是在drivers路径下,因此它执行另一段代码,我们按下F8继续执行。JE跳转不成立,继续出现一个新的CALL。
- 0x004081F3 CALL setup.004060D4