Основы просты.В Windows есть путь поиска для DLL, почти так же, как и $ PATH для поиска исполняемых файлов.Если вы можете выяснить, какие библиотеки DLL запрашивает приложение без абсолютного пути (запуская этот процесс поиска), вы можете поместить свою враждебную DLL где-то выше пути поиска, чтобы она была найдена до того, как появится настоящая версия, и Windows будет счастливапередать код атаки в приложение.
Итак, давайте притворимся, что путь поиска DLL вашей системы выглядит примерно так:
a) . <--current working directory of the application, highest priority, first check
b) \windows
c) \windows\system32
d) \windows\syswow64 <-- lowest priority, last check
и некоторые приложения Foo.exe запрашивают "bar.dll",который живет в подкаталоге syswow64 (d).Это дает вам возможность поместить вашу вредоносную версию в a), b) или c), и она будет автоматически загружаться в приложение всякий раз, когда приложение запрашивает bar.dll.И теперь ваш foo работает хорошо и верно.
Как уже говорилось, даже абсолютный полный путь не может защитить от этого, если вы можете заменить DLL своей версией.
И, конечно, это не ограничивается Windows.Любая ОС, которая допускает динамическое связывание внешних библиотек, теоретически уязвима для этого.