无限感觉 发表于 2011-9-4 10:32:22

KeServiceDescriptorTableShadow的获取

如果没有KeServiceDescriptorTable,那么很多事情就会变得简单许多,我们只需要定义一个全局变量:

extern PSERVICE_Descriptor_TABLE    KeServiceDescriptorTable;

这样就能够引用KeServiceDescriptorTable了,就能够访问ntoskrnel下面所导出的所有函数。但是因为还有一些函数是通过win32k表导出的,这些函数都是win32k.sys的服务函数,所以要访问类似这些函数就得从shadow标结构中读取win32k表的EntryPoint。

因为KeServiceDescriptorTableShadow并不公开,所以需要从其他途径获取该结构表。现在用的比较多的一种方法是通过KeAddSystemServiceTable,遍历该函数的起始地址,查找有效内存地址(MmIsAddressValid)。因为shadow是涵盖了KeServiceDescriptorTable表的结构,在查找的过程中,就是采用和KeServiceDescriptorTable表进行匹配的方法,其中前16位需要匹配,而且两个表的起始地址不能相同(否则为同一张表),就是按照这种方法,查找获得shadow表。其实现函数如下:

**** Hidden Message *****

超人rocky 发表于 2011-9-4 14:26:47

KeServiceDescriptorTableShadow的获取

超人rocky 发表于 2011-9-4 14:39:44

KeServiceDescriptorTableShadow的获取

glj1989415 发表于 2011-11-30 22:33:11

KeServiceDescriptorTableShadow的获取

longhehe 发表于 2012-1-7 16:34:32

KeServiceDescriptorTableShadow的获取

aki447 发表于 2013-4-28 23:48:33

看看是什么呢

cooby 发表于 2013-9-23 12:00:36

再次路过!!!!!┈━═☆

cooby 发表于 2013-9-28 13:59:51

好东西啊,真是好东西,感谢楼主分享!谢谢!

地狱神龙 发表于 2017-5-15 20:56:45

要了1111111111111
页: [1]
查看完整版本: KeServiceDescriptorTableShadow的获取