【问题标题】:How to get SSDT address如何获取 SSDT 地址
【发布时间】:2018-04-27 20:57:39
【问题描述】:

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

感谢您的帮助

【问题讨论】:

标签: c winapi windbg windows-kernel


【解决方案1】:

[以下内容适用于内核模式]。

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

但是,在 64 位环境中,您需要自己通过内存扫描找到 KeServiceDescriptorTable,因为它不会被 NTOSKRNL 导出。一旦您发现了该表在 Windows 内核中的使用位置,就非常简单,请检查 NTOSKRNL 中与内部系统调用相关的例程。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    相关资源
    最近更新 更多