WINDOWS内核学习笔记1—Shadow SSDT表

来源:互联网 发布:java 执行字符串代码 编辑:程序博客网 时间:2024/05/22 11:58

近期学习内核的东西,感觉会忘记,记录一下学习过程的收获,日后也方便查找。

1.关于Shadow SSDT表

系统中一共有两个SDT,一个是ServiceDescriptorTable,另一个是ServiceDescriptorTableShadow。ServiceDescriptor中只有指向KiServiceTable的SST,而ServiceDescriptorTableShadow则包含了所有的两个SST。SSDT是可以访问的,而SSDTShadow是不公开的。如何在WINDBG下查看Shadow SSDT,参考:http://blog.csdn.net/gaara_fan/article/details/6277657

2.取Shadow SSDT表地址的4种方法

KeServiceDescriptorTableShadow包含4个子结构,其中第一个就是ntoskrnl.exe,和SSDT指向一样,第二个win32k.sys,我们需要的就是这个,第三第四个一般不用。

同一操作系统中SSDT表和ShadowSSDT表的偏移大小相同。

#define VERSION_2K 50#define VERSION_XP 51
ULONG GetVersion(){ULONG rtn=0;ULONG MajorVer,MinVer,BuildNumber;PsGetVersion(&MajorVer,&MinVer,&BuildNumber,NULL);rtn=MajorVer;rtn=rtn*10;rtn+=MinVer;return rtn;}ULONG GetSSDTShadow_Addr(){ULONG SSDTShadow_Addr=0;ULONG Version=GetVersion();KdPrint(("version:%d",Version));switch(Version){case VERSION_2K:break;case VERSION_XP:SSDTShadow_Addr=(ULONG)KeServiceDescriptorTable-0x40; //XP系统下break;}KdPrint(("SSDTShadow_Addr:%x\n",SSDTShadow_Addr));return SSDTShadow_Addr;}

这里只给出其中一种方法,其他的可参考百度文库:http://wenku.baidu.com/link?url=wpnM25THNZX-YI6xQxCP33HL-Ts6HyMXm6ibtx-jyXPi6HdyV85MCOV01iPTL92dasj5t1e-lMi_ZUuhoK-CXkdrRHfrGbEXDTfsrrQljaG




0 0