首页 > 解决方案 > 使用绝对路径加载 Kernel32.dll 是否更安全?

问题描述

我有一个带有以下行的驱动程序代码

hKernel32DLL = LoadLibrary( "Kernel32.dll" );

现在有人查看了我的代码并建议使用完整路径加载 DLL。我在网上快速搜索了有关加载 kernel32.dll 的信息,但没有人真正使用完整路径。

有人可以向我解释为什么我应该指定 kernel32.dll 的绝对路径吗?

标签: winapi

解决方案


使用完整路径加载 .DLL 会更安全。Kernel32 已经加载,因为您静态链接到,LoadLibrary所以在您的特定情况下它并不重要。(在除 2000 之外的所有 Windows 版本上,CreateProcess将在进程启动之前将 Kernel32 加载到进程中,但这不适用于 Gdi32 和 User32 等其他核心 .DLL。)

如果您担心 .DLL 劫持攻击,那么您可以SetDefaultDllDirectories使用LOAD_LIBRARY_SEARCH_SYSTEM32标志调用,这会强制所有具有相对路径的 .DLL 从系统目录加载。


推荐阅读