然后我们继续分析,这次我们分析Lab10-01.sys
我们找到驱动的入口点,然后查找
mov edi, edi push ebp mov ebp, esp
这些操作是在调用函数之前的初始化栈空间操作,如果你好好分析就会知道,这些操作会在栈上重新分配一些空间给要调用的函数,对我们分析来说,无关紧要,然后之后就调用了sub_10920,我们进去看看,这里执行的是驱动函数的一些必要操作。
然后我们退出来,看看下一个函数sub_10906
上图中出现了一个函数的赋值,sub_10486,然后我们进去看看就会发现这个
这个函数会调用RtlCreateRegistryKey这个内核函数来创建一个键在\Registry\Machine\SOFTWARE\Policies\Microsoft,然后设置为0
然后下一个调用是
再下面也是一样的\Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFire,然后写入的信息是wall\StandarProfile为0
入参是这么几个
然后我们看看这个Path的路径是多少,在这里的ebx显示是这样的,他被赋值为aRegistryMach_2之后就没被改变过了
所以这里的Path的值就是\Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFire,然后值为wall\DomainProfile, 0
然后ValueName的值是edi,在IDA里查找最后改变edi的值
最上面那里一个mov赋值之后就没有改变过了,然后这个ValueName的值是一个dw类型的,也就是E
总结一下这个函数做了什么:
RtlWriteRegistryValue例程将调用方提供的数据以指定的值名称写入指定的相对路径。
这里会将\Registry\Machine\SOFTWARE\Policies\Microsoft\WindowsFire\wall\DomainProfile的值写入成45h
四、WinDBG调试
问题:用户态的程序调试了ControlService函数,用Windbg设置一个断点,来观察ControlService的调试导致内核执行了怎么样的操作?
我们先在IDA中找到ControlService
然后找到地址为401080,我们在OD里面加载断点
然后执行到这里
然后我们现在可以跳出虚拟机了,Windbg发送break然后暂停虚拟机的运行
我们已经暂停了虚拟机的执行,Windbg在等待我们的输入
我们输入!drvobj Lab10-01, 我在Win10物理机上做是有点慢,慢慢的才会出结果来,等一下