这是我第一次分析病毒,我把我整个学习过程记录下来分享给大家,希望大家能有所受益。萌新第一次分析病毒,请各位大佬多多见谅。
文件: C:\Users\15pb-win7\Desktop\样本及调试文件\样本及调试文件\panda.vir 大小: 61952 bytes 修改时间: 2007年1月9日, 9:06:10 MD5: 3520D3565273E41C9EEB04675D05DCA8 SHA1: BB1D8FA7EE4E59844C1FEB7B27A73F9B47D36A0A CRC32: 23B6DA2A
1、查壳工具:PEID、ExeInfo PE 2、动态反汇编分析工具:15PB OD 3、静态反汇编分析工具:IDA Pro v6.8 4、ARK行为监控工具:火绒剑、PCHUNTER32 5、网络沙箱:微步在线沙箱 7、资源查看工具:Resource Hacker 8、网络数据监控工具:WSEplorer 9、PE解析工具:Load PE 10、特征生成工具:Hash 11、二进制文本编辑工具:notepad++、010Editor 12、注册表对比工具:RegShot
为了更加准确判断程序的基本信息,这里使用PEID和Exeinfo PE进行查壳。
结论:病毒是Borland Delphi程序编写的无壳程序,
就是在程序不运行的情况下尽可能多的使用工具对进行病毒行为信息的搜集和整理和猜测的过程。PS:最后需要通过IDA和OD对这些病毒行为猜测进行验证。
有些病毒会利用资源表对自己进行隐藏,所以需要利用资源工具对资源信息进行分析检测。
除了字符串和熊猫烧香图标外,没有找到其他有用的信息。
将病毒文件拖入Load PE查看每个DLL导入的API,对病毒具体行为进行初步的猜测。为了方便大家观看,我利用Load PE的文本显示功能将导入表信息复制到了txt文件中并进行了整理。PS:这一步只是对病毒行为进行简单的猜测,目的是为了给详细分析时提供思路。具体病毒行为还是要通过IDA和OD双剑合璧为准。
根据上面通过导入表进行病毒行为猜测后需要对病毒字符串进行检索,从而过滤一些病毒行为,缩小分析难度。
静态字符串检索方法:
1、使用010Editor肉眼检索(很费时费力,不推荐)
2、使用IDA进行字符串筛选(推荐)
我们这里使用IDA的字符串窗口进行字符串检索
通过这一步又可以更加清晰的分析出病毒会对一些指定的注册表进行操作,以及调用cmd程序执行一些指令。一些判断条件等。
需要注意到一点,病毒导入表中有很明显的网络连接操作,但是我们没有找到任何关于ip或者网址之类的信息,可能是该类型的字符串被病毒进行加密。需要病毒运行起来执行解密函数后才能还原。
有了以上静态分析的基础,我们可以结合病毒运行起来的行为特征进行第二次行为定位。
首先双击病毒运行起来观察病毒效果。
发现无法打开任务管理器,文件夹下的文件图标被改为熊猫烧香图标
执行了cmd、net、net1和spcolsv.exe进程。
对文件动作进行过滤,首先查看病毒目录遍历操作
查看病毒创建了哪些文件,猜测遍历目录时会为每个目录都添加一个Desktop_.ini文件。
打开Desktop_.ini文件,发现与系统时间相同,猜测该文件为病毒程序提供感染时间。
使用RegShot工具拍摄注册表快照,对比病毒具体修改了哪些注册表键值。由于修改的注册表较多,这里就不放上所有的修改项,大家可以自己使用这个工具进行对比。
可以发现进程大多数都是在执行遍历进程的操作,而且有进程的修改和给窗口发送消息的操作。可以猜测病毒是在遍历杀软,并尝试发送关闭程序消息给杀软实现对杀软的关闭。内存读写可能在控制指定进程执行特定操作。
首先用火绒剑观察是否有网络活动,发现进程有TCP协议进行网络操作。
具体行为是通过感染139端口和445端口进行主动连接指定的IP地址。
使用WSExploer观察进程,发现了熊猫产生的可以流量。再次确认了熊猫的网络操作。
对于熊猫的分析我采用了传统的线性分逐层分析法,即先完善病毒程序的主题框架,再完善细节。
首先进入病毒主函数后会看见病毒对三个字符串进行了拷贝操作,分别将字符串地址拷贝到临时指针中。然后开始进行第一次字符串解密操作。
OD中执行解密函数后的结果
在通过了两个解密校验后。我对熊猫烧香的主题逻辑进行了整理,主体程序主要分为三个主函数:
1、病毒程序运行伪装和感染自校验函数
2、病毒感染其他文件的函数
3、病毒自我保护函数
看下程序伪代码
以上的程序代码是病毒的主逻辑函数。接下来我们对这三个函数分别进行分析。
首先分析下病毒的初始化操作,代码如下
病毒进入初始化函数后会先判断当前运行程序所在目录下是否有Desktop_.ini时间文件,如果存在就删除掉该文件。
病毒开始搜索运行文件中的感染标记来区分,目前运行的是病毒本体还是被感染的文件。感染标记位于病毒最后一个字节,如果最后一个字节为1,则表示为被感染的文件。
寻找感染标记
判断为感染母体后,病毒还会通过一次路径比较判断是否是第一次运行母体程序。如果是第一次运行就将病毒伪装到:系统目录+dirvers目录下,并更名为spcolsv.exe进行伪装运行。最后退出这个傀儡程序。
如果运行的是被感染的文件。则通过裁剪感染标记位后面的感染标记获取一个文件名称原程序名称。还原的程序名称=原文件名+原文件后缀。然后创建一个批处理文件并运行。目的为了还原原文件,让运行中的病毒重新对该文件进行感染。
批处理文件
批处理命令
在写完批处理文件后,被感染的文件再次对病毒进程进行一次判断。拍摄进程快照,判断伪装的病毒程序是否还在运行。如果没有运行就到伪装目录下删除伪装病毒程序。重新写入一个病毒程序并重新运行。
感染文件函数内又分为三个函数,功能分别是:
1、创建一个线程对全盘遍历感染文件
2、设置一个时钟定时到所有盘符下写入Setup.exe和autorun.inf文件
3、创建多个线程,感染139和445端口,将病毒文件自拷贝到网络共享目录下
病毒在遍历文件的时候会在所有指定文件夹下创建一个Desktop_.ini记录感染时间,并对该目录下所有文件后缀遍历,找到目标后缀就会感染,病毒感染逻辑如下图。
主要感染的代码为下图
感染文件后效果
当病毒遇到网络文件后缀时,会将一段标签数据写入文件。让网络文件被解析时直接访问病毒服务器。
写入网络脚本文件的数据如下
病毒第二个函数是设置了一个计时器,定时对盘符进行遍历。主要函数如下
病毒运行效果如下
第三个函数逻辑是创建了10个TLS线程,判断有哪些局域网主机可以通过139和445端口连接。如果能连接将病毒文件拷贝到网络共享文件夹中。
进入病毒自保护函数可以看到病毒设置了4个时钟函数。
进入第一个时钟函数操作比较简单。病毒定时将自己的路径添加入开机自启项中。而且定期设置不显示隐藏属性。
关闭杀软函数有两类:
1、通过向杀软窗口发送关闭消息关闭杀软
2、通过遍历进程快照关闭杀软
具体效果如图
第二个时钟定时会创建一个线程,线程用于从病毒文件下载程序并运行。
定时创建两个线程,第一个线程与第二个时钟的创建的线程执行内容相同。第二个线程主要删除了网络共享文件,并且设置用户文件隐藏共享。
关闭指定杀软服务,删除注册表键值
1、结束spo0lsv.exe
2、通过注册表管理器将隐藏属性svcshare修改为1
3、注册表中HKEY_CURRENTUSER\Software\Microsoft\Windows\CurrentVersion\Run下的自启子键删除
4、将隐藏的Setup.exe和autorun.inf删除
5、删除Desktop.ini
[公告]安全测试和项目外包请将项目需求发到看雪企服平台:https://qifu.kanxue.com
最后于 1天前 被独钓者OW编辑 ,原因: 操作失误导致部分内容重复