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

26 Aug, 2025

DllShimmer Logo

Когда DLL становятся уязвимыми

Знакома ситуация, когда приложение ищет DLL в небезопасных путях? Это классическая уязвимость DLL hijacking, которую часто используют для внедрения вредоносного кода. Но что если вам нужно не просто заменить DLL, а аккуратно подменить её функции, сохранив при этом работоспособность программы? Именно для таких задач создан DllShimmer.

Что умеет DllShimmer

DllShimmer — это инструмент на Go, который автоматизирует создание proxy-DLL. Вот что делает его особенным:

  • Автогенерация кода: На основе анализа оригинала создаёт .cpp и .def файлы
  • Без нарушения работы: Позволяет добавлять свой код в функции, не ломая оригинальную логику
  • Точное соответствие: Сохраняет все экспортируемые имена и порядковые номера функций
  • Два режима работы: Динамическая и статическая линковка на выбор

Как это работает технически

  1. Парсит оригинальную DLL и собирает информацию о экспортируемых функциях
  2. Генерирует шаблонный C++ файл с возможностью добавления своего кода
  3. Создает .def файл для точного соответствия экспорту оригинальной DLL
  4. После компиляции получаем 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 без полной замены — этот инструмент существенно упростит задачу. Главное — использовать его только в законных целях!

Профессиональный совет: Начинайте с динамической линковки (по умолчанию) — её проще отлаживать, чем статическую.

Исходный код на GitHub