我试图在c中编写一个列出SSDT地址的程序,所以如果某个函数被挂钩,我会看到一个不同的地址。 我如何获得SSDT的地址? 我使用WinDbg并与KeServiceDescriptorTable一起列出,现在我如何在c中获得此地址。 我在网上搜索它,看到了使用NtQuerySystemInformation和SystemModuleInformation的程序。我没有找到这些程序的任何文档或任何文章或解释。
感谢您的帮助
答案 0 :(得分:0)
[下面是当您处于内核模式时的情况。]
在32位环境中,NTOSKRNL导出了KeServiceDescriptorTable,因此您可以使用MmGetSystemRoutineAddress来检索地址。
但是,在64位环境中,您将需要通过内存扫描自己定位KeServiceDescriptorTable,因为NTOSKRNL不会导出它。一旦找到该表在Windows内核中的使用位置,就很简单了,检查NTOSKRNL中与内部系统调用相关的例程。
注意:在64位环境中提取地址时,您需要进行字节移位。
现在,一旦有了地址,就可以进行比较以确定地址是否在内存中的特定范围之间,以尝试确定地址是否不正确(例如,是否已对其进行操作)。您还可以对内存中的操作数执行取证,以进行深入分析。