zoukankan      html  css  js  c++  java
  • 病毒木马查杀实战第006篇:熊猫烧香之逆向分析(中)

            本系列文章版权归“i春秋”全部,转载请标明出处。

            本文配套教程。请訪问“i春秋”(www.ichunqiu.com)。


    一、前言

            上一篇文章解说了“熊猫烧香”病毒样本的反汇编代码入口处的分析,尽管尚未研究到病毒的核心部分,但事实上我们兴许的分析与之前的思想是一致的。而越到核心部分,可能会遇到越来越多的API函数。结合所调用函数的參数进行分析,反而有助于我们更easy地理解病毒的行为。

    应当将分析出的每个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中的循环结构

            只进行静态分析,不easy明确这个循环的作用,可是结合OD单步运行。观察寄存器中的值,就非常easy明确这段代码的功用:它利用之前获取的文件完整路径,从后向前以单字节为单位。不断循环搜索。直至遇到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能够非常easy发现变化:


    图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的功能。接下来的最后一篇文章也无法将整个病毒分析全然,可是我相信,仅仅要各位读者勤于动手,并将我所讲的逆向分析的基本原理搞清楚,那么这个“熊猫烧香”就根本不在话下了。

  • 相关阅读:
    redis:高可用分析
    mysql:explain分析sql
    python中注意事项(更新)
    jupyter使用小技巧(更新)
    Jupyter中的快捷键
    Excel制作甘特图
    Vim编辑器常用命令
    Mysql主从
    常用MySql命令
    进程与线程的一个简单解释
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5188963.html
Copyright © 2011-2022 走看看