熊猫烧香(中)病毒释放机理

  • 1、sub_40277C子函数
  • 2、sub_405684子函数
  • 3、sub_403ED4子函数
  • 4、sub_4057A4子函数
  • 5.分析sub_4057A4后续删除功能
  • 6.sub_4078E0子函数
  • 7.sub_403C44子函数
  • 8.sub_403ECC子函数
  • 9.总结

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

3、sub_403ED4子函数

我们接着来分析下一个函数,打开IDA

第一步 打开OD

​ 返回的第一句代码是将我们之前所获取的不带文件名的地址赋值给EAX。

  • lea eax, dword ptr ss:[ebp-0x3B4]

我们选中EAX在数据窗口中跟随,可以看到对应的值是“01BD0140”

我们在数据窗口跟随ctrl+G,看到如下:是不带文件名的文件路径,现在的EAX就是保存的这个值

第二步 继续分析代码,接下来将**“Desktop_.ini”赋值给EDX。注意,0x44表示为D(十进制68对应的ASCII码)。**

第三步 通过IDA大致看看call函数sub_403ED4

单纯这样看,很难分析出它的具体功能,我们不妨只关注他的两个参数。观察执行完该函数后的参数有什么变化;

第四步 留意数据窗口,然后按F8执行

可以看到刚才所获取的不带文件的路径名,在其后面增加了一个“Desktop_.ini”,从而组成了新的字符串。

分析到这里我们就知道了sub_403ED4功能是将上面所获取的不带文件名的路径地址赋值给eax,然后将字符串“Desktop_.ini”的地址赋给edx。

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

  • sub_403ED4 -> StringCat
  • 功能:拼接字符串,包含“Desktop_.ini”后缀

4、sub_4057A4子函数

继续分析sub_4057A4子函数

第一步 在OD中查看EAX的地址,选中堆栈数值,右键“数据窗口中跟随数值”

可以看到,它的这个参数是我们之前已经连接好的字符串的首地址。

  • 0x020F0138

第二步,按下F8运行至Call 4057A4函数,再按F7进入该函数分析。

继续按下F7进入call 0040573C,发现有个FindFirstFileA函数,我们直接来看看它的参数。注意,很多时候右边注释内容是没有的,需要我们手动分析。

按下F8执行到函数调用前位置,可以看到EAX中存放是的是刚才连接出来的字符串。该函数的作用就是说明要查找当前目录下Desktop_.ini文件是否存在。

  • C:\Users\14551\Desktop\Desktop_.ini

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

  • sub_4057A4 -> CheckFileExist
  • 功能:检测文件“Desktop_.ini”是否存在

5.分析sub_4057A4后续删除功能

接着我们继续分析,由于之前进行了重命名操作,所以代码的可读性更好了,从0x00408079位置下面的代码我们都能看懂。

0x0040807E test al, al
0x00408086 push 80h
0x 004080C5 call SetFileAttributesA

它会根据上一段代码的查找结果进行判定al,即如果当前目录下Desktop_.ini文件存在,那么就会调用SetFileAttributesA函数。该函数会改变他的属性,将它的属性改为80h所代表的值,即该文件的文件属性调整为NORMAL(正常属性)。

继续往下看, 调用了一个Sleep函数停止1毫秒。停止1毫秒之后,它接着调用DeleteFileA函数将Desktop_.ini删除。正常来讲,病毒还没有运行的时候,这个Desktop_.ini文件应当是不存在的;如果存在的话,病毒首先会改变这个文件的属性,再将这个病毒给删除掉。

push 1
call Sleep
call DeleteFileA

这里看到一个未知函数sub_4040CC,它的参数是[ebp+var_3C4],事实上3C4就是文件的路径。将文件路径赋值给EAX,我们进入sub_4040CC函数。发现其功能:

验证EAX是否存在,即判定文件的路径是否为空

如果文件不存在它会直接执行loc_408110位置的函数,sub_4040CC其实就是一个验证机制,在IDA中按下ESC返回,我们给它进行重命名。

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

  • sub_4040CC -> CheckPathIsExist
  • 功能:检测文件的路径是否存在

6.sub_4078E0子函数

我们接着分析下一个函数
0x00408126 call sub_4078E0

第一步,我们在IDA中大致看下函数的内容。
我们可以看到这个函数非常的长,且也调用了很多其它的函数,那么看上去很难分析清楚这个函数到底是做什么的。这里我们先不管其具体的实现细节,只看看该函数执行完后,这些参数或寄存器位置发生了什么变化,主要关注该函数执行前后,程序使用了哪些寄存器。

第二步,打开OD跳转到40811D位置,按下F2增加断点,再按F9执行过来。
注意,病毒逆向分析就是调用IDA和OD反复调试的过程。

第三步,在OD中分析具体代码。

  • mov eax, dword ptr ss:[ebp-0x3CC]
  • lea edx, dword ptr ss:[ebp-0x4]
  • call 004078E0

首先它是将EBP-3CC赋值给EAX,再将EBP-4赋值给EDX,调用call函数。

我们现在按F8来步过这个call函数,再观察数据窗口中存在什么变化。可以看到执行完call函数后,这个函数用了很大一片区域写入了非常多看似无意义的字符,结合右边的ASCII码,可以将这些内容理解为暴力P解的字典。

  • 病毒的编写者企图利用暴力P解的方式来攻破计算机中某些验证机制

    我们F8步过这个函数看一下数据窗口的数据变化

当然这些内容还是非常多的,病毒作者也写入了很多其他信息,有兴趣的作者可以好好分析下。这些信息有助于我们获取病毒的行为信息,只有当我们深入分析其原理和实现过程,才有助于我们获取病毒的行为信息。

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

  • sub_4078E0 -> WriteVirusInfoToMem
  • 功能:写入病毒信息到内存中,病毒作者企图利用暴力P解的方式,来攻破计算机中的某些验证机制

7.sub_403C44子函数

继续在OD中分析sub_403C44子函数。

第一步,查看[EBP-8]地址对应的值。
在数据窗口中,可以看到eax的值为ebp+var_8的地址,通过OD可以知道,这个地址中保存的是0,可以理解为没有数据。

  • 00 00 00 00

第二步,我们按下F7进入这个call,查看具体内容。

  • 0x0040812E call 00403C44

可以看到,它首先是将EAX的内容赋值给EDX,我们按下F8可以看到EDX也变成了0值。

  • mov edx, dword ptr ds:[eax]

步过mov edx, dword ptr ds:[eax],寄存器的值是下图:

之后的test运算,使得ZF变为1,满足跳转条件,直接跳转至retn,那么本段函数也就结束了。

刚才我们通过test edx, edx发现ZeroFlag标志位变成了1。这个标志位变为1,说明这个值是一个0,这段函数似乎并没有实现什么特别清晰具体的功能,那么不妨将这个操作理解为某种标志的设置。

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

  • sub_403C44 -> SetZeroFlag
  • 功能:设置零标志位重设,将其设置为0

8.sub_403ECC子函数

回到OD,我们分析sub_403ECC子函数。

第一步,查看并分析[EBP-4]保存的内容。

  • mov eax, dword ptr ss:[ebp-0x4]

在数据窗口中跟随,可以看到“MZP”,这里大致是保存了一个PE文件,事实上就是将这个PE文件的首地址赋值给这个EAX,接着看看这个call。

第二步,分析call 403ECC函数。
按下F7进入这个call函数,首先调用“TEST EAX, EAX”验证PE文件是否存在。

按下F8继续,这里是跳转不成立,然后出现在EAX-4位置,我们在数据窗口中跟随内容。

mov eax, dword ptr ds:[eax-0x4]小技巧
这里需要特别强调的是,由于本病毒程序是使用Delphi编写的,因此字符串的首地址减去4后,所取出的4个字节的内容就是此字符串的长度。

换句话说,这段代码中的[eax-4]就是eax所指向的文件长度,字符串长度就是EC00,这条语句就是将EC00保存在寄存器里面。于是可以将sub_403ECC重命名。

字符串长度:EC00
现在EAX保存的就是字符串的长度,即PE文件的长度

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

  • sub_403ECC -> GetFileLen
  • 功能:获取PE文件的长度

之前这个文件的长度是保存在EAX里面,这里又将文件长度赋值给EBX。

接下来,在获取文件长度后,程序会跳转到loc_408163处执行。首先它会验证EBX是否为零(文件长度是否为0),正常来说文件长度是不为0的,也就是这个文件是真实存在的,所以接下来的跳转不成立,会继续往下执行。

test ebx, ebx
jle short loc_408171
mov eax, [ebp+var_4]

接着我们尝试用OD进行分析,跳转到0x00408163的位置。按下F2增加断点,再按F9让它执行过来。

按下F8继续执行,这里是将 [EAX+EBX-1],由于EAX指向的是文件起始地址,而EBX是文件的长度,减一是获取整个PE文件最后一个字符它是什么。事实上,CMP语句就是验证这个文件最后一个数据它是否为零,如果为0,则接下来的跳转不成立。

cmp byte ptr [eax+ebx-0x1], 0x0

经过OD的动态分析发现,因为这里显示跳转未实现,故文件尾端的值为0,所以不执行跳转,继续向下执行。

9.总结

写到这里,该部分关于sub_408024核心函数的部分功能就介绍完毕

0x0040804D call sub_40277C
– 重命名为:GetFilePathAndName
– 功能:获取文件的完整路径及文件名称

0x0040805E call sub_405684
– 重命名为:GetFilePath
– 功能:获取去除病毒文件名后的路径
– IDA位置:0x0040805E
– 技巧:循环将病毒的完整路径从后往前检索,直到遇到斜杠(\)、反斜杠(/)、冒号(:)结束,从而提取病毒的路径或病毒的文件名(如setup.exe)

0x0040806E call sub_403ED4
– 重命名:StringCat
– 功能:拼接字符串,包含“Desktop_.ini”后缀

0x00408079 call sub_4057A4
– CheckFileExist
– 功能:检测文件“Desktop_.ini”是否存在

0x00408105 call sub_4040CC
– CheckPathIsExist
– 功能:检测文件的路径是否存在

0x00408126 call sub_4078E0
– WriteVirusInfoToMem
– 功能:写入病毒信息到内存中,病毒作者企图利用暴力P解的方式,来攻破计算机中的某些验证机制

0x0040812E call sub_403C44
– SetZeroFlag
– 功能:设置零标志位,将其设置为0

0x00408136 call sub_403ECC
– GetFileLen
– 功能:获取PE文件的长度
CMP语句就是验证PE文件最后一个数据是否为零

希望大家可以有所收获!!!

[病毒分析]熊猫烧香(中)病毒释放机理相关推荐

  1. [病毒分析]熊猫烧香(下)核心函数部分分析

    熊猫烧香(下)病毒释放过程 1.loc_408171 2.sub_403F8C子函数 3.sub_4060D4子函数 4.CopyFile和WinExe子函数 1.loc_408171 第一步 打开I ...

  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. 熊猫烧香变种病毒分析

    熊猫烧香变种病毒分析分析报告 样本名 2_dump_SCY.exe(熊猫烧香) 作者 yusakul 时间 2018-07-13 平台 Win7-32 1.样本概况 1.1 样本信息 病毒名称 2_d ...

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

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

  6. 熊猫烧香电脑病毒案告破 抓获8名疑犯

    据介绍,2006年底,我国互联网上大 规模爆发"熊猫烧香"病毒及其变种,该病毒通过多种方式进行传播,并将感染的所有程序文件改成熊猫举着三根香的模样,同时该病毒还具有盗取用户游戏账号 ...

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

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

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

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

  9. 服务器系统病毒的来源,服务器中病毒的症状是什么?

    我们都知道现在我们身边有很多的病毒,经常会见到手机和电脑中病毒,你知道电脑中病毒后是什么症状吗?最近很多微信用户问我服务器中病毒的症状是什么?下面小编带你了解一下中病毒的症状是什么? 服务器中病毒的症 ...

最新文章

  1. 第三代主流测序数据组装软件
  2. 浅谈微服务基建的逻辑
  3. 网络推广专员如何稳定搜索引擎首页排名全力以赴致力于网络推广
  4. linux phpstorm安装和激活方法
  5. GPU 编程入门到精通(二)之 运行第一个程序
  6. 思考题-算法小思考题
  7. Spark性能优化指南:高级篇
  8. ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程
  9. Python 装饰器的八种写法
  10. Linux下java获取屏幕分辨率,关于Android如何获取屏幕分辨率的例子
  11. 华为服务器修改密码命令,服务器用户名密码修改
  12. java web项目编译_Java三种编译方式: 前端编译 JIT编译 AOT编译
  13. 显卡对决nbsp;NVIDIAnbsp;GTnbsp;555Mnbsp;VS…
  14. excel表格中身份证信息提取出生年月日,年龄,性别,出生地
  15. Html 电池图标
  16. python编写移动平均_如何在Python中编写不同类型的移动平均线。
  17. Jenkins配置slaver节点
  18. qiniuLive 连麦流程介绍
  19. QDockWidget增加边框
  20. Bookmark Sentry – 检查重复、删除死链书签 Chrome扩展

热门文章

  1. Mac系统安装JDK1.8及环境变量配置
  2. el-table操作显示图标,鼠标移入显示弹窗
  3. iview中Table的render用法大全
  4. HAL库的SPI 发送16位
  5. 单代号网络图计算例题_电气图纸制图规范及电气图纸的识读方法、项目代号意义...
  6. 机器学习算法(4)—— 决策树算法
  7. ZYNQ7020系列——PLL学习
  8. 2022-07-10 第七小组 闫馨月 学习笔记
  9. 常用短距离无线通信优缺点的纵横比较
  10. can only accept this command while in the powered on state(iOS蓝牙 打开app后的第一次扫描要扫描两次)