驱动之路_SSDT表详解
typedef struct _ServiceDescriptorTable {
PVOID ServiceTableBase; //SSDT表的 的基地址
PVOID ServiceCounterTable;//包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。
unsigned int NumberOfServices;//由 ServiceTableBase 描述的服务的数目。
PVOID ParamTableBase; //包含每个系统服务参数字节数表的基地址-系统服务参数表
}*PServiceDescriptorTable;
ntoskrnl.exe 内核文件
ntdll.dll 应用层
这2个文件都有Zw和Nt这2套函数
OpenProcess --> kernel32.dll --> ntdll.dll(ZwOpenProcess || NtOpenProcess) --> 系统中断KiFastSystemCall
进入内核,内核中运行ZwOpenProcess --> NtProcess
内核的ZwOpenProcess只是一个过渡函数,他会调用KiSystemService函数,这个函数里面在去找这个SSDT表
在应用层中,Zw和Nt这2套函数其实指向的是同一个地址,他们的功能是把服务号压入eax,在调用KiFastSystemCall进行系统中断、、
SSDT表:
服务号 函数地址
1 METHOD1
2 METHOD2
3 METHOD3
dd KeServiceDescriptorTable//在windbg中查看这个表的地址
kd> dd KeServiceDescriptorTable
80563520 804e58d0 00000000 0000011c 80512184
表的起始地址 SSDT表大小
0: kd> dd 804e58d0
这是第一个函数
804e58d0 805893db 80580556 80598bd1 805915e4
804e58e0 80598c58 806418a0 80643a31 80643a7a
804e58f0 8057d022 8065193f 8064105f 80598423
804e5900 80638c26 80593efa 80592d3e 8062f86a
804e5910 805e10d1 80571bc5 805e1d36 805e2ddb
804e5920 804e5ee4 8065192b 805d4dbf 804ecbd7
804e5930 805716c3 805708d7 80598801 80657a8c
804e5940 80592856 80591160 80657cfb 80591c5b
804e58d0+4*索引号=第几个函数
下面上传一张图片:


浙公网安备 33010602011771号