DllShimmer - Как легко создавать backdoor-версии DLL

Когда DLL становятся уязвимыми
Знакома ситуация, когда приложение ищет DLL в небезопасных путях? Это классическая уязвимость DLL hijacking, которую часто используют для внедрения вредоносного кода. Но что если вам нужно не просто заменить DLL, а аккуратно подменить её функции, сохранив при этом работоспособность программы? Именно для таких задач создан DllShimmer.
Что умеет DllShimmer
DllShimmer — это инструмент на Go, который автоматизирует создание proxy-DLL. Вот что делает его особенным:
- Автогенерация кода: На основе анализа оригинала создаёт .cpp и .def файлы
- Без нарушения работы: Позволяет добавлять свой код в функции, не ломая оригинальную логику
- Точное соответствие: Сохраняет все экспортируемые имена и порядковые номера функций
- Два режима работы: Динамическая и статическая линковка на выбор
Как это работает технически
- Парсит оригинальную DLL и собирает информацию о экспортируемых функциях
- Генерирует шаблонный C++ файл с возможностью добавления своего кода
- Создает .def файл для точного соответствия экспорту оригинальной DLL
- После компиляции получаем proxy-DLL с идентичной таблицей экспорта
Практическое применение
Вот несколько сценариев, где DllShimmer будет полезен:
- Тестирование безопасности: Проверка уязвимостей DLL hijacking
- Отладка: Добавление логгирования в системные вызовы
- Мониторинг: Перехват и анализ вызовов API
- Исследования: Модификация поведения программ без изменения исходников
Пример команды для создания proxy-версии version.dll:
./DllShimmer -i version.dll -o project/ -x "C:/Windows/System32/version.dll" -m
Ограничения и подводные камни
Проект ещё не идеален — учитывайте эти нюансы:
- Только x86-64 архитектура
- Проблемы с функциями, использующими float-параметры
- Максимум 12 аргументов в функциях
- Сложности с obfuscated DLL (например, Qt)
Стоит ли пробовать?
DllShimmer — отличный инструмент для:
- Пентестеров, исследующих Windows-приложения
- Разработчиков системного ПО
- Специалистов по безопасности
Если вам нужно аккуратно модифицировать поведение DLL без полной замены — этот инструмент существенно упростит задачу. Главное — использовать его только в законных целях!
Профессиональный совет: Начинайте с динамической линковки (по умолчанию) — её проще отлаживать, чем статическую.