本系列文章的版权“I春天的”整个,转载请注明出处。
本文配套视频教程,请訪问“i春秋”(www.ichunqiu.com)。
一、前言
这次我们会接着上一篇的内容继续对病毒进行分析。
分析中会遇到一些不一样的情况,毕竟之前的代码我们仅仅要依照流程顺序一步一步往下走,就行弄清楚病毒的行为。可是在接下来的代码中,假设依然如此,在某些分支中的重要代码就运行不到了。所以我们须要採取一些策略。走完每一个分支,彻底分析出病毒的行为。
二、病毒分析
如今程序运行到了loc_408171位置处:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
图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进行分析,运行完后能够发现:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
图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
由最后一句的CopyFile函数能够知道,这里主要是实现文件的拷贝操作,也就是将本病毒文件改名为“spoclsv.exe”后,拷贝到“drivers”文件夹中。接下来有:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
图10
这段代码调用了WinExec函数。查看它上面的eax中所保存的字符信息能够发现,当病毒本体将自身拷贝到“drivers”中并改名后。这里就是对改了名字的病毒程序运行运行的操作,然后主体程序就退出了。至此。假设想继续用OD进行动态分析。要么加载“spoclsv.exe”。要么对之前的一处条件跳转进行改动,令程序以为自己就是“spoclsv.exe”。该位置就是图7中的0x004081E8,我们先在该位置下一个断点。然后用OD又一次加载本程序,令其停在断点处。
正常来说,这里的跳转是不成立的,为了使其成立。当然能够将jz改为jnz,可是这改变了病毒程序。最好的办法是改变ZF标志位,将原来的0改为1就能够了。可是,经过了之前的行为分析能够知道,真正实现病毒功能的。能够说就是“spoclsv.exe”这个程序。虽说这个程序和“熊猫烧香.exe”是全然一样的。可是毕竟其内部的运行流程是不同的。
为了得到病毒完整的资料。这里我利用OD加载“spoclsv.exe”进行动态分析。
那么0x004081E8处的跳转得以运行。来到下面代码:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
图11 运行到loc_4082F0
这段代码出现了sub_40416C这个函数。它也是比較抽象,不太easy分析。这须要耐心与仔细,在此我将过程省略。事实上这个函数的功能是删除字符串中的信息。当中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是什么了,这个就是我在本逆向分析系列的上篇的最后。所分析出的病毒三大功能的第一项功能。
分析至此。可见这第一项功能主要用于病毒的初始化工作。余下的两大功能我在此就不进行分析,有兴趣的读者能够独立研究试试看。
三、小结
至此,熊猫烧香病毒的逆向分析系列就结束了,我用了三篇文章的篇幅来一步一步地给大家做了较为详尽的分析。
虽然仅仅分析了病毒的一项大功能,可是我相信大家或多或少地了解到了病毒逆向分析的基本方法。在我看来,这里面并没有多高深的技术,重要的是经验的积累以及个人的耐心的培养。
希望各位读者可以踏踏实实地将这个病毒亲自己主动手分析全然。相信这会令大家的收获巨大。
版权声明:本文博主原创文章,博客,未经同意不得转载。