SSDT HOOK技术(1)——获得SSDT函数索引号

本文深入解析SSDT(System Services Descriptor Table)概念,阐述其在Windows系统中如何连接Ring3的Win32 API与Ring0的内核API。通过具体步骤展示如何在64位系统下,利用内存映射技术将ntdll.dll文件映射到内存,从而获取SSDT函数索引号。文章详细说明了获取SSDT地址及内核函数地址的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

1.SSDT是什么?

SSDT全程是System Services Discriptor Table 翻译过来就是系统服务描述符表,那么系统服务描述符是什么呢?根据官方的解释ssdt表就是把ring3的Win32 API和ring0的内核API联系起来。SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。

那么我们可以理解为SSDT就是一个很庞大的数组,它被用来保存windows系统服务地址。

比如我们在R3层调用了CreateFile这个API ,那么进程进入内核态的时候该函数会通过ntdll.dll这个动态链接库对应内核中的NtCreateFile函数,这个R0层API最终会将一个索引号放入一个EAX寄存器中,然后通过SSDT查询对应的系统服务分发函数KiSystemService得到相应的同名系统服务内核API的地址,这样就完成了一次R3层API和R0内核API函数的联系。

根据https://www.write-bug.com/article/2200.html该博客所说

32 位系统和 64 位上,获取 SSDT 表的方式并不相同,获取 SSDT 表中的函数地址也不相同。现在,我就分别对其进行极讲解介绍,并形成文档。本文主要讲解的是 64 位系统下,编程实现获取 SSDT 表的地址,以及获取 SSDT 表函数对应的内核地址。

 

2.将磁盘中ntdll.dll文件映射到内存

使用内存映射文件技术将磁盘上的 ntdll.dll 文件映射到内核内存空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值