Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
IconJector — Внедрение DLL-библиотек в процесс explorer с помощью значков | Kitploit
Инструменты/GitHubGitHub/d419h/iconjector
ЭксплуатацияПост-эксплуатацияСоциальная инженерияRed TeamingРазработка Полезной НагрузкиСостязательная Атака
GitHubd419h/iconjector

IconJector

Внедрение DLL-библиотек в процесс explorer с помощью значков

Репозиторий
41549131 год назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

IconJector

Это техника внедрения DLL в проводник Windows, использующая диалог смены значка в Windows.

Она может обманом заставить пользователей загрузить вредоносную DLL в процесс проводника:

https://github.com/0xda568/IconJector/assets/61665703/06428402-764c-4279-b762-1d01082552c8

Кроме того, её можно использовать для внедрения DLL из другого процесса в проводник:

https://github.com/0xda568/IconJector/assets/61665703/bbf53775-ad8d-422b-b186-663ff5074976

Как это работает?

Помимо кода, DLL также используются для хранения таких ресурсов, как значки. В демонстрации видно, что стандартные значки хранятся в shell32.dll:

изображение

Вообще-то в современных версиях Windows они хранятся в shell32.dll.mui, но в диалоге по-прежнему отображается shell32.dll

Чтобы процесс проводника мог отобразить в диалоге все значки, хранящиеся в DLL, ему необходимо загрузить DLL в память для её разбора.

Кроме того, DLL в Windows могут определять опциональную функцию DllMain, которая вызывается при загрузке или выгрузке DLL с помощью функций LoadLibrary и FreeLibrary.

BOOL WINAPI DllMain(
    HINSTANCE hinstDLL,  // handle to DLL module
    DWORD fdwReason,     // reason for calling function
    LPVOID lpvReserved )  // reserved
{
    // Perform actions based on the reason for calling.
    switch( fdwReason ) 
    { 
        case DLL_PROCESS_ATTACH:
         // Initialize once for each new process.
         // Return FALSE to fail DLL load.
            break;

        case DLL_THREAD_ATTACH:
         // Do thread-specific initialization.
            break;

        case DLL_THREAD_DETACH:
         // Do thread-specific cleanup.
            break;

        case DLL_PROCESS_DETACH:
        
            if (lpvReserved != nullptr)
            {
                break; // do not do cleanup if process termination scenario
            }
            
         // Perform any necessary cleanup.
            break;
    }
    return TRUE;  // Successful DLL_PROCESS_ATTACH.
}

Это означает, что если проводник загружает DLL с функцией DllMain, код, определённый в DllMain, выполняется в памяти проводника.

И именно это здесь и делается. Вдобавок DLL маскируется под значок:

Значок

«Значок» — это на самом деле простой DLL-файл с расширением .ico, который открывает приложение «Калькулятор» с ресурсом значка, добавленным с помощью Resource Hacker. (Значок также можно добавить в Visual Studio)

Есть некоторые аномалии во внешнем виде значка в представлении папки. Я тестировал это на двух разных версиях Windows 10 (самой новой и более старой) и на Windows 11.

Windows 10

В обеих версиях Windows 10 значок, хранящийся внутри DLL, не отображался после изменения расширения на .ico

win10 dll

Однако в самой новой версии Windows 10 это работало, пока я не попытался открыть «значок» в приложении «Фото». С тех пор мне не удалось воспроизвести это.

new win10 icon

Windows 11

В Windows 11 замаскированная DLL отображалась как обычный значок в представлении Проводника. Однако при открытии в приложении «Фото» выводится ошибка.

https://github.com/0xda568/IconJector/assets/61665703/748c1012-1d2c-47dd-915f-860ffc6d1b05

Внедрение DLL программным способом

Помимо обмана пользователя с целью ручной загрузки DLL, у атакующего также есть возможность использовать эту технику для программного внедрения DLL-файла в процесс проводника:

Сначала во временном каталоге создаётся папка, и свойства папки открываются с помощью SHObjectProperties. Чтобы получить дескриптор окна независимо от языка системы, используется EnumWindows с функцией обратного вызова, которая проверяет уникальное имя папки во всех открытых окнах.

функция обратного вызова

Через страницу свойств вызывается диалог смены значка, дескриптор которого также получается с помощью EnumWindows. Наконец, путь к значку изменяется на DLL (в данном случае с расширением .ico), что заставляет проводник загрузить DLL после нажатия кнопки OK.

Зачем?

Это очень скрытный способ внедрения DLL в процесс Проводника, поскольку он не использует обычные API для внедрения DLL. Правда, при этом появляются два коротких всплывающих окна, которые, впрочем, не слишком мешают. Поэтому эта техника может использоваться злоумышленником как метод обхода антивируса для выполнения кода через легитимный процесс проводника или для загрузки руткита UMD.

Кроме того, распространение DLL, замаскированных под файлы .ico, может быть интересным вектором атаки.

Используемые инструменты

Чтобы получить нужные дескрипторы окон, я использовал Spy++ — инструмент, который устанавливается вместе с Visual Studio.

spy++

Благодарности

Огромное спасибо Биллу Г. из Microsoft за красивый значок папки!

Спасибо случайному парню из интернета за красивый значок для внедрения!

Скачать инструмент