我正在尝试阻止我的可执行文件中的dll-hijacking漏洞,该漏洞只有一个明确的动态依赖 - winhttp.dll
。
我的尝试是使用链接器/delayload:winhttp.dll
选项并在程序的最开始调用SetDefaultDllDirectories
。似乎它适用于某些模块和winhttp
本身,但不适用于它的依赖 - 二进制仍然在mpr.dll
之前加载main
和一些其他模块(并且它首先尝试从我的可执行文件夹中加载它。)
将mpr.dll
添加到/delayload
列表无效 - 我收到LINK : warning LNK4199: /DELAYLOAD:mpr.dll ignored; no imports found from mpr.dll
。
Dependency Walker向我展示了这个依赖链:winhttp -> oleaut32 -> combase -> ole32 -> mpr
。
为什么在使用任何winhttp
函数之前加载此模块?
P.S。我真的想避免手动使用LoadLibrary
+ GetProcAddress
。
Win 8.1,MSVS 2013 Update 5
将procmon:
DEP的保护。助行器:
答案 0 :(得分:2)
这很疯狂,但这种行为的真正原因似乎是我的可执行文件名称。它确实包含一个单词" launcher",它似乎就是触发Windows AppCompat层的单词。 相同的可执行文件重命名为" test1.exe"效果很好。