15.2 病毒程序初步分析

用PEID对病毒样本进行分析后发现,这个病毒程序是由Borland Delphi 6.0-7.0所编写的。这个编译器所编写的代码与VC所编写的代码有所不同,最明显的两点区别是函数调用方式和字符串处理,Delphi编译器默认以register方式传递函数参数。

对病毒样本进行简单分析后便确定了分析的方向,接下来利用IDA来分析病毒样本程序,分析的结果如图15-4所示。

图15-4所示的oep处的部分反汇编代码是Delphi所生成的,它并不是我们所关心的病毒程序的功能代码,故不对其进行分析。代码清单15-1中的代码紧接图15-4中的代码,我们从这里开始分析。

图 15-4 病毒样本oep处的代码片段

代码清单15-1 病毒功能代码片段—IDA分析


0040D0F2 mov eax, offset dword_40F7D4;保存字符串首地址指针

;"***武*汉*男*生*感*染*下*载*者***"

0040D0F7 mov edx, offset dword_40D1D8;病毒作者信息字符串

;此函数首先完成堆空间的申请,然后将edx中保存的字符串信息复制到申请的堆空间中

;eax保存复制字符串信息的首地址,eax向后偏移8个字节保存字符串的属性

0040D0FC call sub_403C98;重命名此函数为CpyStringStack

0040D101 mov eax, offset unk_40F7D8;保存字符串首地址指针

;"感谢艾玛、mopery、海色の月对此木马的关注"

0040D106 mov edx, offset aMMoperyGLdAV;一段作者感言字符串

0040D10B call CpyStringStack;复制字符串

0040D110 mov eax, offset unk_40F7DC;保存字符串首地址指针

;"PS:服了……艾玛……=,="

0040D115 mov edx, offset loc_40D238;一段作者感言字符串

0040D11A call CpyStringStack;复制字符串

0040D11F lea ecx,[ebp-14h]

0040D122 mov edx, offset aXboy_0;"xboy";用于还原加密字符串

;"\"++戊+缓\"叛*聋+肛+删\"蚊*苜+兆++*"

0040D127 mov eax, offset dword_40D270;这是一段加密字符串

;字符串解密函数,将dword_40D270解密为"***武*汉*男*生*感*染*下*载*者***"

0040D12C call sub_405360

0040D131 mov edx,[ebp-14h];解密后的字符串首地址存入edx中

0040D134 mov eax, ds:dword_40F7D4;见第一句代码

;比较edx与eax中的两个字符串,将地址标号sub_404018修改为CmpStr

0040D139 call sub_404018

0040D13E jz short loc_40D149;跳转失败,结束程序

0040D140 push 0;结束程序

0040D142 call ExitProcess_0

0040D147 jmp short loc_40D19A


代码清单15-1是程序的校验部分,其中包含了作者以及为作者提供帮助的相关人员的信息。可结合OllyDBG动态调试分析字符串操作的相关函数功能。验证成功后,会进入病毒启动部分,所在处标号为loc_40D149,如代码清单15-2所示。

代码清单15-2 病毒验证和启动部分代码—IDA分析


loc_40D149:;跳转标号

0040D149 lea ecx,[ebp-18h]

0040D14C mov edx, offset aWhboy_0;"whboy";用于还原加密字符串

;"d}tq;*&tyld|l.lboy'blt.vj{l'|}|"

0040D151 mov eax, offset dword_40D2AC;这是一段加密字符串

0040D156 call sub_405360;查看代码清单15-1中的地址标号

0040D15B mov edx,[ebp-18h]

0040D15E mov eax, offset dword_40D2D8;查看代码清单15-1的第二行代码

0040D163 call CmpStr;比较解密后的字符串信息

0040D168 jz short loc_40D173;跳转失败,结束程序

0040D16A push 0;结束程序

0040D16C call ExitProcess_0

0040D171 jmp short loc_40D19A

loc_40D173:;跳转标号

;以下三个函数是此病毒的重要实现部分

;复制自身,传染文件并运行,如代码清单15-3所示

0040D173 call sub_4082F8;重命名为CreateAndRunPanda

;感染其他文件

0040D178 call sub_40CFB4;重命名为InfectOtherFile

;设置注册表信息,并停止杀毒软件

0040D17D call sub_40CED4;重命名为VirusProtect

0040D182 jmp short loc_40D18A


在代码清单15-2中,再次验证程序是否为病毒程序,若通过验证,则启动病毒程序。病毒样本通过CreateAndRunPanda、InfectOtherFile、VirusProtect这三个函数完成病毒的运行、感染以及病毒自身的保护,从而实现“熊猫烧香”病毒的全部功能。可见这三个函数是该病毒的主要功能模块,下面对它们的实现流程进行分析。