例如,COMDLG32.DLL隐式链接以下系统DLL(以及其他): xmllite.dll msftedit.dll srvcli.dll wkscli.dll linkinfo.dll netutils.dll MSI.DLL
由于这些是由操作系统隐式加载的,未使用LoadLibrary调用显式加载,因此使用SetDllDirectory
的劫持漏洞解决方法不会影响加载COMDLG32.DLL时完成的这些加载。
因此,在我的应用程序加载后,我按Ctrl + O以使用“文件打开”对话框,这些“坏”DLL(存在于我的EXE文件夹中)被加载。
COMDLG32.DLL正在加载我的EXE文件夹中的文件,而不是系统文件夹中的合法文件夹,即使我在启动文件打开对话框之前很久就在SetDllDirectory("");
中调用了InitInstace()
。 / p>
如何获取系统DLL(例如COMDLG32.DLL)以正确使用正确的DLL作为其隐式加载的DLL?
答案 0 :(得分:3)
SetDllDirectory("")
从DLL搜索路径中删除当前/工作目录,不对应用程序目录(.exe所在的位置)有任何影响。
如果您想将自己限制在system32目录中,可以致电SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32)
。