详解如何利用Windows设备驱动
2009-02-12 13:55:33 来源:WEB开发网核心提示: -KeSetTimeUpdateNotifyRoutine-PsSetCreateThreadNotifyRoutine-PsSetCreateProcessNotifyRoutine-PsSetLegoNotifyRoutine-PsSetLoadImageNotifyRoutine看起
-KeSetTimeUpdateNotifyRoutine
-PsSetCreateThreadNotifyRoutine
-PsSetCreateProcessNotifyRoutine
-PsSetLegoNotifyRoutine
-PsSetLoadImageNotifyRoutine
看起来这些都是非常有用的,现在我们以KeSetTimeUpdateNotifyRoutine为例分析下是否可以被我们利用。
函数会将ECX寄存器值写入到我命名为KiSetTimeUpdateNotifyRoutin 的内存地址中。
现在我们看看调用这里的地方:
如同你见到的那样,在0x8053513B 位置,指令将会从KiSetTimeUpdateNotifyRoutine内存地址(当然它得非0)执行。这样我们就可以将KiSetTimeUpdateNotifyRoutine 改写成我们希望执行的内存地址。但是这个方法存在着一些问题,我曾经对比过一些windows内核发现,他们中很多在执行call "routines"(比如call dword ptr [KiSetTimeUpdateNotifyRoutine])时会发生丢失现象,因为他们中有些仅仅只是写入或者读取操作,而不是执行。这个结果令我非常失望,于是我开始寻找其他的有用的缺陷代码点。通过对比一些内存中的调用,我发现了以下的地址:
0x8058697A 处的指令好像是被预置的,而且在所有我看过的内核中都是可用的。这个给我足够的结果可以用来进行攻击了,现在让我们来计划下如何攻击吧。
更多精彩
赞助商链接