gpt4 book ai didi

c - Windows 显示驱动程序 Hook ,64 位

转载 作者:可可西里 更新时间:2023-11-01 13:45:23 28 4
gpt4 key购买 nike

一旦我为 Windows 编写了一种驱动程序,它必须拦截 native 显示驱动程序与操作系统的交互。 native 显示驱动程序由一个微型端口驱动程序和一个由 win32k.sys 加载到 session 空间的 DLL 组成。我的目标是在 win32k.sys 和那个 DLL 之间进行干预。此外,系统可能有多个显示驱动程序,我必须将它们全部 Hook 。

我创建了一个标准的 WDM 驱动程序,它被配置为在系统启动时加载(即在 win32k 之前)。在初始化期间,它通过修补 SSDT Hook 了 ZwSetSystemInformation。每当操作系统将 DLL 加载/卸载到 session 空间时,操作系统都会调用此函数,这正是我所需要的。

当使用 SystemLoadImage 参数调用 ZwSetSystemInformation 时 - 它的参数之一是指向 SYSTEM_LOAD_IMAGE 结构的指针,它的 ModuleBase 是模块基址映射地址。然后我分析映射的图像,用我的函数修补它的入口点,剩下的就很简单了。

现在我需要将此驱动程序移植到 64 位 Windows。不用说,这根本不是一项微不足道的任务。到目前为止,我发现了以下障碍:

  • 所有司机都必须签名
  • 补丁 guard
  • SSDT 不直接导出。

如果我没理解错的话,PatchGuard和驱动签名验证可能被关闭了,驱动应该安装在专用机器上,我们可以任意折磨它。

根据在线资源,也有定位 SSDT 的技巧。

不过最近我发现存在一个名为PsSetLoadImageNotifyRoutine 的函数。它可以大大简化任务,并有助于避免肮脏的把戏。

我的问题是:

  • 如果我使用 PsSetLoadImageNotifyRoutine,我会收到有关加载到 session 空间的 DLL 的通知吗?官方文档说的是“系统空间还是用户空间”,“系统空间”是否也包括 session 空间?
  • 如果我要在映射的 DLL 镜像映射后对其进行修补,是否需要禁用 PatchGuard?
  • 还有没有其他我没有考虑到的潜在问题?
  • 还有其他方法可以实现我想要的吗?

提前致谢。

最佳答案

Do I need to disable the PatchGuard if I'm going to patch the mapped DLL image after it was mapped?

要在 x64 上加载任何驱动程序,它必须经过签名。使用管理员权限,您可以禁用 PatchGuard,我个人建议使用 DSEO,一个为此制作的 GUI 应用程序。或者您可以通过覆盖 MBR(或 BIOS)来绕过 PatchGuard,尽管这通常被认为是 bootkit - 恶意软件。

关于c - Windows 显示驱动程序 Hook ,64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9759301/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com