我一直在研究一些挂钩代码,它们有选择地将库加载到某些进程中,然后挂钩某些本机 API 函数(使用 Detours)。事件链如下所示:
- 内核驱动程序将A.dll加载到每个进程中。
- A.dll ::
DllMain()
决定是否加载包含实际 Detours 钩子的B.dll ( )。LoadLibraryEx
- B.dll在挂钩所述功能的过程中运行。
此处的第二个项目符号似乎违反了此处指定的 DllMain 规则,但我正在尝试确定驱动程序加载的方式是否A.dll
可以解决限制。具体来说,内核驱动程序用于PsSetLoadImageNotifyRoutine
在每个进程启动时获取通知,然后将要调用的 APC 排队LoadLibraryEx
,A.dll
这意味着它几乎是进程启动时加载的第一个 DLL。这是否规避了调用 inside 的LoadLibrary
问题DllMain
?