win10驱动开发20——SSDT

什么是SSDT

       SSDT全称为System Services Descriptor Table,中文为系统服务描述符表,SSDT表就是把ring3的Win32 API和ring0的内核API联系起来。SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。
       SSDT通过修改此表的函数地址可以对常用windows函数进行hook,从而实现对一些核心的系统动作进行过滤、监控的目的。一些HIPS、防毒软件、系统监控、注册表监控软件往往会采用此接口来实现自己的监控模块。

  • SSDT结构
typedef struct ServiceDescriptorTable {
   PVOID ServiceTableBase; //System Service Dispatch Table 的基地址
   PVOID ServiceCounterTable(0);
   //包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。
   unsigned int NumberOfServices;//由 ServiceTableBase 描述的服务的数目。
   PVOID ParamTableBase; //包含每个系统服务参数字节数表的基地址-系统服务参数表
   }  

由SSDT索引号获取当前函数地址

符号描述
dd KeServiceDescriptorTable查看起始地址
dd poi KeServiceDescriptorTable查看当前地址
dd poi [KeServiceDescriptorTable] 0*4 l 1显示第0行第1列
dd poi [KeServiceDescriptorTable] 0n17*4 l 1显示第17行第1列(0n表示十进制)

如何获取索引号

指令描述
u ZwOpenprocess查看汇编指令

在这里插入图片描述

获取起源地址-判断SSDT是否被HOOK

MmGetSystemRoutineAddress

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值