病毒木马查杀第007篇:熊猫烧香之逆向分析(下)

一、前言

这次我们会接着上一篇的内容继续对病毒进行分析。分析中会遇到一些不一样的情况,毕竟之前的代码我们只要按照流程顺序一步一步往下走,就能够弄清楚病毒的行为,但是在接下来的代码中,如果依旧如此,在某些分支中的重要代码就执行不到了,所以我们需要采取一些策略,走完每个分支,彻底分析出病毒的行为。

二、病毒分析

现在程序执行到了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

由最后一句的CopyFile函数可以知道,这里主要是实现文件的拷贝操作,也就是将本病毒文件改名为“spoclsv.exe”后,复制到“drivers”目录中。接下来有:

图10

这段代码调用了WinExec函数,查看它上面的eax中所保存的字符信息可以发现,当病毒本体将自身复制到“drivers”中并改名后,这里就是对改了名字的病毒程序执行运行的操作,然后主体程序就退出了。至此,如果想继续用OD进行动态分析,要么载入“spoclsv.exe”,要么对之前的一处条件跳转进行修改,令程序以为自己就是“spoclsv.exe”。该位置就是图7中的0x004081E8,我们先在该位置下一个断点,然后用OD重新载入本程序,令其停在断点处。正常来说,这里的跳转是不成立的,为了使其成立,当然可以将jz改为jnz,但是这改变了病毒程序。最好的办法是改变ZF标志位,将原来的0改为1就可以了。但是,经过了之前的行为分析可以知道,真正实现病毒功能的,可以说就是“spoclsv.exe”这个程序,虽说这个程序和“熊猫烧香.exe”是完全一样的,可是毕竟其内部的执行流程是不同的。为了得到病毒完整的资料,这里我利用OD载入“spoclsv.exe”进行动态分析。那么0x004081E8处的跳转得以执行,来到以下代码:

图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是什么了,这个就是我在本逆向分析系列的上篇的最后,所分析出的病毒三大功能的第一项功能。分析至此,可见这第一项功能主要用于病毒的初始化工作。余下的两大功能我在此就不进行分析,有兴趣的读者可以独立研究试试看。

三、小结

至此,熊猫烧香病毒的逆向分析系列就结束了,我用了三篇文章的篇幅来一步一步地给大家做了较为详尽的分析。尽管只分析了病毒的一项大功能,但是我相信大家或多或少地了解到了病毒逆向分析的基本方法。在我看来,这里面并没有多高深的技术,重要的是经验的积累以及个人的耐心的培养。希望各位读者能够踏踏实实地将这个病毒亲自动手分析完全,相信这会令大家的收获巨大。

时间: 2024-08-09 22:03:05

病毒木马查杀第007篇:熊猫烧香之逆向分析(下)的相关文章

病毒木马查杀第008篇:熊猫烧香之病毒查杀总结

一.前言 之前用了六篇文章的篇幅,分别从手动查杀.行为分析.专杀工具的编写以及逆向分析等方面,对"熊猫烧香"病毒的查杀方式做了讨论.相信大家已经从中获取了自己想要的知识,希望大家在阅读完这几篇文章后,能够有一种"病毒也不过如此"的感觉,更希望这些文章能够为有志于在未来参与到反病毒工作的朋友,打下坚实的理论基础.以下就是我在这几篇文章的分析中所总结出来的一些知识点,分为静态分析与动态分析两个方面进行讨论,并加入了一些延伸知识,为大家查漏补缺. 二.病毒的静态分析 静态

病毒木马查杀第011篇:QQ盗号木马之专杀工具的编写

一.前言 由于我已经在<病毒木马查杀第004篇:熊猫烧香之专杀工具的编写>中编写了一个比较通用的专杀工具的框架,而这个框架对于本病毒来说,经过简单修改也是基本适用的,所以本文就不讨论那些重叠的知识,只针对这个病毒特有的方面来讨论专杀工具的编写,然后将其进行组合,就是完整的针对于本病毒的专杀工具了. 二.原理讨论 对于本病毒而言,其最大的特色就在于使用了进程守护技术.病毒运行后,同时有三个病毒进程存在,关闭其中的任何一个,由于还有两个病毒进程的存在,那么被关闭的又会被重新开启.要解决这个问题,不

病毒木马查杀第009篇:QQ盗号木马之手动查杀

一.前言 之前在<病毒木马查杀第002篇:熊猫烧香之手动查杀>中,我在不借助任何工具的情况下,基本实现了对于"熊猫烧香"病毒的查杀.但是毕竟"熊猫烧香"是一款比较简单的病毒,它并没有采取一些特别强的自我保护技术,所以我们完全可以"徒手"解决.但是这次研究的恶意程序就没那么简单,它采取了进程保护的技术,使得我们不能够使用常规手法对其实现查杀.所以这次我引入了两个工具--icesword与autoruns,以达到查杀的目的. 二.病毒的基

病毒木马查杀第002篇:熊猫烧香之手动查杀

一.前言 作为本系列研究的开始,我选择"熊猫烧香"这个病毒为研究对象.之所以选择这一款病毒,主要是因为它具有一定的代表性.一方面它当时造成了极大的影响,使得无论是不是计算机从业人员,都对其有所耳闻:另一方面是因为这款病毒并没有多高深的技术,即便是在当时来讲,其所采用的技术手段也是很一般的,利用我们目前掌握的知识,足够将其剖析.因此,我相信从这个病毒入手,会让从前没有接触过病毒研究的读者打消对病毒的恐惧心理,在整个学习的过程中开个好头. 本篇文章先研究如何对"熊猫烧香"

病毒木马查杀第005篇:熊猫烧香之逆向分析(上)

一.前言 对病毒进行逆向分析,可以彻底弄清楚病毒的行为,从而采取更有效的针对手段.为了节省篇幅,在这里我不打算将"熊猫烧香"进行彻底的分析,只会讲解一些比较重要的部分,大家只要掌握了这些思想,那么就可以处理很多的恶意程序了.一般来说,对病毒的静态分析,我们采用的工具是IDA Pro,动态分析则采用OllyDbg.由于后者会使病毒实际运行起来,所以为了安全起见,最好在虚拟机中操作.另外,在实际分析过程中,我们可能还需要一些辅助工具,比如侦壳或脱壳程序等.为了简单起见,这次研究的"

病毒木马查杀第013篇:一个基于.NET的“敲竹杠”病毒研究

一.前言 恶意程序发展至今,其功能已经从最初的单纯破坏,不断发展为隐私的窥探,信息的盗取,乃至如今非常流行的"敲竹杠"病毒,用于勒索.可见随着时代的发展,病毒的作者们往往也是想利用自己的技术来获取不义之财,变得越来越功利化了.而本系列文章也顺应了这个发展,从病毒讨论到木马,进而来到了"敲竹杠"病毒的讨论上来. 二.什么是"敲竹杠"病毒 其实"敲竹杠"病毒的行为很简单,它就是篡改我们的计算机的开机密码,然后病毒作者留下个人的联系

病毒木马查杀第004篇:熊猫烧香之专杀工具的编写

一.前言 如果是非感染型的病毒,完成行为分析之后,就可以开始编写专杀工具了.当然对于我们这次研究的对象--"熊猫烧香"来说,其实通过之前的行为分析,我们并没有得出它的所有恶意行为,毕竟还没有对其进行逆向分析.所以这里仅针对我们上一篇文章所得出的结果,来进行专杀工具的编写.一般来说,专杀工具既可以用批处理实现,又可以用编程语言编写,但是现实中更多的还是用后者进行制作的,因为其更加严谨.灵活.因此我这里会使用C++来写一个简单的"熊猫烧香"专杀程序. 二.病毒行为回顾与

病毒木马查杀第006篇:熊猫烧香之逆向分析(中)

一.前言 上一篇文章讲解了"熊猫烧香"病毒样本的反汇编代码入口处的分析,虽然尚未研究到病毒的核心部分,但其实我们后续的分析与之前的思想是一致的.而越到核心部分,可能会遇到越来越多的API函数,结合所调用函数的参数进行分析,反而有助于我们更容易地理解病毒的行为.应当将分析出的每一个CALL函数,改为我们能够理解的名字,这往往也有助于对后续程序的理解. 二.病毒功能分析 上一篇文章的最后,我留下了三个CALL没有分析,现在进入第一个CALL,即sub_408024的内部查看一下: 图1 s

病毒木马查杀第012篇:QQ盗号木马之逆向分析

一.前言 在本系列的文章中,对每一个病毒分析的最后一个部分,若无特殊情况,我都会采用逆向分析的手段来为读者彻底剖析目标病毒.但是之前的"熊猫烧香"病毒,我用了三篇文章的篇幅(每篇2500字左右)也仅仅分析了病毒的三分之一,而且还没分析到病毒的核心部分.主要也是因为那是我这个系列为大家分析的第一个病毒,为了将一些原理性的东西说清楚,所以文章略显冗长,也主要是照顾一下初学的朋友,摒弃那些高大上的东西,将我的实际分析过程完整地呈现出来.相信大家在认真阅读完那三篇文章后,都能够掌握基本的分析方