且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-08-30 15:59:08

然后我们继续分析,这次我们分析Lab10-01.sys

我们找到驱动的入口点,然后查找

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

mov edi, edi
push ebp
mov ebp, esp

这些操作是在调用函数之前的初始化栈空间操作,如果你好好分析就会知道,这些操作会在栈上重新分配一些空间给要调用的函数,对我们分析来说,无关紧要,然后之后就调用了sub_10920,我们进去看看,这里执行的是驱动函数的一些必要操作。

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

然后我们退出来,看看下一个函数sub_10906

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

上图中出现了一个函数的赋值,sub_10486,然后我们进去看看就会发现这个

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

这个函数会调用RtlCreateRegistryKey这个内核函数来创建一个键在\Registry\Machine\SOFTWARE\Policies\Microsoft,然后设置为0


然后下一个调用是

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

再下面也是一样的\Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFire,然后写入的信息是wall\StandarProfile为0

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

入参是这么几个

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

然后我们看看这个Path的路径是多少,在这里的ebx显示是这样的,他被赋值为aRegistryMach_2之后就没被改变过了

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

所以这里的Path的值就是\Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFire,然后值为wall\DomainProfile, 0


然后ValueName的值是edi,在IDA里查找最后改变edi的值

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

最上面那里一个mov赋值之后就没有改变过了,然后这个ValueName的值是一个dw类型的,也就是E

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

总结一下这个函数做了什么:

RtlWriteRegistryValue例程将调用方提供的数据以指定的值名称写入指定的相对路径。


这里会将\Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFire\wall\DomainProfile的值写入成45h

四、WinDBG调试

问题:用户态的程序调试了ControlService函数,用Windbg设置一个断点,来观察ControlService的调试导致内核执行了怎么样的操作?


我们先在IDA中找到ControlService

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

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

然后找到地址为401080,我们在OD里面加载断点

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

然后执行到这里

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

然后我们现在可以跳出虚拟机了,Windbg发送break然后暂停虚拟机的运行

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

我们已经暂停了虚拟机的执行,Windbg在等待我们的输入

我们输入!drvobj Lab10-01, 我在Win10物理机上做是有点慢,慢慢的才会出结果来,等一下