Я пытаюсь предотвратить уязвимость 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
.
Зависимость Уокер показывает мне эту цепочку зависимостей: winhttp -> oleaut32 -> combase -> ole32 -> mpr
.
Почему этот модуль загружается до использования какой-либо из winhttp
функций?
PS Я действительно хочу избегать использования LoadLibrary
+ GetProcAddress
вручную.
Win 8.1, MSVS 2013 Обновление 5
Procmon:
![procmon log](https://i.stack.imgur.com/BsUzI.png)
Деп.ходок:
![dependency walker tree](https://i.stack.imgur.com/12T7q.png)