熊猫烧香(下)病毒释放过程

  • 1、loc_408171
  • 2、sub_403F8C子函数
  • 3、sub_4060D4子函数
  • 4、CopyFile和WinExe子函数

1、loc_408171

第一步 打开IDA Pro和OD载入病毒样本

打开OD转到00408171 按下F2增加断点,运行到这个地方

思考:OD重新打开断点为什么还保留着?
在OllyDbg中,它会把所有与程序后模块相关的信息保存在单独的文件中,以便在模块重新加载时继续使用。这些信息包括标签、注释、断点、监视、分析数据、条件等。

第二步,在OD中分析0x00408171位置。
首先是一个CMP比较操作(Compare),接着查看EBP-0x8的内容。

  • 0x00408171 cmp dword ptr ss:[ebp-0x8], 0x0

我们可以看到它内容是0,它的比较对象也是0

第三步,分析JNZ跳转指令。
接着按下F8,可以看到比较后,ZF变成了1。由于二者都为0,所以在比较过后ZF=1,那么接下来的跳转并不执行,继续执行下面的内容。

JNZ 0x004082F0
JNZ(jump if not zero)结果不为零则转移,即z=1时跳转,但是z=1时,zf=0。故JNZ跳转的条件也是零标志位zf=0,由于指令执行的结果为0,此时的ZF值为1,故不执行跳转CF(进位标志)=1:算术操作最高位产生了进位或借位,=0 最高位无进位或借位 ;
PF(奇偶标志)=1:数据最低8位中1的个数为偶数, =0 数据最低8位中1的个数为奇数;
AF(辅助进位标志)=1:D3→D4位产生了进位或借位, =0 D3→D4位无进位或借位;
ZF(零标志)=1:操作结果为0, =0 结果不为0;
SF(符号标志)=1:结果最高位为1,=0 结果最高位为0;
OF(溢出标志)=1:此次运算发生了溢出, =0 无溢出。

在这里插入图片描述

第四步,分析函数sub_40532C。
在IDA中继续查看代码内容。

C:\Users\14551\Desktop\setup.exe

接下来将EDP-0x3D4赋值给EDX,F8执行并在数据窗口中跟随,发现它此时还是空值。

进入函数

发现该函数的主要功能是API函数CharUpperBuffA。

  • CharUpperBuffA函数作用:把缓冲区中指定数目的字符转换成大写字母

总结,重命名及对应功能如下:

  • sub_40532C -> CharToUpper
  • 功能:缓冲区中指定数目的字符转换成大写字母

第五步,分析函数sub_4054BC。
在IDA中双击查看该函数的内容。可以发现它主要是调用了GetSystemDirectory函数,从而获取系统的路径。

总结,重命名及对应功能如下:

  • sub_4054BC -> GetSystemDir
  • 功能:获取系统路径

2、sub_403F8C子函数

第一步,我们让OD跳转到0x004081AB的位置。
直接按F8执行下来,在这里可以看到PUSH是将刚才利用GetSystemDirectory函数所获取的系统路径字符串进行压栈。

压栈内容为system32这个目录。

  • C:\Windows\system32

第二步,按下F8继续分析,发现它又将drivers压栈,将spoclsv.exe字符串压榨。

  • drivers
  • spoclsv.exe

注意,上图仅显示了setup.00408658,没有将具体的值显示出来。

思考:OD中如何查看堆栈中的值?
选中ESP堆栈指针寄存器(主要用于存放堆栈内存储单元的偏移量),在“堆栈窗口中跟随”。然后依次选择值“0x00408644”和“0x00408658”,右键在“数据窗口中跟随”,即可查看堆栈中的值。

发现对应的值为“drivers”和“spoclsv.exe”,如下图所示。

写到这里,我们可以推测:下面这个函数的功能是将压入堆栈的字符串进行拼接,成为一个新的路径。

第三步,按下F8执行到这个Call函数进行分析。
按下F8执行过来后,选中EAX在数据窗口中跟随。

EAX是累加器(accumulator),它是很多加法乘法指令的缺省寄存器。
EBX是基地址(base)寄存器, 在内存寻址时存放基地址。
ECX是计数器(counter),是重复(REP)前缀指令和LOOP指令的内定计数器。
EDX则总是被用来放整数除法产生的余数。

在数据窗口中右键“转到”->“表达式”,然后输入值:

  • 01C67E28

接着再CALL函数处按下F8,我们需要关注数据窗口中的前后变化情况。我们可以看到它新生成了一个路径字符串。

  • C:\Windows\system32\drivers\spoclsv.exe

总结,重命名及对应功能如下:

  • sub_403F8C -> TwoStringCat
  • 功能:将两个字符串进行连接

3、sub_4060D4子函数

事实上,这段程序的功能如下:

  • 首先通过这个函数将字符串连接;
  • 再将路径字符串转换为大写字母;
  • 然后将这个字符串与这里进行对比。

第一步,我们通过OD来分析下比较功能,在OD中执行到4081E3位置,然后按F9执行过去。

  • 0x004081E3 call sub_404018

第二步,分析sub_404018函数。
我们在这里看下它比对的是什么字符串,在数据窗口中跟随值,可以看到两个字符串分别是拼接的字符串和当前OD分析程序的字符串。

C:\USERS\14551\DESKTOP\SETUP.EXE
C:\WINDOWS\SYSTEM32\DRIVERS\SPOCLSV.EXE

很明显,我们分析的熊猫烧香病毒程序在桌面上,而比对的是DRIVERS路径下。

sub_404018函数的目的是分析当前这个程序是不是drivers目录下的这个程序,如果是的话执行一段代码,否则执行另一段代码。

因为目前不是在drivers路径下,因此它执行另一段代码,我们按下F8继续执行。JE跳转不成立,继续出现一个新的CALL。

  • 0x004081F3 CALL setup.004060D4

第三步,sub_4060D4函数的参数分析。
该函数存在一个参数存在EAX中,通过数据窗口跟随发现值为:

  • spoclsv.exe

我们回到IDA查看该函数的基本组成,双击进入sub_4060D4函数。可以看到这个函数非常长,并且内部包括很多CALL函数,如果说一个个CALL分析,会发现它调用了很多的API函数。通过分析归纳该函数的作用如下:

查找当前内存中指定的进程,即查找当前是否有spoclsv.exe这个进程

总结,重命名及对应功能如下:

  • sub_4060D4 -> SearchAndTerminateProcess
  • 功能:查找当前内存中的指定进程,若存在,则将其终止

4、CopyFile和WinExe子函数

在CopyFile函数位置我们停下来分析。

  • 0x004082A6 call CopyFileA

第一步,我们将OD跳转到文件名0x0040828C的位置,按下F2增加断点。

  • 0x0040828C push eax

程序执行过来后,在这里我们跟踪下这个EAX地址。这里可以看到想要拷贝的地址就是刚才我们所连接成的字符串地址。

  • C:\Windows\system32\drivers\spoclsv.exe

那么,它所拷贝的内容是什么呢?

第二步,继续分析拷贝文件的内容。
按下F8执行到0x004082A5位置,可以看到它是将当前这个病毒文件复制到drivers目录下,通过CopyFile来实现。

事实上,它是将我们的当前文件改为spoclsv.exe之后,再复制到drivers目录中。

第三步,我们继续往下分析,看到一个WinExec函数。

通过OD来到4082E3位置,我们看看这个参数来判断它想执行什么程序。

第四步,按下F2增加断点,然后F9执行过来,并在数据窗口中跟随EAX值。
可以看到,它实际想执行的就是这个spoclsv.exe程序。也就是说,它在把当前这个病毒样本复制到drivers目录之后,那么这句代码就是将它执行起来。再往下ExitProcess是结束当前正在运行的进程,即熊猫烧香的病毒样本。


注意,当病毒本体将自身复制到“drivers”中并改名后,这里就是对改了名字的病毒程序执行运行的操作,然后主体程序就退出了。如果想继续用OD进行动态分析,要么载入“spoclsv.exe”,要么对之前的一处条件跳转进行修改,令程序以为自己就是“spoclsv.exe”。

第五步,回到跳转位置0x004081E8,对其进行分析。

在OD中跳转到该位置,然后按下F2下一个断点,并执行到断点处。

  • 0x0040818 JE 004082F0

正常来说,由于我们当前所分析的程序并不是drivers目录下的那个病毒样本,因此这个跳转是不成立的。这里为了使其成立,可以将JZ修改为JNZ,但是这改变了病毒程序。最好的办法是改变ZF标志位,将原来的0改为1就可以了。

第六步,双击ZF标志位,它会变成1。
双击后可以看到提示“跳转已实现”,现在这个病毒就以为自己是spoclsv.exe。

第七步,按下F8执行到4082F0位置

真正实现病毒功能的也就是“spoclsv.exe”这个程序。
希望大家可以有所收获!!!

[病毒分析]熊猫烧香(下)核心函数部分分析相关推荐

  1. [病毒分析]熊猫烧香(中)病毒释放机理

    熊猫烧香(中)病毒释放机理 1.sub_40277C子函数 2.sub_405684子函数 3.sub_403ED4子函数 4.sub_4057A4子函数 5.分析sub_4057A4后续删除功能 6 ...

  2. [病毒分析]熊猫烧香

    熊猫烧香病毒分析报告 1.样本概况 1.1 样本信息 1.2 测试环境及工具 1.3 分析目标 2.具体行为分析 2.1 主要行为 2.1.1 恶意程序对用户造成的危害 2.2 恶意代码分析 3.解决 ...

  3. [病毒分析]熊猫烧香分析

    目录 1.样本概况 1.1 样本信息 1.2 测试环境及工具 1.3 分析目标 2.具体行为分析 2.1 主要行为 2.1.1 恶意程序对用户造成的危害 2.2 恶意代码分析 3.解决方案 3.1 提 ...

  4. 对比勒索病毒和熊猫烧香,谈如何保证服务器端数据安全?

    勒索病毒中毒后画面 熊猫烧香中毒画面 传播方式比较: 和大部分病毒木马一样,都是先想方设法进入局域网,以前常见的方式是通过邮件或网页方式.病毒文件等传统传播方式传播进局域网,这次多了一个通过文件共享端 ...

  5. 新病毒仿熊猫烧香 利用 Vista系统漏洞疯狂传播

    3月31日,瑞星全球反病毒监测网截获一个与"熊猫烧香"非常相似的高危病毒,命名为"ANI蠕虫(Worm.DlOnlineGames.a)".该病毒不光传播和危害 ...

  6. YouTube博主实测病毒之王“熊猫烧香”,当年是它太强还是杀毒软件太弱?

    来源|大数据文摘 文|王烨 2007年,有一款电脑病毒席卷大江南北,无论是个人还是企事业单位,电脑纷纷中招,网络一度瘫痪. 这款病毒的特点是被感染的用户系统中所有.exe可执行文件全部被改成熊猫举着三 ...

  7. 病毒丨熊猫烧香病毒分析

    作者丨黑蛋 一.病毒简介 病毒名称: 熊猫烧香 文件名称: 40fee2a4be91d9d46cc133328ed41a3bdf9099be5084efbc95c8d0535ecee496 文件格式: ...

  8. 小白学分析——熊猫烧香分析报告【附pdf】

    0x00 样本信息 名称:panda.exe 文件大小:60.50 KB (61952 bytes) 修改时间:2007.01.09 MD5:3520D3565273E41C9EEB04675D05D ...

  9. IDA分析-熊猫烧香

    转载自CSDN博主「九阳道人」大神. 版权声明:本文为CSDN博主「九阳道人」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.c ...

最新文章

  1. 重磅直播 | PointDSC:基于特征匹配的点云配准方法(CVPR2021)
  2. python映射类型-python映射类型的相关介绍
  3. 深度学习:推动NLP领域发展的新引擎
  4. 玩转spring boot——结合redis
  5. 启动时指定需要绑定的网卡_为什么小型汽油机在启动时需要拉风门,而汽车却不用?...
  6. soapui自带的webservice实例 MockService
  7. 第7篇:Flowable快速工作流脚手架Jsite_请假实战_HR审批
  8. 微信公众平台开发者原理图解
  9. SpringBoot接收数组参数
  10. BundleLoader:帮你无缝加载自定义Bundle里的资源文件
  11. 频谱泄露和吉布斯现象
  12. zimbra 证书过期--zimbra使用
  13. 为什么要学习HashMap的底层原理?
  14. 计算机远程桌面软件,手把手教你远程控制电脑软件推荐
  15. 2019年新税法+抵扣项的个人所得税攻击计算器
  16. Quartz执行逻辑(七)任务的暂停和恢复
  17. 找回孩子丢失的阅读时光(转自中国文明网)
  18. find()的基本使用
  19. 快速排序算法(两个指针一前一后逐步向后扫描)
  20. 带着问题读源码-soul(2021-01-16)

热门文章

  1. TensorFlow 1.9终于对树莓派张开了怀抱:加入官方支持
  2. 题解 【网络流24题】太空飞行计划
  3. 跑步装备推荐:跑步运动装备清单分享
  4. Django连接数据库以及其他的基本操作
  5. 【cocos2d-x制作别踩白块儿】第六期:游戏交互实现
  6. 2016年8月15日 星期一 --出埃及记 Exodus 16:16
  7. Fidder汉化版使用
  8. Few-Shot Semantic Segmentation with Democratic Attention Networks阅读笔记
  9. Unity脚本(一)
  10. Java中接口的理解和使用