编写自己的驱动过游戏保护-需要具备的理论知识

A、了解SSDT结构

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

        C、如何获取索引号

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

        E、如何向内核地址写入自己代码

 

 A、了解SSDT结构

SSDT的全称是System Services Descriptor Table,系统服务描述符表 在ntoskrnl.exe导出KeServiceDescriptorTable 这个表

typedef struct ServiceDescriptorTable {
   PVOID ServiceTableBase; //System Service Dispatch Table 的基地址
   PVOID ServiceCounterTable(0);

 //包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。
   unsigned int NumberOfServices;//由 ServiceTableBase 描述的服务的数目。
   PVOID ParamTableBase; //包含每个系统服务参数字节数表的基地址-系统服务参数表
   } 
  用windbg 了解SSDT结构:

  windbg符号路径设置: srv*D:\WINDDK\symbols*http://msdl.microsoft.com/download/symbols

 

 poi

 

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

  [[KeServiceDescriptorTable]+index*4]  

 C、如何获取索引号

 用工具

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

 MmGetSystemRoutineAddress

 E、如何向内核地址写入自己代码

   mov [xxx],xx //

   1、如何向SSDT表写入内容呢,这个表是被保护的 正常情况不能被写入

  方法有三

(1) 更改注册表 -最简单的做法

HKLM\SYSTEM\CurrentControlset\Control\SessionManger\MemoryManagement\

EnforceWriteProtection=0

HKLM\SYSTEM\CurrentControlset\Control\SessionManger\MemoryManagement\

DisablePagingExecutive=1


(2)改变CR0寄存器的第1位wp位 置0-常用

(3)通过Memory Descriptor List(MDL)-正规做法
MmCreateMdl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蚂蚁_CrkRes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值