繁体   English   中英

如何防止DLL加载其他标准DLL?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM