c - 如何获取SSDT地址

标签 c winapi windbg windows-kernel

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

感谢您的帮助

最佳答案

[以下是当您处于内核模式时的情况]。

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

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

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

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

关于c - 如何获取SSDT地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50070212/

相关文章:

c++ - 位于字符串加密密码中的断点

c++ - Win32程序编译但没有窗口出现

c++ - 指向 DLL 中回调的指针

.net - 如何判断数组类型?

c - 在 C 中使用指向父级的指针访问子类成员

c - scanf() 格式字符串中尾随空格有何影响?

windbg - 如何使用windbg在堆栈跟踪中查找与偏移量相对应的行号?

windbg - WDKRemoteUser 密码 ?

c - 如何更快速地读取TCP数据包?

c++ - 在什么情况下,基类到派生类的 C 风格转换可能会导致崩溃