病毒分析教程第五话--动态调试分析(上)

版权声明: https://blog.csdn.net/m0_37552052/article/details/82355281

动态调试分析(上)


教程参考自《恶意代码分析实战》
程序来自:http://www.nostarch.com/malware.htm


使用静态逆向分析技术只能分析大多数简单的恶意软件,若恶意软件经过加密或动态地加载调用函数,则无法对其进行分析,这时候就需要用到动态调试分析技术。


PS:由于动态调试分析过程冗杂,所以本话使用问答的方式进行讲解。

Lab 9-1

本节实验使用样本Lab09-01.exe。
我们学习动态调试技术并不是为了用它取代静态分析技术,而是将两者配合使用,因为这两者各有各的优势,动静结合通常是分析恶意软件的常规方法。如下图,寻找main函数地址就是IDA的优势,我们可以先通过IDA定位main函数地址,再用OD跟进。
1

如何让这个恶意代码安装自身?
使用OD在0x40AF0上下断点,运行到main函数入口点,然后我们发现有一个call 0x402EB0的指令,其实从上图的IDA图中可以知道0x402EB0就是__alloca_probe,我们不必分析。接着判断是否携带有参数,我调试时没有,则顺利执行call 0x401000。
2

进入0x401000,它的功能是检查注册表项HKLM\SOFTWARE\Microsoft\XPS和键Configuration存不存在。
3

我的主机上没有该注册表项,故函数返回0,顺着执行0x402410函数。
4

0x402410函数首先获取获取当前路径名,然后调用cmd进行自删除。
5

由于现在我们OD附加在Lab09-01.exe上,所以不会被删除。执行完这操作后,程序退出。
6

为了让程序运行起来,我们只好添加一个参数,而添加什么参数呢,我们可以右键->查找->所有参考文本字串,如下图,发现了三个参数值,我们这里选用-re试试。
7

在OD菜单栏中点击调试->参数,便会出现如下对话框,填入参数,点击确认即可。
8

添加参数后成功往下执行,到了call 0x402510的位置,这个函数的功能是检查参数,如下图,参数“-re”由eax压入栈中。
9

我直接双击“Z”标志使其成功跳转。跳转后我们发现有个字符串“-in”提示,奇怪刚不是匹配过参数了吗,怎么又有一个“-in”参数比较?
10

打开IDA才发现,这个程序要求传入两个参数,第一个参数应该是操作指令(根据不同参数执行不同操作),第二个参数为程序运行的密码。
11

调整参数为“-in 123”,重新调试程序。
12

使用上述参数以及中途修改“Z”标志后,程序成功运行到了服务操作的环节,程序首先会见检查服务“Lab09-01”是否存在,若不存在则创建它。
13

14

注册完服务后会将自己复制到服务对应的system32路径下去。
15

随后获取kernel32.dll的文件时间信息,并将这些时间信息设置到Lab09-01.exe上,达到伪装的目的。
16

17

如下图,若我们发现该文件创建时间及修改时间为2010年,我们可能不会去怀疑它。
18

最后会设置注册表项HKLM\SOFTWARE\Microsoft\XPS,以及给键Configuration的设置4个值:ups、http://www.practicalmalwareanalysis.com、80、60。
19

至此,程序安装自身的流程结束。

这个恶意代码的命令行选项是什么?它要求的密码是什么?

因为检查密码的操作在前,我们先通过分析0x402510函数来看看密码是啥,通过IDA我们可以知道密码为“abcd”
20

然后来是分析各操作参数的流程:-in、-re、-c、-cc,-in我们已经分析过了,是安装服务的操作,接下来分析-re。

瞟了一眼,发现-re的操作刚好全跟-in是相反的,如:删除服务、删除注册表、删除system32下的病毒文件,那么我们可以断定,-re的操作就是卸载服务。
21

-c的操作会接收6个参数,均是用来设置注册表键值的。
22

刚好就是之前分析出的4个键值。所以-c的操作是设置注册表配置键
23

-cc的操作是读取注册表键值并打印到控制台。
24

如何利用OllyDbg永久修补这个恶意代码,使其不需要指定的命令行密码?

密码检查的操作在函数0x402510处,所以我们只需将函数开头改为:
MOV EAX,1
RET
即可使其永远返回1。我们在0x402510处右键->二进制->编辑,取消勾选保持大小,输入机器码:B8 01 00 00 00 C3,就将开头修改了。
25

修改好后,右键->复制到可执行文件->所有修改,即可完成任意密码的修补。一般的破解就是使用这种方法。
26

这个恶意代码基于系统的特征是什么?

操作注册表、创建服务、自复制到system32路径下。

这个恶意代码是否有网络特征?
有,当程序没有携带参数运行时,就开始执行恶意操作了,函数0x401000会检查注册表键值,0x402360就是恶意操作的核心函数。
27

函数0x402360总体架构是一个循环,其中有三个跳转点,若均不进行跳转,就会一直重复睡眠->执行恶意操作的动作,不出意料,这就是一个后门木马。
28

首先会拼凑一个随机的字符串。
29

创建socket连接practicalmalwareanalysis.com
31

32

然后访问页面practicalmalwareanalysis.com/hbbO/7aZN.hiT,后面的那段就是我们上面拼凑出来的随机字符串。
33

函数0x403060为_strstr函数,用来比较C&C服务器返回的数据包中是否包含特征字符串。
34

这个恶意代码通过网络命令执行了哪些不同操作?

当经过上述操作,成功与C&C服务器取得通信后,该程序便开始进行后门木马操作。从IDA可以看到,木马操作一共5个:SLEEP、UPLOAD、DOWNLOAD、CMD、NOTHING。
35

36

如下4个红框依次是SLEEP、UPLOAD、DOWNLOAD、CMD的操作(NOTHING则不进行任何操作)。
37

SLEEP不解释,就是休眠一段时间(时间值由socket接收),接下来看UPLOAD操作,发现是在system32路径下创建一个文件,文件的数据来自于C&C服务器。
38

相对应的,DOWNLOAD操作就是上传文件到C&C服务器。
39

CMD顾名思义就是远程执行命令,并把执行结果返回给C&C服务器。
40

至此,整个Lab09-01.exe的执行流程分析完毕。

猜你喜欢

转载自blog.csdn.net/m0_37552052/article/details/82355281