这次我们会接着上一篇的内容继续对病毒进行分析。分析中会遇到一些不一样的情况,毕竟之前的代码我们只要按照流程顺序一步一步往下走,就能够弄清楚病毒的行为,但是在接下来的代码中,如果依旧如此,在某些分支中的重要代码就执行不到了,所以我们需要采取一些策略,走完每个分支,彻底分析出病毒的行为。
现在程序执行到了loc_408171位置处:
图1 loc_408171起始处的代码
程序首先进行比较操作,由于二者都为0,所以在比较过后ZF=1,那么接下来的跳转并不执行。之后的CALL获取到了病毒程序所在的路径(包含文件名),并将完整路径名的首地址保存在eax中,注意[ebp+var_3D8]中所保存的是一个地址数值,该地址指向文件路径字符串。而接下来赋给edx的地址,则是病毒程序完整地址向后4个字节的位置,正好跳过了两个大写字母和两个符号。接下来进入sub_40532C进行查看,可以发现:
图2 查看sub_40532C内部代码
这里的CharUpperBuff函数的作用是把缓冲区中指定数目的字符转为大写。于是可以将sub_40532C重命名为:ToUpper。接下来有:
图3 分析sub_4054BC函数
这里出现了sub_4054BC函数,跟进查看可以发现:
图4 查看sub_4054BC内部代码
这里的GetSystemDirectory函数的作用在于获取系统路径,于是可以将sub_4054BC重命名为:GetSystemDir。可见以上这几个函数分析得还是比较顺利的,因为病毒直接调用了API函数,让我们对于程序的功能一目了然。接下来有:
图5 分析sub_403F8C函数
程序首先将刚才获取的系统路径字符串的首地址入栈,然后分别压入“drivers\”与“spoclsv.exe”这两个字符串,之后利用OD对sub_403F8C进行分析,执行完后可以发现:
图6 跟踪sub_403F8C执行完后的变化
由此可见,sub_403F8C的作用是将两个字符串与另一个字符串连接起来,从而组成一个长路径,所以可以将其重命名为:TwoStringsCat。接下来是:
图7 分析sub_4060D4函数
结合OD动态分析可知,这段程序首先将之前连接好的路径字符串转换为大写字母,然后将该字符串与之前所转换的病毒程序路径的大写字符串作对比操作,这里执行时,二者是不同的,所以接下来的跳转不成立(如果想要理解这里为什么要利用比对的操作,可以结合之前文章中对于病毒的行为分析,病毒会将自身改名为“spoclsv.exe”,并复制到“drivers”目录中,这里的对比就是要确认病毒到底有没有被复制到该目录下,如果没有,即对比结果不为零,那么就执行接下来的病毒复制操作)。dword_408658中保存的是字符串“spoclsv.exe”,然后可以进入sub_4060D4中进行分析。
sub_4060D4这个函数也是比较长,内部有众多的CALL,一个一个CALL进行查看,可以发现它调用了非常多的API函数,依据这些API函数的功能可以知道,sub_4060D4的作用在于查找当前内存中的指定进程,若存在,则将其终止。由于较长,这里就不进行截图分析了。于是可以将sub_4060D4重命名为:SearchAndTerminateProcess。接下来有:图8
图9
图11 执行到loc_4082F0
这段代码出现了sub_40416C这个函数,它也是比较抽象,不太容易分析,这需要耐心与细致,在此我将过程省略。其实这个函数的功能是删除字符串中的信息,其中eax保存的是欲操作字符串的地址,ecx保存的是欲删除的字符的个数。那么就将sub_40416C重命名为:DeleteStringBuff。然后程序跳转到loc_4085D3:
图12 执行到loc_4085D3
在CALL函数之上,eax保存的是一个标记数值,这里为0x01。之后的CALL就是查找文件中是否包含有这个标记,如果包含有这个标记,那么就执行跳转,否则不跳转。由此我们可以假设,这个0x01标记应该就是病毒将程序感染后,在原本正常的程序中添加的,用于标识该程序是否被感染的标记。如果真是这样的话,若想分析跳转后的程序内容,要么在OD中修改标志位,要么对一个被感染的程序进行分析,这里我不再赘述,有兴趣的读者可以拿一个被感染的程序自行分析。这里可以将sub_4041B4重命名为:SearchSignPos。
由于我现在分析的是病毒程序,他自身没有0x01标志位,因此跳转不成立,继续执行:图13
这部分的代码主要用于收尾工作,最后的CALL用于删除堆栈中所保存的地址,这些地址指向的是病毒写入的一些信息。这部分代码返回后,那么sub_408024就执行完了。可能大家已经不记得sub_408024是什么了,这个就是我在本逆向分析系列的上篇的最后,所分析出的病毒三大功能的第一项功能。分析至此,可见这第一项功能主要用于病毒的初始化工作。余下的两大功能我在此就不进行分析,有兴趣的读者可以独立研究试试看。
至此,熊猫烧香病毒的逆向分析系列就结束了,我用了三篇文章的篇幅来一步一步地给大家做了较为详尽的分析。尽管只分析了病毒的一项大功能,但是我相信大家或多或少地了解到了病毒逆向分析的基本方法。在我看来,这里面并没有多高深的技术,重要的是经验的积累以及个人的耐心的培养。希望各位读者能够踏踏实实地将这个病毒亲自动手分析完全,相信这会令大家的收获巨大。