5.API的调用过程(SSDT)

SSDT的全称是System Services Descriptor Table,系统服务描述符表

他是在ntoskrnl.exe中导出的函数
5.API的调用过程(SSDT)

kd> dd KeServiceDescriptorTable (SSDT)
导出的声明一下就可以使用了

kd> dd KeServiceDescriptorTableShadow (SSDT Shadow)
未导出需要用其他的方式来查找

kd>  dd KeServiceDescriptorTable
80553fa0  80502b8c 00000000 0000011c 80503000
80553fb0  00000000 00000000 00000000 00000000
80553fc0  00000000 00000000 00000000 00000000
80553fd0  00000000 00000000 00000000 00000000
  • 它的每一个成员都是一张系统服务表,不要与SSDT搞混
  • 一共有4张系统服务表,后面3张都是空的,我们只能看到一张表
  • 在我的上一章说过我们XP系统中只有两张系统服务表,一个是Ntoskrl.exe导出的还有一个是win32k.sys导出的。
  • 我们用SSDT查看的话只能能看到一张表,也就是Ntoskrl.exe导出的这张表。
kd> dd KeServiceDescriptorTableShadow
80553f60  80502b8c 00000000 0000011c 80503000//Ntoskrl.exe
80553f70  bf999b80 00000000 0000029b bf99a890//win32k.sys
80553f80  00000000 00000000 00000000 00000000
80553f90  00000000 00000000 00000000 00000000

通过SSSDT就能查看到Ntoskrl.exe导出的表与win32k.sys导出的表。



typedef struct _KSYSTEM_SERVICE_TABLE
{
	PULONG ServiceTableBase;		//这个指向系统服务函数地址表
	PULONG ServiceCounterTableBase;	//系统这个服务表调用了几次
	ULONG NumberOfService;			//服务函数的个数
	PULONG ParamTableBase;			//参数表 

}KSYSTEM_SERVICE_TABLE, *PKSYSTEM_SERVICE_TABLE;

PSYSTEM_SERVICE_TABLE Ntoskr_ssdt;

Ntoskr_ssdt->ServiceTableBase = 80502b8c;
Ntoskr_ssdt->ServiceCounterTableBase = 00000000;
Ntoskr_ssdt->NumberOfService = 0000011c;
Ntoskr_ssdt->ParamTableBase = 80503000;

在《API调用过程(3环部分)》看过0xBA就是 ReadVirtualMemory
5.API的调用过程(SSDT)

查看一下对应的参数表(参数表以字节为单位要*1)
5.API的调用过程(SSDT)
0x14对应的十进制是20,他当前所有的参数加起来有20个字节每个参数4个字节它有5个参数。