链接器/ delayload与winhttp.dll不完全兼容

时间:2018-05-24 16:00:30

标签: c++ winapi visual-c++ portable-executable

我正在尝试阻止我的可执行文件中的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:

procmon log

DEP的保护。助行器:

dependency walker tree

1 个答案:

答案 0 :(得分:2)

这很疯狂,但这种行为的真正原因似乎是我的可执行文件名称。它确实包含一个单词" launcher",它似乎就是触发Windows AppCompat层的单词。 相同的可执行文件重命名为" test1.exe"效果很好。