-
-
[求助]关于获取SSDT中NtReadVirtualMemory地址
-
发表于:
2013-7-12 15:25
5100
-
[求助]关于获取SSDT中NtReadVirtualMemory地址
小弟是新手,请各位大神帮忙解惑一下,谢谢你们啦 非常感谢。
最近小弟在参考了一些文章后,顺利获得NtReadVirtualMemory的服务号为0XBA,然后用Kernel Detective验证了一下,确实正确。
我的问题是
1.我在网上看到获取 NtReadVirtualMemory地址做法是,用SSDT表的基地址+它的服务号索引,NtReadVirtualMemoryAddr = KeServiceDescriptorTable->ServiceTableBase + pos_ReadVirtualMemory(服务号),这个SSDT的基地址怎么获得?
SSDT表的结构体我是网上考过来的,它的定义是
typedef struct ServiceDescriptorEntry {
unsigned int *ServiceTableBase;//System Service Dispatch Table 的基地址
unsigned int *ServiceCounterTableBase; //包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。
unsigned int NumberOfServices;//由 ServiceTableBase 描述的服务的数目。
unsigned char *ParamTableBase;//包含每个系统服务参数字节数表的基地址-系统服务参数表
} ServiceDescriptorTableEntry, *PServiceDescriptorTableEntry;
2. 还有 上面写的式子是不是要将服务号乘4啊,因为地址占4个字节?
谢谢大家,表示非常感谢。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课