熊猫烧香病毒分析

熊猫烧香病毒分析

“熊猫烧香”,是由李俊制作并肆虐网络的一款电脑病毒,是一款拥有自动传播、自动感染硬盘能力和强大的破坏能力的病毒,它不但能感染系统中exe,com,pif,src,html,asp等文件,它还能终止大量的反病毒软件进程并且会删除扩展名为gho的文件(该类文件是一系统备份工具“GHOST”的备份文件,删除后会使用户的系统备份文件丢失)。
被感染的用户系统中所有.exe可执行文件全部被改成熊猫举着三根香的模样。2006年10月16日由25岁的湖北武汉新洲区人李俊编写,2007年1月初肆虐网络,它主要通过下载的文件传染。

样本:链接:百度网盘 请输入提取码
提取码:4he3

 

火绒剑监控

文件修改操作

可以看到修改了大量的desktop.ini文件,desktop.ini是文件夹配置文件;
另外也修改了C:\setup.exe 和 autorun.inf文件,将自身的安装程序setup.exe写入到C盘根目录下, autorun.inf文件是一个放置在驱动器根目录下的文本形式的配置文件,用于设置让磁盘自动运行程序。

 

 

注册表的增删改查

删除注册表项:病毒企图删除一些杀毒软件的自启动注册表项值,以及网络设置的一些相关的注册表项值;

 

设置注册表项:设置病毒的一些相关注册表项,以及设置并隐藏病毒的自启动注册表;


更改网络设置的一些相关的注册表项值

 

 

逆向分析病毒

查看PE文件

 

具体函数调用以及参数传递

OD打开后停在入口点,主函数主要是通过调用几个函数调用实现病毒的功能,主函数的结构大概可以猜测前面两个ExitProcess()是对某些条件的判断,满足条件则继续,不满足则退出进程。GetMessage()从调用线程的消息队列中检索消息。该函数调度传入的已发送消息,直到发布的消息可供检索。可以推测,病毒主要功能是在两个函数之间实现的,也就是00408024,00040CA5C,0040C97C三个函数。

 

初始化函数分析

004049E8

首先F7单步步入第一个函数004049E8,可以看到主要是一个获取模块句柄的作用。

 

 

00403C98

接下来是两个00403C98函数在调用函数前传递了两个参数到eax,edx寄存器里,在数据窗口跟进去,可以看到eax指向内存为0,edx指向“***武*汉*男* 生*??染*下***载*者***”字符串,接下来单步步入查看这个函数的功能。

可以看到内部又调用了三个函数,第三个跳过了,所以着重分析前两个功能,继续单步步入。

 

 

00403D08

逐层单步步入:

call 00403D08;

call 00402520;

call dword ptr [40D030];

可以看到调用了LocalAlloc()函数,分配内存空间。

 

00402650

首先看一下传递的参数,此时eax指向“***武*汉*男* 生*??染*下***载*者***”字符串,ecx是20,edx指向的地址为空。单步步过观察参数变化,edx指向的地址变成上面的字符串,可以推测此调用函数是进行了字符串的复制。

 

此时可以看出00403C98的功能主要是分配内存空间,复制字符串。

共调用了两次,第一次字符串是“***武*汉*男* 生*??染*下***载*者***”;第二次是下图数据窗口所示。

 

00436360

参数传递:eax指向内容为图中数据窗口的字符串,edx是"xboy"。

 

明白传递的参数后,单步步入函数内部,可以看到有一个循环,分析后知道这个循环是依次提取”xboy“的字符除以特定的除数后的商,与参数传递时传入的乱码字符串进行异或,最终生成一个字符串。总的来说,是将传递的两个参数进行解码生成字符串。

 

00404018

参数传递:传入的是原本的“***武*汉*男* 生*??染*下***载*者***”字符串,以及上面解码生成的字符串。结合函数内部的循环,可以推测出是对这两个字符串进行对比,看是否一致。这种解码后进行对比检查的操作分别对不同的字符串进行了两遍。这一部分也是病毒文件的自我保护。

 

 

病毒主要行为分析

接下来这三个函数就是病毒的主要行为

00408024

主要功能是将病毒复制到指定路径下,并将其运行起来。

 

0040277C

IDA查看函数内部,可以看到GetModuleFileName(),函数,用来获取当前进程已加载模块文件的完整路径

(包括路径和文件名)。OD跟进,查看PathBuffer处数据,可以看到执行GetModuleFileName()后变成了当前进程已加载模块文件的完整路径。

 

 

00405684

在步入函数前,查看参数传递情况,eax指向上一个函数获取的完整路径,edx指向一个全为0的地址,可以猜测是对完整路径进行操作。跟进函数后,内部有一个粗线条表示循环,分析后是对完整路径从后向前检索,直到遇到"\","/",":"符号检索停止循环。接下来调用的函数执行后,会生成一个新的字符串,也就是去除文件名称后的病毒路径。

 

 

 

00403ED4

函数开始前传递的参数是两个字符串,一个是不带文件名称的病毒路径,一个是Desktop_ini文件名,可以推测是对这两个字符串进行操作。单步步过后观察到生成了一个将上述两个字符串拼接到一起的字符串,可以看出此函数功能是拼接字符串。

 

004057A4

传递的参数是拼接后的字符串:路径+Desktop_.ini。单步步入后继续进入call 0040573C,可以看到调用了FindFirstFile()函数,也就是查找Desktop_.ini文件是否存在。

 

 

004078E0

步入函数能看到调用了非常多的函数,因此主要关注参数的传递以及变化。函数执行完毕后,数据窗口可以看到很多无意义的字符,类似于密码字典之类的信息,推测是采用密码字典进行暴力破解。

 

 

00403C44

函数调用前参数传递,eax为0。函数内部只将ZF标志位置1操作。此函数的功能就是设置标志。

 

 

00403ECC

首先观察参数调用,"MZP"字符串文件开头标志。单步步入查看,delphi的特点是字符串之前的四位是长度,也就是说eax-4存储的是"MZP"文件的长度。

 

 

0040532C

参数传递:eax指向当前路径,edx指向内存为0。单步步入后,首先获取当前路径字符串的长度,单个字符依次循环转为大写。

 

 

004054BC

GetSystemDirectoryA(),检索系统目录的路径。

 

 

00403F8C

可以看到传递了两个字符串和一个空地址,内部没有明显的API调用,此时观察函数执行之后参数的变化,函数执行后eax寄存器指向的地址所保存的内容发生了变化,可以看出是对上述传入的两个字符串进行了拼接。

 

00404018

比较两个字符串是否相同,也就是病毒目前是否在指定目录下运行。目前不是在上述病毒的指定目录运行,所以接下来看一下不在指定目录是病毒的操作。

 

004060D4

参数是"spoclsv.exe",函数内部有循环且调用CloseHandle(),可以推测该函数是在查找是否有”spoclsv.exe“进程在运行,如果有,关闭该进程。

 

 

CopyFileA()

将病毒文件改名后复制到指定路径下。

 

WinExec()

最后就是WinExec(),执行spoclsv.exe。结束当前进程。

 

在判断是否是病毒指定的路径下,如果是,才会进行接下来的操作。这里有两种方式分析接下来的程序,一种是找到刚才复制到指定路径下的spoclsv.exe病毒文件,另一种就是在判断路径时更改标志位,让程序跳转到对应位置。这里采用的是第二种。

 

当文件路径是在指定的系统目录下时,就会执行代码,释放之前申请存放病毒文件信息的内存,并获取标记信息。然后对标志信息符合的被感染成进行进一步检查,将被感染的文件进行分离,提取出原始信息。由于感染文件时预留了相关的标记信息,根据这些信息可得到原始文件。

 

0040CA5C

主函数中第二个重要函数,可以看到调用了三个函数

 

0040A2A4

创建线程,线程回调函数就是病毒感染的主要实现。跟进去分析,主要行为是遍历驱动器盘符的数目,并进入到驱动器中,遍历所有可感染文件以进行病毒复制,

 

 

 

004091DC

首先遍历了驱动器下的文件信息,并将文件与文件夹进行了分类。检查如果是文件夹,就判断是否为特殊文件夹,对不是特殊文件夹的文件夹执行破坏性操作。

 

 

 

 

首先将目标文件读取到内存中,并获取文件名及其大小,然后将自身文件复制到目标文件前,bing

追加目标程序的原始文件,最后加入标记。

感染web类型的文件只需在符合感染要求的文件尾部写入特定的字符串即可。

0040C054

创建Autorun.inf文件并进行感染

 

 

0040B7AC

建立网络连接,通过网络感染

 

 

0040C97C

最后则是病毒的自我保护

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值