0

我一直在研究一些挂钩代码,它们有选择地将库加载到某些进程中,然后挂钩某些本机 API 函数(使用 Detours)。事件链如下所示:

  • 内核驱动程序将A.dll加载到每个进程中。
  • A.dll ::DllMain()决定是否加载包含实际 Detours 钩子的B.dll ( )。LoadLibraryEx
  • B.dll在挂钩所述功能的过程中运行。

此处的第二个项目符号似乎违反了此处指定的 DllMain 规则,但我正在尝试确定驱动程序加载的方式是否A.dll可以解决限制。具体来说,内核驱动程序用于PsSetLoadImageNotifyRoutine在每个进程启动时获取通知,然后将要调用的 APC 排队LoadLibraryExA.dll这意味着它几乎是进程启动时加载的第一个 DLL。这是否规避了调用 inside 的LoadLibrary问题DllMain

4

2 回答 2

2

不管怎么LoadLibraryEx触发。一旦触发,DLL 加载过程是相同的,并且适用相同的规则。

于 2012-10-30T15:58:38.253 回答
1

文档非常明确地说不要在DllMain 中调用 LoadLibrary。即使在极少数情况下您找到了使其工作的安全方法,它也可能无法在 Windows 的下一个版本(甚至下一个服务包)中工作。

于 2012-10-30T16:03:58.890 回答