如何阻止DLL劫持辅助IMPLICITLY加载的DLL

时间:2017-09-12 15:27:17

标签: c++ winapi dll mfc

例如,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?

1 个答案:

答案 0 :(得分:3)

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

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