Линкер / delayload не полностью работает с winhttp.dll - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь предотвратить уязвимость 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

Деп.ходок:

dependency walker tree

1 Ответ

0 голосов
/ 24 мая 2018

Это безумие, но истинная причина такого поведения - мое исполняемое имя.Он содержит слово «средство запуска», которое, по-видимому, и вызывает слой Windows AppCompat.Все тот же исполняемый файл, переименованный в «test1.exe», работает хорошо.

...