• 第4篇 熊猫烧香逆向分析(中)


    仅用于信息防御学习,请勿用于非法用途!!!

    目录

    一、实验环境

    二、函数sub_408024分析

    1、函数sub_ 40277C分析

    2、函数sub_ 405684分析

    3、函数sub_ 403ED4分析

    4、函数sub_4057A4分析

    5、函数sub_4040CC分析

    6、函数sub_4078E0分析

    7、函数sub_403C44分析

    8、函数sub_403ECC分析


    一、实验环境

            实验环境:windows xp sp2
            病毒样本:87551e33d517442424e586d25a9f8522(MD5值)
            软       件:PEiD、OllyDBG、IDA pro

    二、函数sub_408024分析

            IDA中进入函数sub_408024,在函数最开始的位置,将0x84赋值给ecx,作为循环的次数。接着是两个push,每个push可以申请32位的栈空间,两个push就可以申请8字节(64位)空间,这样的申请一共进行了0x84次。

    1、函数sub_ 40277C分析

            在ollyDbg中,直接跳转到0x40804D处,对该函数进行动态分析。

             可以看到调用了函数GetModuleFileName来获取当前进程已加载模块的文件的完整路径。其中“PathBuffer”的数据所在的地址中会保存文件的完整路径的信息。按F8步过,可见数据窗口会保存文件完整路径信息。

             在IDA中将函数sub_40277C重命名为“GetFilePathAndName”.

    2、函数sub_ 405684分析

            在OllyDbg中跳转到0x40805E处,首先查看EAX、EDX中保存的内容。

            进入函数sub_405684,可见又出现了循环,直接来到循环出进行检查。  

            可以看到,将[ebp-4]处的内容赋值给eax,[ebp-4]处的内容就是之前获取的病毒的完整路径。

    ​         mov al,byte ptr [eax+ebx-1]:

    ​         注:凡是Delphi所编写的程序,它会在字符串减4的位置保存一个数值,这个数值就是字符串的长度。而ebx保存的正是这个字符串的长度。

             [eax+ebx-1]:计算字符串最后一个字母的位置,即“e”。

            ​ 继续按F8执行,结合IDA分析0x5C、0x2F、0x3A对应的值。

     

            0x5C代表'\'、0x2F代表’/‘、0x3A代表':'。

    ​         直接跳出循环,单步步过,在调用40412C函数后,数据窗口出现变化。

             由此,可以得出,函数sub_405684的作用是获取病毒文件所在路径。在IDA中,将函数sub_405684重命名为”GetFilePath“。

    3、函数sub_ 403ED4分析

             可以看到,[ebp-3B4]中保存的值为0x009B0144,而该地址对应的数据如下图所示,即不带文件名的文件路径。

             接着是将0x40862C赋值给edx,地址0x40862C对应的数据如下:

             在IDA中进去函数403ED4进行分析,一眼看不出什么。

             不妨,步过函数,观察数据窗口发生了什么。

            可以看到,刚刚不带文件的路径名后,增加了一个”Desktop.ini“,组成新的字符串。

    ​        由此,我们可以的得出函数sub_403ED4的功能:拼接字符串。

    ​        进入IDA,对sub_403ED4进行重命名:StringCat。

    4、函数sub_4057A4分析

            在OllyDbg中转到0x408073位置,在数据窗口查看[ebp-3B4]保存的值所在的地址中的数据。

             可以看到,是我们之前已经连接好的字符串的首地址。

            ​ F8步过,按F7步入函数4057A4。

             同样,步入函数40573C。按F8执行到函数FindFirstFileA()调用前的位置。

            可以看到,EAX存放的是拼接字符串的首地址。因为函数FindFirstFileA()的功能是查找指定目录的第一个文件或目录并返回它的句柄 。

            ​ 所以,程序调用该函数的目的是:查找“C:\Documents and Settings\Owner\桌面”目录下的"Desktop.ini"文件是否存在。

    ​         返回IDA,查看函数函数40573C、函数4057A4的执行流程图,可以发现,如果“C:\Documents and Settings\Owner\桌面”目录下的"Desktop.ini"文件存在,函数4057A4基本上只会调用FindFirstFileA()。故,函数4057A4的主要功能:检测文件是否存在。

     

             在IDA中,将函数4057A4重命名为“CheckFileExist”。接下来有:

    根据调用函数CheckFileExis的结果,进行跳转,即:

    • 如果当前目录下Desktop_.ini文件不存在,程序直接跳转到408110处;

    • 如果当前目录下Desktop_.ini文件存在,那么就将该文件的文件属性调整为NORMAL ,且停止1ms后,

      将Desktop_.ini文件删除。

      其中有一个未知函数sub_40400CC,对其进行分析。

      注:正常情况下,在病毒没有运行时,是不会存在Desktop_.ini文件的。

    5、函数sub_4040CC分析

            在IDA中,进入到函数sub_40400CC。

             其参数[ebp+var_3C4],事实上3C4就是文件的路径 ,可见这个函数用于检测待删除的文件路径是否为空。那么就可以将sub_4040CC重命名为:CheckPath。

    6、函数sub_4078E0分析

            在IDA中,进入函数sub_4078E0,可以发现该函数很长,且调用了很多新的函数,很难分析清楚该函数究竟干了些什么。那么可以先不管其具体实现细节,只看函数执行完后,它的参数或者寄存器里保存的地址发生了什么变化。

     步过函数,可以看到:

            该函数利用了很大的一片区域来写入了大量看似无意义的字符。结合右边分析出的ASCII码,发现这些可以理解为是一个暴力破解字典,病毒编写者企图利用暴力破解的方式,来攻破计算机中的某些验证机制。

            ​ 在IDA中,将sub_4078E0函数重命名为:WriteVirusInfoToMem 。

    7、函数sub_403C44分析

            在OllyDbg中,跳转到函数附近,并且查看参数。

             F7进入函数sub_403C44。

            首先,将eax中保存的地址的值赋给edx,验证edx是否为空,为空,则将ZF位置1,然后执行跳转命令,函数就结束了。因此,将函数sub_403C44可以理解为标志位的设置。

            ​ 在IDA中,将函数sub_403C44重命名为:SetZeroFlag。

    8、函数sub_403ECC分析

            在OD中跳转到函数参数位置。

             查看[ebp-4]保存的地址处的内容,可以看到“MZP”,这里大致是保存了一个PE文件。如果从“MZP”看不出来是PE文件,将数据窗口往下拉,可以看到PE字样,从而确定是将这个PE文件的首地址赋值给这个EAX。

     进入函数sub_403ECC

            使用test命令,可以理解为:验证PE文件是否存在。

            ​ 按F8步过,这里跳转不成立,然后下一条语句:

            ​ mov eax,dword ptr [eax-4]

            ​ 注:由于本病毒程序是使用Delphi编写的,因此字符串的首地址减去4后,所取出的4个字节的内容就是此字符串的长度。

            也就是说,eax中保存的是PE文件的文件长度。

            在IDA中将函数sub_403ECC重命名为:GetFileLen。

            参考资料:

    病毒木马查杀实战第006篇:熊猫烧香之逆向分析(中)_ioio_jy的博客-CSDN博客

  • 相关阅读:
    微信网页授权回调地址放多个参数的方法
    Mybatis - 一对多/多对一映射
    ArcGIS Pro脚本工具(13)——合并多个文件夹或数据库
    [附源码]java毕业设计昆明市人民医院血库管理系统
    什么是持续部署
    闲话Python编程-字典dict
    软件开发方法与需求分析
    springboot+jwt+shiro+vue+elementUI+axios+redis+mysql完成一个前后端分离的博客项目(笔记,帮填坑)
    springboot+Vue+ElementUI 教资考前指导网站系统
    Linux:详细介绍如何挂载?及其命令
  • 原文地址:https://blog.csdn.net/qq_55202378/article/details/126887707