我正在为 Windows NT 编写一个驱动程序,为用户空间应用程序提供 Ring-0 访问。我想制作一个具有专有权利的实用程序来执行任何用户的命令,这些命令将受到保护,不受任何外部有害影响。在网上冲浪我发现有必要挂钩一些本机内核函数,例如NtOpenProcess
, NtTerminateProcess
,NtDublicateObject
等。我已经制作了一个可以保护应用程序的工作驱动程序,但后来我意识到最好也防止它受到外部尝试在操作系统启动期间删除驱动程序或禁止其加载,如防火墙。我将任务分为两部分:防止从物理上删除驱动程序\system32\drivers\
和防止更改/删除负责加载驱动程序的注册表项(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
)。
问题是我不明白如何挂钩从内核空间对注册表项的访问,甚至不确定是否有可能:ntdll 中与注册表一起使用的所有函数都在用户空间中,从内核空间不可用。此外,我可以从用户空间设置的所有 API 挂钩都将位于特定进程的内存上下文中。因此,我们需要将 Dll 注入到每个进程中,无论是当前进程还是新进程。
有没有一种方法可以在一个地方挂钩所有 NT 调用而不将 Dll 注入每个进程?