看流星社区

 找回密码
 注册账号
查看: 2031|回复: 0

获取SSDT服务表数据

[复制链接]

该用户从未签到

发表于 2017-6-3 11:03:33 | 显示全部楼层 |阅读模式

#include <ntddk.h>


typedef struct _KSYSTEM_SERVICE_TABLE
{
PULONG ServiceTableBase;    // SSDT (System Service Dispatch Table)的基地址
  PULONG ServiceCounterTableBase; // 包含 SSDT 中每个服务被调用的次数
  ULONG  NumberOfService;   // 服务函数的个数, NumberOfService * 4 就是整个地址表的大小
  ULONG  ParamTableBase;     // SSPT(System Service Parameter Table)的基地址

} KSYSTEM_SERVICE_TABLE, *PKSYSTEM_SERVICE_TABLE;


typedef struct _KSERVICE_TABLE_DESCRIPTOR
{
KSYSTEM_SERVICE_TABLE  ntoskrnl; // ntoskrnl.exe 的服务函数
KSYSTEM_SERVICE_TABLE  win32k;  // win32k.sys 的服务函数(GDI32.dll/User32.dll 的内核支持)
KSYSTEM_SERVICE_TABLE  notUsed1;
KSYSTEM_SERVICE_TABLE  notUsed2;

} KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;


//导出由 ntoskrnl.exe 所导出的 SSDT
extern "C"
{
extern PKSERVICE_TABLE_DESCRIPTOR KeServiceDescriptorTable;
}


void DriverUnload(PDRIVER_OBJECT lpd){








}




NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{


_asm{
cli
mov eax,cr0
and eax, not 10000h
mov cr0,eax
}



ULONG i;
for(i=0;i<KeServiceDescriptorTable->ntoskrnl.NumberOfService;i++){
KdPrint(("SSDT函数地址: %d",KeServiceDescriptorTable->ntoskrnl.ServiceTableBase[i]));


}


KdPrint(("修改内核保护成功!"));






_asm{




mov eax,cr0
or eax,10000h
mov cr0,eax
sti
}
KdPrint(("撤销内核修改!"));




DriverObject->DriverUnload=DriverUnload;
return STATUS_UNSUCCESSFUL;
}
去年用masm写过现在在用vc写一遍
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-19 07:07

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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