[英]How to prevent DLL from loading other standard DLLs?
我正在通过CreateRemoteThread()
进行 DLL 注入试验(有关详细信息,请参阅我的其他问题)。 我将它注入到CMD.exe
进程(注意,不是conhost.exe
进程)。 问题是,我注意到它实际上加载了其他 8 个 Windows DLL。 即使我从不使用这些 DLL 中的任何函数,它也会加载它们。
现在我想知道,有没有办法防止这种情况发生? 我现在唯一的猜测是不包括<windows.h>
,然后复制大多数宏的定义并通过调用LoadLibrary()
加载实际需要的库。 然而,我想,这不是最优雅的解决方案。
也许有一些行之有效的方法来防止标准卫星 DLL 加载?
C 运行时需要这些 DLL,它们可能由 PE 加载器自动映射,而不是动态加载。 如果您在汇编中编写代码,则不会加载这些代码。 您也许可以使用编译器/链接器设置完全剥离 C 运行时,但您在 C 中的能力会大大降低。
对于仅偶尔依赖特定库的情况,一个选项是将其视为延迟加载。
在 Visual Studio 中,可以在链接器 -> 输入下的项目属性窗口中找到此设置。
因此,例如,如果您希望有时只从 user32.dll 调用某些内容,则可以将“user32.dll”添加到延迟加载的 DLL 行(请注意,对于输入库,这确实需要 .dll 而不是 .lib)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.