如果您使用内核驱动程序来确保你的库是第一个加载的库,那么从 DllMain 调用 LoadLibrary 是否安全?



我一直在寻找一些挂钩代码,这些挂钩代码有选择地将库加载到某些过程中,然后将某些本机API函数(使用弯路)挂钩。事件链看起来像这样:

  • 内核驱动程序 a.dll 进入每个过程。
  • A.dll :: DllMain()决定是否加载 b.dll LoadLibraryEx),其中包含实际的弯路钩。
  • b.dll 在过程挂钩的过程中运行。

这里的第二个子弹似乎打破了此处指定的dllmain规则,但是我正在尝试弄清楚驱动程序加载 A.dll的方式是否围绕限制工作。具体来说,内核驱动程序使用PsSetLoadImageNotifyRoutine在每个过程启动时获取通知,然后排队在A.dll上调用LoadLibraryEx,这意味着在该过程启动时,它几乎是加载的第一个DLL。这是否可以避免在DllMain中调用LoadLibrary的问题?

如何触发LoadLibraryEx。触发后,DLL加载过程是相同的,并且适用相同的规则。

文档非常明确地说不要在dllmain中调用LoadLibrary。即使在不太可能的情况下,您还发现了一种安全的方法来使其正常工作,它在下一个版本(甚至是下一个服务包)的Windows也可能无法使用。

相关内容

  • 没有找到相关文章

最新更新