如何停止二级IMPLICITLY加载DLL的DLL劫持

How to stop DLL Hijacking for secondary IMPLICITLY loaded DLLs

本文关键字:DLL 加载 IMPLICITLY 劫持 二级 何停止      更新时间:2023-10-16

例如,COMDLG32.DLL隐式链接到以下系统DLL(以及其他):xmllite.dllmsftedit.dllsrvcli.dllwkscli.dll链接信息.dllnetutils.dllmsi.dll

由于这些由操作系统隐式加载,而不是使用LoadLibrary调用显式加载,因此使用SetDllDirectory的劫持漏洞解决方法不会影响加载COMDLG32.DLL时执行的这些加载。

因此,在我的应用程序加载后,我按下Ctrl+O使用"打开文件"对话框,这些"坏"DLL(存在于EXE文件夹中)就会被加载。

COMDLG32.DLL正在加载EXE文件夹中的文件,而不是系统文件夹中的合法文件,尽管我早在启动"文件打开"对话框之前就在InitInstace()中调用SetDllDirectory("");

我如何获得系统DLL(例如COMDLG32.DLL),以便正确地将正确的DLL用于其隐式加载的DLL?

SetDllDirectory("")从DLL搜索路径中删除当前/工作目录,它不会对应用程序目录(.exe所在的位置)产生任何影响。

如果您想将自己限制在system32目录中,可以调用SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32)