[病毒分析]WinDBG实战教学(1)(一)

WinDBG实战教学(1)

一、初始任务

二、开始分析

三、分析代码

四、WinDBG调试


这里的实例选自《恶意代码分析与实战》第十章实验一

大家可以在这里下载哦

点击下载—提取码:8189

实验工具:

1、WinDBG

2、IDA

3、Dependency Walker

一、初始任务

我们将下载好的文件放到指定位置

C:\Windows\System32

[病毒分析]WinDBG实战教学(1)(一)

使用WinGDB 连接至虚拟机(CSDN中有很多关于WinDBG的初始教学,大家可以先看看)

出现下面的界面表示连接成功:

[病毒分析]WinDBG实战教学(1)(一)

二、开始分析

第一步,我们使用Dependency Walker 做静态分析

[病毒分析]WinDBG实战教学(1)(一)

然后我们可以发现第一个DLL里面导入了这么几个函数

ControlService
CreateServiceA
OpenSCManagerA
OpenServiceA
StartServiceA

第二个DLL导入了这么几个函数

[病毒分析]WinDBG实战教学(1)(一)

内容很多,但是我们要清楚,我们最最应该关注的是Create和Write


第二步,我们打开IDA查看String

[病毒分析]WinDBG实战教学(1)(一)

[病毒分析]WinDBG实战教学(1)(一)

在上图红框中的文件地址,告诉了我们,这个程序会去调用这个sys文件

第三步,分析sys文件

[病毒分析]WinDBG实战教学(1)(一)

按照书上的说法,第一个函数KeTickCount是所有驱动都会包含的一个函数,这个可以忽略

然后第二个RtlCreateRegistryKey和第三个RtlWriteRegistryValue,看到这个Registry我们就大概知道这个操作是和注册表有关的操作,然后一个是Create一个是Write,所以这个是创建和写入注册表的操作

第四步,procmon检查

procmon的教学,我曾经发过一篇博客大家可以看看

Proncmon的基础教学,点击查看

[病毒分析]WinDBG实战教学(1)(一)

我们自己查看Procmon给我们反馈的消息,我们从中找到几个核心的东西:

[病毒分析]WinDBG实战教学(1)(一)

[病毒分析]WinDBG实战教学(1)(一)

在程序的上部,我们可以看到:

[病毒分析]WinDBG实战教学(1)(一)

在运行过了Lab10-01.exe之后,起了一个线程,也就是Thread Create,然后加载了一个DLL,然后创建了一个文件,C:\WINDOWS\system32\Lab10-

01.EXE-04045C98.pf,然后RegOpenKey打开一个键,结果是Read:

[病毒分析]WinDBG实战教学(1)(一)

[病毒分析]WinDBG实战教学(1)(一)

这个操作改变了键值,改变了一个加密用的种子值

三、分析代码

我们还是回到IDA中

[病毒分析]WinDBG实战教学(1)(一)

这里首先调用了一个OpenSCManagerA,这里是:在指定的计算机上建立与服务控制管理器的连接,并打开指定的服务控制管理器数据库。

如果失败,返回的NULL,然后这里用test测试了返回值,test指令是和and类似的,如果返回的是NULL,test之后,结果为0,则ZF=1,JNZ不会跳转,继续执行,走红线,然后就返回了

如果没有失败,我们继续往下走


[病毒分析]WinDBG实战教学(1)(一)

往下走就是这里,之类调用了CreateServiceA这个函数,可以看出这个服务的名字就是Lab10-01,然后访问权限dwDesiredAccess是SERVICE_ALL_ACCESS,最后需要注意的就是lpBinaryPathName,这个的值是"C:\Windows\System32\Lab10-01.sys",意味着服务起来的时候会去加载这个二进制文件,一样的,这个函数调用失败会返回NULL

在这里,如果函数失败,返回NULL,test之后,ZF=1,然后JNZ不会跳转,所以函数失败之后,会继续走红线,也就这写代码。

[病毒分析]WinDBG实战教学(1)(一)

这里调用了OpenServiceA,如果上面这个OpenServiceA失败,然后会继续通过StartServiceA来开启这个服务

这些操作,只要一个成功了,就会直接一个JZ跳转然后返回了,如果失败,则继续往下尝试另外的函数

[病毒分析]WinDBG实战教学(1)(一)

上一篇:python通过pdfminer或pdfminer3k读取pdf文件


下一篇:表达式:使用API创建表达式树(4)DynamicExpression