-
-
HOOK SSDT中常用SYSTEMSERVICE宏的原理
-
-
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*函数的地址吗?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课