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

时间:2012-10-30 15:51:16

标签: windows loadlibrary dll-injection

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

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

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

2 个答案:

答案 0 :(得分:2)

LoadLibraryEx是如何触发的并不重要。一旦触发,DLL加载过程是相同的,并且适用相同的规则。

答案 1 :(得分:1)

documentation非常明确地说不要在DllMain中调用LoadLibrary。即使你不太可能想出一种安全的方法来使它工作,它也可能无法在Windows的下一个版本(甚至是下一个服务包)中运行。