熊猫烧香(中)病毒释放机理
1、sub_40277C子函数
第一步打开IDA pro加载我们的病毒样本
第二步,定位到loc_40CBE6的位置
这里我们看到了3个函数,这3个call是熊猫烧香病毒最重要的功能
第三步,查看cub_408024neirong
这个函数最开始的位置我没看到了,将84h的值赋值给ecx,84h表示循环次数。循环的主体是下面的两个push,其中每一个push能开辟8个字节(32位)的空间,两个字节能获得16个字节的空间。这样的空间一共申请了ecx(84h)次。
第四步 我们主要分析call函数,往下看第一个函数40277c
第五步,接着用OD载入exe程序,进行动态的分析,直接跳转到该地址
0040804D
基本流程为右键“转到”->输入“0040804D”,然后下断点,然后将程序执行到此处
我们在IDA中双击查看,会发现该函数首先调用了GetModuleFileNameA。
该函数功能主要是获取当前进程已加载模块文件的完整路径
第六步,回到OD中,F7进入该函数
接着选中PathBuffer值,右键点击“数据窗口中跟随”。
注意:按下F8,大家可以在数据窗口中留意该值的前后变化。发现它成功获取了该样本的本地路径。
C:\Users\14551\Desktop\setup.exe
第7步,我们打开IDA给sub_40277C函数重命名
选中函数重命名,快捷键为N
总结,重命名及对应功能如下:
- sub_40277C -> GetFilePathAndName
- 功能:获取文件的完整路径及文件名称
2、sub_405684子函数
接着往下看函数
第一步,继续在OD中跟进
首先我们调转到00408052位置,然后下断点,然后执行过来
我们首先可以看看它压入的参数是什么?
第二步,在数据窗口中跟随EAX
单步执行,在寄存器中选中EAX,右键“数据窗口中跟随”,结果如下,我们可以看到EAX中保存的是刚刚获取的病毒文件的完整路径。
第三步,在数据窗口中跟随EDX,EDX是个空值
第四步,进入后面的00405684
先选中EAX右键“数据窗口中跟随”。
进入函数后我们发现了粗线条,说明它是一个循环
我们在循环处F7步入,也就是上图
mov eax, [local.1]
注意这里简单介绍下局部变量的概念。
小技巧 [LOCAL]是局部变量的意思,例如[LOCAL.1]就是第一个局部变量,存放在栈里的[EBP-4]位置,[LOCAL.2]就是[EBP-8],图片上的命令其实就是MOV EAX, [EBP-4]。 方法一:可以在OD的选项->调试设置->分析里面有个选项把勾去掉设置 方法二:选中该命令右键“汇编”即可,但修改后会显示灰色
第五步,接着循环分析
分析语句“mov eax, dword ptr ss:[ebp-0x4]”,首先将EBP-4赋值给EAX,而当前的EBP-4就是所获取的病毒的完整路径。
mov eax, dword ptr ss:[ebp-0x4]
然后再按F8,这里是将EAX加上EBX再减1,其中EAX是病毒完整路径的首地址,EBX是20,它又是什么呢?
mov al, byte ptr ds:[eax+ebx-0x1]
我们查看EBX,如下图所示。凡是由Delphi编写的程序,它会在字符串减4的位置保存一个数值。这个数值就是字符串的长度,我们可以看到当前路径长度是0x20。
[eax+ebx-0x1]:计算字符串最后一个字母的位置,即“e”,下图中也显示出来了“ds:[02140127]=65(e)”
第六步,继续按F8执行,这里结合IDA分析0x5C、0x2F、0x3A对应的值。选中按下“R”
5C代表斜杠(\),2F代表反斜杠(/),3A代表冒号(:)。
小结,该循环是将病毒所在完整的路径从后向前检索,直到遇到斜杠(\)、反斜杠(/)、冒号(:)结束。结合病毒来看,它找斜杠的位置,其实这段程序要么是想不包含病毒文件名的路径,要么想获取病毒的文件名(setup.exe)。
第7步,在OD中F8调试 ,注意观察数据窗口的变化
接着发现程序在调用完call函数之后,会出现一个新的字符串。事实上很明显,它是想获取去除病毒文件名后的路径。可见,程序将去除了文件名的路径拷贝到了之前申请的空间中,于是可以将sub_405684重命名。
总结,重命名及对应功能如下:
- sub_405684 -> GetFilePath
- 功能:获取去除病毒文件名后的路径
- IDA位置:0x0040805E