如何获得SSDT地址
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获得SSDT地址相关的知识,希望对你有一定的参考价值。
我正在尝试在c中编写一个列出SSDT地址的程序,所以如果某个函数被挂钩,我会看到一个不同的地址。我如何获得SSDT的地址?我使用WinDbg并与KeServiceDescriptorTable一起列出,现在我如何在c中获得此地址。我在网上搜索它,看到了使用NtQuerySystemInformation和SystemModuleInformation的程序。我没有找到任何关于这些程序的文档或任何文章或解释。
谢谢你的帮助
答案
[以下是适用于内核模式的情况]。
在32位环境中,KeServiceDescriptorTable由NTOSKRNL导出,因此您可以使用MmGetSystemRoutineAddress检索地址。
但是,在64位环境中,您需要通过内存扫描自行定位KeServiceDescriptorTable,因为它不会被NTOSKRNL导出。一旦您发现Windows内核中使用该表的位置,就可以直接查看NTOSKRNL中与内部系统调用相关的例程。
注意:在64位环境中提取地址时,您需要进行字节移位。
现在,一旦有了地址,就可以进行比较,以确定地址是否在内存中的特定范围之间,以尝试确定地址是否不正确(例如,如果它已被操纵)。您还可以对内存中的操作数执行取证以进行深入分析。
以上是关于如何获得SSDT地址的主要内容,如果未能解决你的问题,请参考以下文章