-
-
[求助]关于HOOK SSDT函数的一点点疑问?
-
发表于: 2010-8-6 00:35 3240
-
关于HOOK SSDT函数的一点点疑问?
采用的是MDL映射HOOK KSDT的方法。对于大牛们来说很简单。不过细究一些小问题却百思不得其解,望路过的,飘过的,飞过的,走过的,大牛给予指点。
#define UnHook(_Old,_New) (\
InterlockedExchange((PLONG)(&MappedSCT[GetIndex(_Old)]), (LONG)( _New)))
1.关于mappedsct的说明 来自于MmMapLockedPages的赋值
MmMapLockedPages是将我们函数和计算ID得到的各个地址(注意,这些都是虚拟地址)直接映射到对应的内存页面上)
返回的是一个指向了整个页面虚拟地址的基址指针(XP SP3之前是基址,XP SP3之后的版本DDK文档上说明是实际的寻求地址包括了偏移
2.交换InterlockedExchange
将这个指针所指的索引号对应的地址与我们建立的新的NEWzwterminateprocess的地址交换。
为何? 原因在于调用zw的时候 是调用NT的时候首先是 mov eax,101h 然后查找101H
我自己写的这2个注释但是有2个地方不太明白:
在第一点中,DDK文档说明了在XP SP3后的MmMapLockedPages返回值是一个真实的虚拟地址附带了好了偏移。那么我想请教一下偏移会出现在什么情况下?并且在XP SP3之前的基址与这个又有什么差别和联系?
在第二点中,我们由MmMapLockedPages得到的是一个MDL的开头,是对KSDT的映射,但是为什么MAPPEDSCT[ID号(程序在KKSDT中的ID号)] 就能得到真实的KSDT 中ID号对应得调用地址呢? 难道MDL == KSDT 吗?
采用的是MDL映射HOOK KSDT的方法。对于大牛们来说很简单。不过细究一些小问题却百思不得其解,望路过的,飘过的,飞过的,走过的,大牛给予指点。
#define UnHook(_Old,_New) (\
InterlockedExchange((PLONG)(&MappedSCT[GetIndex(_Old)]), (LONG)( _New)))
1.关于mappedsct的说明 来自于MmMapLockedPages的赋值
MmMapLockedPages是将我们函数和计算ID得到的各个地址(注意,这些都是虚拟地址)直接映射到对应的内存页面上)
返回的是一个指向了整个页面虚拟地址的基址指针(XP SP3之前是基址,XP SP3之后的版本DDK文档上说明是实际的寻求地址包括了偏移
2.交换InterlockedExchange
将这个指针所指的索引号对应的地址与我们建立的新的NEWzwterminateprocess的地址交换。
为何? 原因在于调用zw的时候 是调用NT的时候首先是 mov eax,101h 然后查找101H
我自己写的这2个注释但是有2个地方不太明白:
在第一点中,DDK文档说明了在XP SP3后的MmMapLockedPages返回值是一个真实的虚拟地址附带了好了偏移。那么我想请教一下偏移会出现在什么情况下?并且在XP SP3之前的基址与这个又有什么差别和联系?
在第二点中,我们由MmMapLockedPages得到的是一个MDL的开头,是对KSDT的映射,但是为什么MAPPEDSCT[ID号(程序在KKSDT中的ID号)] 就能得到真实的KSDT 中ID号对应得调用地址呢? 难道MDL == KSDT 吗?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: