如何获得SSDT地址

问题描述 投票:0回答:1

我正在尝试在c中编写一个列出SSDT地址的程序,所以如果某个函数被挂钩,我会看到一个不同的地址。我如何获得SSDT的地址?我使用WinDbg并与KeServiceDescriptorTable一起列出,现在我如何在c中获得此地址。我在网上搜索它,看到了使用NtQuerySystemInformation和SystemModuleInformation的程序。我没有找到任何关于这些程序的文档或任何文章或解释。

谢谢你的帮助

c winapi windbg windows-kernel
1个回答
0
投票

[以下是适用于内核模式的情况]。

在32位环境中,KeServiceDescriptorTable由NTOSKRNL导出,因此您可以使用MmGetSystemRoutineAddress检索地址。

但是,在64位环境中,您需要通过内存扫描自行定位KeServiceDescriptorTable,因为它不会被NTOSKRNL导出。一旦您发现Windows内核中使用该表的位置,就可以直接查看NTOSKRNL中与内部系统调用相关的例程。

注意:在64位环境中提取地址时,您需要进行字节移位。

现在,一旦有了地址,就可以进行比较,以确定地址是否在内存中的特定范围之间,以尝试确定地址是否不正确(例如,如果它已被操纵)。您还可以对内存中的操作数执行取证以进行深入分析。

© www.soinside.com 2019 - 2024. All rights reserved.