登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 69|回复: 0

驱动开发与系统原理-初识SSDT与ShadowSSDT

[复制链接]

77

主题

-6

回帖

67

积分

网站编辑

积分
67
发表于 2025-3-24 23:20:40 | 显示全部楼层 |阅读模式

在我们进内核的时候,SystemEnter会有几个值(SS、CS、EIP、ESP)的切换

MSR寄存器中存储了CS、EIP、ESP值, MSR寄存器如下

我们先查询一下EIP

此时EIP指向nt!KiFastCallEntry

栈中现状

eax=调用号 edx=三环堆栈 NtOpenProcess ret OpenProcess ret Push 参数4 Push 参数3 Push 参数2 Push 参数1 SSDT表结构

SSDT表示系统服务表,我们ring3调用的很多函数都会调用这个SSDT表

 typedef struct _SERVICE_DESCIPTOR_TABLE
{
PULONG ServiceTableBase; // SSDT基址
PVOID ServiceCounterTableBase;// SSDT中服务被调用次数计数器,一般由sysenter 更新
ULONGLONG NumberOfService; // 索引总数
PVOID ParamTableBase; // 系统服务参数表基址-系统服务参数表SSPT
}SYSTEM_SERVICE_TABLE, *PSYSTEM_SERVICE_TABLE;

x nt!kes*des*table* //查看
KeServiceDescriptorTableShadow是ShadowSSDT表
KeServiceDescriptorTable是SSDT表.

我们可以通过dd 地址去查看内容

其中8407073c 为SSDT表起始地址,00000191 为函数个数

dds 8407073c  L191 //查看函数

ShadowSSDT表

ring3的所有GUI会调用的到这个表格中.

如果我们想查看ShadowSSDT,需要调用GUI的进程空间中查看

1.在系统中运行 mspaint 画图工具 2.在windbg中中断. 3.输入命令.查看系统所有简要信息
!process 0 0 4.找到mspaint的EPROCESS结构.切换到这个进程上下文 .process /p 944e2000 5.使用x命令查找ShadowsSSDT x nt!kesdestable

6.查看shodowSSDT。shodowSSDT跟SSDT挨着.上面查看SSDT的时候 shodowSSDT没有加载所以没有挨着.

typedef struct _SERVICE_DESCRIPTOR_TABLE { SYSTEM_SERVICE_TABLE ntoskrnl; // ntoskrnl.exe ( native api ) SYSTEM_SERVICE_TABLE win32k; // win32k.sys (gdi/user support) SYSTEM_SERVICE_TABLE Table3; // not used SYSTEM_SERVICE_TABLE Table4; // not used } SYSTEM_DESCRIPTOR_TABLE,*PSYSTEM_DESCRIPTOR_TABLE 这张表是让系统来选择使用哪个SSDT的,3,4没有用,所以正常使用是第一个也就是SSDT,第二个是GUI常使用的ShadowSSDT

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|断点社区 |网站地图

GMT+8, 2025-4-3 18:58 , Processed in 0.128451 second(s), 22 queries , Yac On.

Powered by XiunoBBS

Copyright © 2001-2025, 断点社区.

快速回复 返回顶部 返回列表