我正在尝试用c写一个程序,列出SSDT地址,所以如果某个函数被钩住了,我会看到一个不同的地址。如何获取SSDT的地址?我使用WinDbg和KeServiceDescriptorTable一起列出,现在我如何在c中获得这个地址。我在网上搜索它,看到使用NtQuerySystemInformation和SystemModuleInformation的程序。我没有找到任何关于这些程序的文档,也没有任何关于这方面的文章或解释。
感谢你的帮助
发布于 2018-06-22 00:23:47
下面是当你在内核模式下的时候。
在32位环境中,NTOSKRNL导出KeServiceDescriptorTable,因此可以使用MmGetSystemRoutineAddress检索地址。
但是,在64位环境中,您需要自己通过内存扫描来定位KeServiceDescriptorTable,因为它不会被NTOSKRNL导出。很简单,一旦你找到了表在Windows内核中的用法,检查NTOSKRNL中与内部系统调用相关的例程。
注意:在64位环境中提取地址时,需要进行字节移位。
现在,一旦您有了地址,您就可以进行比较,以确定地址是否在内存中的特定范围之间,从而尝试确定地址是否不正确(例如,如果它被操纵了)。您还可以在内存中对操作数执行取证,以便进行深入分析。
https://stackoverflow.com/questions/50070212
复制相似问题