-
-
HOOK SSDT中常用SYSTEMSERVICE宏的原理
-
发表于:
2010-6-5 12:28
4146
-
HOOK SSDT中常用SYSTEMSERVICE宏的原理
define SYSTEMSERVICE(_func) \
KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_func+1)]
按照一般的解释:“SYSTEMSERVICE宏的参数(姑且称为参数吧)是ntoskrnl.exe导出的函数地址,是一个Zw* 型的函数,返回一个在SSDT表中Nt*型的函数地址。”
而以ZwCreateFile为例:
8042fa70 b820000000 mov eax,0x20
8042fa75 8d542404 lea edx,[esp+0x4]
8042fa79 cd2e int 2e
8042fa7b c22c00 ret 0x2c
则((PUCHAR)_func+1)得到的是函数在SSDT表中的索引(这里是0x20),那么*(PULONG)(0x20)是什么东西?
PS:ServiceTableBase表里面的每一项都是某个NT*函数的地址吗?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)