Это метод внедрения DLL в Windows Explorer, который использует диалоговое окно изменения значка в Windows.
Сначала в каталоге temp создается папка и открываются свойства папки с помощью SHObjectProperties. Чтобы получить дескриптор окна независимо от языка системы, EnumWindows используется с функцией обратного вызова, которая проверяет отдельное имя папки в каждом открытом окне.
На странице свойств вызывается диалоговое окно изменения значка, дескриптор которого также извлекается с помощью EnumWindows. Наконец, путь к значку изменяется на DLL (в данном случае имеющую расширение .ico), что заставляет проводник загружать DLL после нажатия кнопки ОК.
«Значок» на самом деле представляет собой простой файл DLL с расширением .ico, который открывает приложение калькулятора с ресурсом значка, добавленным с помощью Resource Hacker.
Есть некоторые аномалии в появлении значка в представлении папки. Я тестировал это на двух разных версиях Windows 10 (новейшей и более старой) и на Windows 11.
В обеих версиях Widnows 10 значок, хранящийся внутри DLL, не отображался при изменении расширения на .ico.
Однако в новейшей версии Windows 10 это работало, пока я не попытался открыть «значок» внутри приложения для фотографий. С тех пор мне не удалось его воссоздать.
В Windows 11 значок отображался как обычный значок в представлении проводника. Однако при его открытии в приложении для фотографий отображается ошибка.
Такое поведение, безусловно, интересно, поскольку пользователь, который просто хочет изменить значок папки, вместо этого может внедрить вредоносную DLL в свой проводник. Это может выглядеть так:
Это очень скрытый способ внедрения DLL в процесс Explorer, поскольку он не использует обычный API-интерфейс внедрения DLL. Однако он выдает два коротких всплывающих окна, которые не слишком беспокоят. Таким образом, злоумышленник может использовать его в качестве метода обхода AV для выполнения кода через законный процесс проводника или для загрузки руткита UMD.
Кроме того, распространение DLL, замаскированных под файлы .ico, может быть интересным вектором атаки.
Чтобы получить правильные дескрипторы окон, я использовал Spy++ — инструмент, который устанавливается вместе с Visual Studio.
Огромное спасибо Биллу Г. из Microsoft за красивый значок папки!
Спасибо, случайный парень в Интернете, за красивую иконку инъекции!