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

一、前言

上一篇文章讲解了“熊猫烧香”病毒样本的反汇编代码入口处的分析,虽然尚未研究到病毒的核心部分,但其实我们后续的分析与之前的思想是一致的。而越到核心部分,可能会遇到越来越多的API函数,结合所调用函数的参数进行分析,反而有助于我们更容易地理解病毒的行为。应当将分析出的每一个CALL函数,改为我们能够理解的名字,这往往也有助于对后续程序的理解。

二、病毒功能分析

上一篇文章的最后,我留下了三个CALL没有分析,现在进入第一个CALL,即sub_408024的内部查看一下:

图1 sub_408024起始处

程序先将0x84赋值给ecx,此即为循环次数。然后使用了两个push 0,每个push能够开辟8个字节(32位)空间,所以这里每次能够获取16个字节的空间,这样的空间一共申请ecx次。那么本段代码的功能在于空间的申请。接下来有:

图2 分析函数sub_40277C

这段代码的最后出现了sub_40277C这个函数,我们跟进后可以看到这几句代码:

图3 跟进sub_40277C

可见sub_40277C主要是调用GetMuduleFileNameA这个API函数,而这个函数的功能就是获取当前进程已加载模块的文件的完整路径,那么就可以将sub_40277C重命名为:GetFilePathAndName。获取成功后,结合OD,可以看到如下信息:

图4 获取当前进程的完整路径

接下来有:

图5 分析sub_405684函数

注意第一句代码中的[ebp+var_3B8]保存的就是图4中所获取的路径地址,这个地址值赋给了eax。然后进入sub_405684分析。这个函数中有一处循环结构,是我们重点关注的对象,利用OD动态分析:

图6 sub_405684中的循环结构

仅仅进行静态分析,不容易明白这个循环的作用,但是结合OD单步执行,观察寄存器中的值,就很容易明白这段代码的功用:它利用之前获取的文件完整路径,从后向前以单字节为单位,不断循环搜索,直至遇到ASCII码值为0x5C或0x2F或0x3A,然后便跳出循环。而0x5C所表示的是字符“\”,可以知道这段程序要么是获取文件名,要么是获取不包含文件名的路径。进入最后一条语句的CALL分析,很快就能够发现:

图7 字符串拷贝

可见,程序将去除了文件名的路径拷贝到了之前申请的空间中,于是可以将sub_405684重命名为:GetFilePath。接下来有:

图8 分析sub_403ED4函数

这三句代码的第一句,是将上面所获取的不带文件名的路径的地址赋值给eax,然后将字符串“Desktop_.ini”的地址赋给edx。然后进入sub_403ED4进行分析:

图9 字符串连接代码

上图中代码的最后一个CALL,在分析sub_405684(GetFilePath)时遇到过,其作用是将字符串复制到指定的位置。对于这段程序来说,就是将“Desktop_.ini”这段字符复制到之前的路径字符后面。那么可以得知,sub_403ED4的作用是字符串的连接,那么就将其重命名为:StringCat。继续分析:

图10 分析sub_4057A4函数

第一句代码是将之前所处理完毕的路径字符串地址赋给eax,然后调用sub_4057A4函数,进入该函数可以发现:

图11 查找文件函数

这里调用了FindFirstFileA这个函数,说明它是在查找当前目录下“Desktop_.ini”文件是否存在,那么sub_4057A4函数的作用就在于检测文件是否存在,可将其改名为:CheckFileExist。接下来有:

图12 设置文件属性

由于有了之前的分析并进行了重命名,那么这一段代码的作用就很明显了,首先根据上一段代码的查找结果进行判定,即如果当前目录下Desktop_.ini文件存在,那么就将该文件的文件属性调整为NORMAL,接下来有:

图13 文件删除

停止1毫秒后,将Desktop_.ini删除。图12中有一个未知函数sub_4040CC,进去查看,则有:

图14 分析sub_4040CC函数

可见这个函数用于检测待删除的文件路径是否为空。那么就可以将sub_4040CC重命名为:CheckPath。当然,以上分析是建立在Desktop_.ini文件存在的前提下,如果文件不存在,那么程序就会直接跳到loc_408110处执行:

图15 分析sub_4078E0函数

这里最后一句调用了sub_4078E0函数,跟进去发现这个函数较长,并且也调用了很多其它的函数,乍一看,似乎不知这个函数究竟是做了什么。既然如此,我们可以先不管其具体的实现细节,只看看该函数执行完后,我们寄存器等位置产生了什么变化,主要关注该函数执行前后,程序使用了哪些寄存器。利用OD可以很容易发现变化:

图16 sub_4078E0函数执行完后的变化(部分)

由截图可以发现,在获取了当前文件的路径后,该函数利用了很大的一片区域来写入了大量看似无意义的字符。结合右边分析出的ASCII码,发现这些可以理解为是一个暴力破解字典,病毒编写者企图利用暴力破解的方式,来攻破计算机中的某些验证机制。当然截图中仅仅展示了一小部分变化,病毒还写入了很多其它信息,有兴趣的读者可以自行查看,这里不再赘述,这有助于我们获取病毒的行为信息。那么这里可以将sub_4078E0函数重命名为:WriteVirusInfoToMem。接下来有:

图17 分析sub_403C44函数

这里第一句执行完后,eax的值为ebp+var_8的地址,通过OD可以知道,这个地址中保存的是0,可以理解为没有数据。之后有一个CALL,我们进入查看一下:

图18 进入sub_403C44函数内部

这里首先取出eax所保存的地址中的值,也就是0,并赋给edx,那么edx保存的也就是0值。之后的test运算,使得ZF变为1,满足跳转条件,那么本段函数也就结束了。如果说edx所保存的不是0值,那么接下来的语句就会把eax所保存的地址中的值设为0。这么看上去,这段函数似乎并没有实现什么特别清晰具体的功能,那么不妨将这个操作理解为某种标志的设置,将sub_403C44重命名为:SetZeroFlags。继续分析:

图19 分析sub_403ECC函数

结合OD可以知道,第一句是获取文件在内存中的首地址,然后进入sub_403ECC查看:

图20 进入sub_403ECC查看

这里需要特别强调的是,由于本病毒程序是使用Delphi编写的,那么字符串的首地址减去4后,所取出的4个字节的内容就是此字符串的长度。也就是说,这段代码中的[eax-4]就是eax所指向的文件长度。于是可以将sub_403ECC重命名为:GetFileLen。在获取文件长度后,程序会跳转到loc_408163处执行:

图21 分析loc_408163

在获取了文件长度后,这段代码首先会验证文件长度是否为0,这里由于文件真实存在,所以接下来的跳转不成立。接下来,eax中保存的是文件起始地址,而ebx是文件的长度,于是可以知道,倒数第二句的对比,是验证文件的尾端数据是否为0,如果为0,则接下来的跳转不成立。经过OD的动态分析,这里文件尾端的值为0,所以不执行跳转,继续向下执行。

接下来代码的分析,留给下一篇文章。

三、小结

经过一整篇文章的讨论,我并没有将病毒的一个完整功能块分析完全,主要是我需要讲得细致些,带领大家弄清楚每一个CALL的功能。接下来的最后一篇文章也无法将整个病毒分析完全,但是我相信,只要各位读者勤于动手,并将我所讲的逆向分析的基本原理搞清楚,那么这个“熊猫烧香”就根本不在话下了。

时间: 2024-10-05 18:58:08

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

一.前言 这次我们会接着上一篇的内容继续对病毒进行分析.分析中会遇到一些不一样的情况,毕竟之前的代码我们只要按照流程顺序一步一步往下走,就能够弄清楚病毒的行为,但是在接下来的代码中,如果依旧如此,在某些分支中的重要代码就执行不到了,所以我们需要采取一些策略,走完每个分支,彻底分析出病毒的行为. 二.病毒分析 现在程序执行到了loc_408171位置处: 图1 loc_408171起始处的代码 程序首先进行比较操作,由于二者都为0,所以在比较过后ZF=1,那么接下来的跳转并不执行.之后的CALL获

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

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