熊猫烧香(上)初始分析
@[TOC](熊猫烧香病毒分析(第一篇)

熊猫烧香样本下载
 提取码:8189
一、病毒初始化
1、工具准备 IDA、OD、PEID
2、基本流程:
- 利用查壳工具检查病毒是否带壳
- 利用OD动态分析病毒
- 利用IDA静态分析病毒
二、PEID加壳检查
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kw5jPZtu-1614239615999)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225120107716.png)]](https://img-blog.csdnimg.cn/20210225155434883.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
首先需要调用工具检查是否带壳,如果病毒还需要先进行脱壳操作。这次研究的“熊猫烧香”程序并没有加壳。首先打开PEiD工具人,然后将熊猫烧香病毒拖进去,会发现病毒的基本信息。
分析信息如下:
- 该程序并没有加壳,采用Delphi Borland Delphi 6.0-7.0编写
- 区别:Delphi在函数调用时参数的传递不完全用栈,主要用寄存器。而C++程序函数调用前会使用push语句将参数入栈,然后再进行call。Delphi一般将第一个参数放入eax寄存器,第二个参数放入edx,第三个参数放入ecx寄存器,其余参数按照与VC程序类似的方式压栈。总之,Delphi编译器默认以register方式传递函数参数。这一点与VC编译的程序完全不同。
- 提示:栈上给局部变量分配空间的时候,栈是向下增长的,而栈上的数组、字符串、结构体等却是向上增长的。理解这一点可以帮助识别栈上的变量。
三、IDA和OD的分析
(1)使用IDA载入病毒样本
(2)定位到0x0040CB7E位置
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R9i9atMG-1614239616001)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225110600452.png)]](https://img-blog.csdnimg.cn/2021022515551891.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
注意:某些病毒在IDA中会自动分析出字符串“感谢艾玛…”,并且是在调用sub_403C98函数之前,我们可以推测上面那个函数也传递了一个字符串。接着可以通过OD动态调试获取字符串对应的值。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CGG53Yuq-1614239616003)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225110639162.png)]](https://img-blog.csdnimg.cn/20210225155527772.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
但是,我目前的IDA并没有自动解析出字符串的值,只能通过经验进行分析或OD动态调试。我们发现EBP是堆栈基址,接近着两次调用sub_403C98函数,前面的mov赋值经过是参数传递的工作,从而猜测出它的功能是:参数传递给函数调用。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aaa0MLz2-1614239616003)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225113319742.png)]](https://img-blog.csdnimg.cn/20210225155537553.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
(3)sub_403C98函数分析
调用OD进行动态分析,查看sub_403C98函数调用前传递的参数。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yX21vAE5-1614239616005)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225113703548.png)]](https://img-blog.csdnimg.cn/20210225155547645.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
打开OD如上图所示,我们需要定位到0x0040CB79位置。直接按F8执行代码(单步步过),当执行到0x0040CB79位置可以看到对应的值为“武汉男生感染下载者”。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vp88iS3P-1614239616005)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225114303148.png)]](https://img-blog.csdnimg.cn/20210225155556318.png)
当然某些OD不会显示该值,只会显示“0040CC40=setup.0040CC40”,此时需要我们进一步在数据窗口跟随。
数据窗口右键->转到->表达式
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wyrf7x4K-1614239616006)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225114515845.png)]](https://img-blog.csdnimg.cn/20210225155604855.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
接着输入“40CC40”,查找传递参数对应的值。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ihdc3Tos-1614239616006)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225114610096.png)]](https://img-blog.csdnimg.cn/2021022515561636.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
显示结果如下图所示,可以看到“武汉男生感染下载者”,包括“艾玛…”,这就是病毒作者的信息。早些年病毒作者处于炫耀目的,都会加入一些自己的特征。同样,现在APT攻击溯源也会通过文件路径等获取病毒作者的信息。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U98uEGFc-1614239616007)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225114651386.png)]](https://img-blog.csdnimg.cn/20210225155624452.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
(4)分析病毒程序利用00403C98函数做了什么
接着在这个位置(0x0040CB7E)按下F2增加断点,然后按F9执行过来,按下F7进入call函数,进入的函数如下图所示。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CXMrCixN-1614239616008)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225115024566.png)]](https://img-blog.csdnimg.cn/20210225155638986.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
接着按F7执行,遇到call 00403D08继续按下F7进入,再进入call 00402520,继续进入。
- call 00403D08
- call 00402520
- call dword ptr ds:[0x40D030]
- call 00401860

当进入call 00401860函数后,我们分析这里的两个API函数,它是对互斥空间进行初始化。
- 00401876 . E8 39F9FFFF call 004011B4 ;InitializeCriticalSection
- 00401889 . E8 2EF9FFFF call 004011BC ;EnterCriticalSection
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkIr3vbj-1614239616011)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225115414393.png)]](https://img-blog.csdnimg.cn/20210225155711992.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
我们继续按下F8单步步过执行往下分析,发现在0x004018B3位置调用LocalAlloc函数,该函数用于内存分配。它会分配大小为FF8的空间,Flags为LMEM_FIXED表示分配一个固定的内存。该函数执行结果会返回一个指向新分配的内存对象的句柄。
- LocalAlloc
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vFTQCPuQ-1614239616011)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225115357414.png)]](https://img-blog.csdnimg.cn/20210225155722266.png)
写到这里,基本就确定了这个call 00403D08的功能,即分配一定大小的内存空间。我们已经进入了好几层Call,那怎么返回的呢?接下来我们再回到IDA进行分析。
(4)打开IDA进入sub_403C98函数
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7wgVN7f7-1614239616012)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225120700693.png)]](https://img-blog.csdnimg.cn/20210225155736227.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
整个sub_403C98函数由两个函数组成,刚才我们所进入的是第一个call sub_403D08的位置,并且分析了其功能是分配一定大小的空间。接着我们尝试分析下一个函数sub_402650。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KzwThpND-1614239616013)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225120935343.png)]](https://img-blog.csdnimg.cn/20210225155748286.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
接着记住这个地址“403CB3”,我们回到OD进行动态调试分析其功能。
- 转到->表达式->输入403CB3
显示结果如下图所示,然后我们按下F2增加断点,再按F9执行程序至此处,继续按下F7单步进入该函数。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ma5zCeoN-1614239616013)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225121235516.png)]](https://img-blog.csdnimg.cn/20210225155802873.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
按下F8单步步过执行至0x0040267D位置。
- 0x0040267D rep movs dword ptr es:[edi],dword ptr ds:[esi]
注意,该REP是将ESI指向地址的值以4字节方式拷贝到EDI指向的地址中。下图展示了ESI和EDI,重执行ECX次,每次执行后ESI+4、EDI+4、ECX-1,OD中在这段代码中下断后按F7单步步入就可以观察到这3个寄存器的变化。
- ecx=00000008 (十进制 8.)
- ds:[esi]=[0040CC5C]=2A2A2ADF
- es:[edi]=[021C0028]=00000000
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m9fkgTZ2-1614239616014)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225121424995.png)]](https://img-blog.csdnimg.cn/202102251558155.png)
我们先看看它复制的内容是什么,选择ESI右键“数据窗口钟跟随地址”。

按下F8运行后发现该空间被赋值“武汉男生”。写到这里,基本确定了sub_402650函数功能就是字符串的复制。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-phszVF1L-1614239616016)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225122232635.png)]](https://img-blog.csdnimg.cn/20210225155857789.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
总结,Sub_403C98主要包括两个函数,其对应功能如下:
- sub_403D08:分配内存空间
- sub_402650:字符串拷贝功能
同时,我们可以在IDA中对sub_403C98进行重命名操作,命名为“AllocStackAndCopyString”。重命名能将整个程序中该函数进行修改,便于我们理解及分析整个病毒。
sub_403C98函数有两个参数,由于采用的是Delphi编译器,因此在反汇编中,第一个参数保存在eax中,第二个参数保存在edx中。这个函数首先完成堆空间的申请,然后将edx中保存的字符串复制到新申请的空间中。这个函数在最初赋值的时候,eax的值均为0,而在执行后,eax中保存的就是新申请的堆空间中,所复制的字符串的首地址。为了易于观察,我把IDA Pro中的sub_403C98重命名为AllocStackAndCopyString。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wE9DflYT-1614239616017)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225130904918.png)]](https://img-blog.csdnimg.cn/2021022515590928.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
(5)sub_405360函数分析
继续从0x0040CB92位置往下分析,将该地址复制到OD中动态调试。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qEhXFFCf-1614239616017)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225135304366.png)]](https://img-blog.csdnimg.cn/2021022515591749.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
操作如下:
- 转到->表达式->输入“40CB92”
- 按下F2增加断点
- 按下F9执行,将代码调试到该位置
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U2cVj3Wc-1614239616018)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225135524332.png)]](https://img-blog.csdnimg.cn/20210225160002288.png)
然后按F8单步执行,可以看到0x0040CB9A存储的值,某些情况还需要去数据窗口跟随。
数据窗口右键->转到->表达式->输入40CCA4
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TUCiDhFk-1614239616018)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225135722895.png)]](https://img-blog.csdnimg.cn/20210225160009957.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
可以发现在“40CCA4”位置保存了一段字符串,它可能是一段乱码,目前无法分析它的含义。
 
继续按下F8执行到0x0040CB9F,按下F7进入函数。
- 0x0040CB9F call 00405360
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ca0XRclG-1614239616020)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225135825769.png)]](https://img-blog.csdnimg.cn/20210225160035906.png)
进入后先简单浏览下这个函数,发现后续有一个粗线循环,我们在0x004053CC下个断点跳转到这个循环处,并进入循环。
- F2按下在0x004053CC处增加断点
- F9执行到循环处
- F8进入循环
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-99ZpOUPm-1614239616020)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225135951163.png)]](https://img-blog.csdnimg.cn/20210225160045786.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
按下F8单步执行代码,此时发现字符串“xboy”,我们暂时不知道它是做什么的。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8vupti7y-1614239616020)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225140033601.png)]](https://img-blog.csdnimg.cn/20210225160054621.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
接着继续按下F8调试,发现它将字母“b”赋值给了EAX,我们怀疑它跟“xboy”有关。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fy88XueK-1614239616021)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225140108117.png)]](https://img-blog.csdnimg.cn/2021022516010284.png)
接下来的代码分析如下:
- MOV ECX, 0xA
 将常量“A”赋值给ECX。通常存在两种可能性,一种可能是ECX作为循环的此时,即可能循环A次;另一种可能是EXC作为一个运算的除数。
- XOR EDX, EDX
 异或操作将自身清空。
- DIV ECX
 可以发现它是一个除法操作,除数即为ECX。结果显示如下图所示,除法的商EAX为9,余数EDX为8。
通常除法有两种可能,要么获取EAX的商值,要么获取余数EDX的内容。那么这个程序究竟需要哪一个值呢?
- MOVX eax, byte ptr ds:[eax+ebx-0x1]
 该语句将值赋给EAX,所以上述程序做除法的目的是获取EDX这个值。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jZwTCQWB-1614239616021)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225140131201.png)]](https://img-blog.csdnimg.cn/20210225160116279.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
接着我们尝试在下列两个位置增加断点。
- 0x004053E8
- 0x00405408
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WTsXYAPz-1614239616022)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225141240933.png)]](https://img-blog.csdnimg.cn/20210225160128517.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
接着按下F9运行,查看输出的结果,分析如下:
- 将“xboy”的第三个字母“o”取出解密
- 数据窗口新增很多内容,完成字符串拷贝
反复继续按F9调试,发现它依次获取“xboy”中的值,再进行异或操作。
小结:最终解密的值如下图所示,“武汉男生感染下载者”逐渐出现。sub_405360函数我们在IDA中重命名为“DecodeString”,即解密字符串。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e7qACAce-1614239616022)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225141421096.png)]](https://img-blog.csdnimg.cn/2021022516013940.png)
(6)sub_404018函数分析
第八步,继续分析sub_404018函数的功能。
 记住地址0x0040CBA4,复制到OD中进行调试。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zocc65rl-1614239616023)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225141935335.png)]](https://img-blog.csdnimg.cn/20210225160146916.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
首先取消刚才解密的两个断点,然后跟随表达式“40CBA4”,在该位置按下F2增加断点,然后F9执行过来。
首先看到两条赋值语句,将值赋给EDX和EAX中,由于这个程序是使用Delphi编写,所以在call之前会将参数放到寄存器中,我们首先看看EDX中的内容。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pECEzqf5-1614239616024)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225145213689.png)]](https://img-blog.csdnimg.cn/2021022516015623.png)
在数据窗口中跟随数值,发现它们都是“武汉男生感染下载者”。注意第一个是我们刚才解密出来的内容。
- 0040CBA4 . 8B55 EC mov edx,dword ptr ss:[ebp-0x14]
- 0040CBA7 . A1 D4E74000 mov eax,dword ptr ds:[0x40E7D4]

接着按下F8执行,再按F7进入Call 0040018函数。大致浏览该函数后,发现又存在一个循环,我们的重点就是分析该循环,按下F2增加断点,再按F9执行过来。
- 0x00404041
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yGuoRLo4-1614239616025)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225152723012.png)]](https://img-blog.csdnimg.cn/2021022516023931.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
在数据窗口中跟随,发现ECX和EBX就是刚才所说的两个参数,一个是原始的“武汉男生感染下载者”,另外一个是解密之后的“武汉男生感染下载者”。再按F8发现这个函数比较两个字符串是否相同的操作。
- CMP ECX, EBX
总结:回到IDA,我们将函数sub_404018重命名为字符串比较函数“CMPString”。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BQNse6rZ-1614239616026)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225153042115.png)]](https://img-blog.csdnimg.cn/20210225160250729.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
(7)loc_40CBBC功能分析
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lHcE4ETj-1614239616027)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225153205364.png)]](https://img-blog.csdnimg.cn/20210225160258708.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
继续分析发现这里同样存在字符串解密和字符串比较的操作,并且解密字符编程了武汉男孩(whboy),这里不再进行解读。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W3oI6jO4-1614239616027)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225155206799.png)]](https://img-blog.csdnimg.cn/20210225160313413.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MzYzMjQ5,size_16,color_FFFFFF,t_70)
解密比较成功之后,继续跳转到loc_40CBE6的位置。这里看到了三个call函数,它们又是什么功能呢?这三个call是熊猫烧香病毒最重要的功能,我们下一篇文章继续分析。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UTlL9LPT-1614239616027)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210225155234458.png)]](https://img-blog.csdnimg.cn/20210225160327507.png)
四、总结
写到这里,熊猫烧香病毒起始阶段的逆向分析就介绍完毕,简单总结如下:
- 0x0040CB7E call sub_403C98
 – 重命名为:AllocStackAndCopyString
 – sub_403D08:分配内存空间
 – sub_402650:字符串拷贝功能
- 0x0040CB9F call sub_00405360
 – 重命名为:DecodeString
 – 0x004053CC:循环入口点
 – 0x004053E8:获取“xboy”解密字符
 – 0x00405408:完成异或解密操作
- 0x0040CBAC call sub_404018
 – 重命名为:CMPString
 – 0x00404041:循环入口点
 – 功能:字符串比较“武汉男生感染下载者”
- 0x0040CBCC loc_40CBBC
 – 功能:字符串解密和比较操作,解密字符“whboy”
 – DecodeString
 – CMPString
希望大家可以有所收获!!!
- 点赞
- 收藏
- 关注作者
 
             
           
评论(0)