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

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

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

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

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

Категории

Все категории
Loading categories
ReflectivePluginLoader — Рефлективный PE-маппер и устойчивый к обнаружению движок stomping модулей для Windows x64 | Kitploit
Инструменты/GitHubGitHub/racoten/reflectivepluginloader
Оборонительные ИнструментыМеханизмы персистентностиОбратная инженерияШелл-кодПост-эксплуатацияАнализ вредоносных программОбучение и ОбразованиеRed TeamingРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHub
821161 день назадЕщё не проверено

Популярное

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

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

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

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

Смотреть все инструменты →
racoten/reflectivepluginloader

ReflectivePluginLoader

Рефлективный PE-маппер и устойчивый к обнаружению движок stomping модулей для Windows x64

Репозиторий
Поделиться

ReflectivePluginLoader

License: MIT

Минимальный рефлективный PE-маппер и движок module stomping для Windows x64, построенный вокруг чистого ABI IPlugin. Отображает DLL из байтового буфера в памяти, разрешает экспорты и вызывает функции плагина — либо из анонимной памяти (классическая рефлективная загрузка), либо изнутри легитимно загруженной жертвенной DLL (module stomping).

Путь module stomping усилен против обнаружения: посекционная защита (без RWX), очистка приватных отображений, восстановление исходных байтов и затирание кучи. Пост-очистные сканирования с помощью pe-sieve, Moneta, hollows_hunter, BeaconEye и YARA возвращают нулевые обнаружения на stomped-модуле.

Быстрый старт

Требуется CMake 3.15+ и MSVC, Clang или MinGW на Windows.

# Configure (defaults to Release)
cmake -B build -G Ninja

# Build
cmake --build build

# The build produces:
#   build/Modules/CmdPlugin/cmdplugin.dll   (example plugin)
#   build/Testing/harness.exe               (test harness)

Для сборки Debug с полным диагностическим выводом:

cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build

Использование

Классическая рефлективная загрузка

.\harness.exe cmdplugin.dll whoami

Отображает плагин в память, выделенную через VirtualAlloc. Без записи в PEB, без уведомления загрузчика.

Module Stomping

.\harness.exe cmdplugin.dll whoami --stomp xpsservices.dll
.\harness.exe cmdplugin.dll "dir C:\" --stomp mscms.dll

Загружает жертвенную DLL легитимно через LoadLibrary, затем перезаписывает её .text плагином как непрерывным образом. Выполнение происходит из адресного пространства жертвенной DLL — стеки вызовов и списки модулей приписывают код жертвенному модулю.

Харнесс приостанавливается после очистки, чтобы вы могли запустить сканеры памяти против процесса.

Как работает Module Stomping

1. MapImage(plugin)               private reflective mapping
2. LoadLibrary(sacrificial)       legitimate load, PEB entry
3. Save original .text bytes      for later restoration
4. Copy plugin image -> .text     contiguous image preserves RIP-relative offsets
5. Relocate stomped code          fix addresses for new base
6. Patch entry point              mov eax,1; ret (safe FreeLibrary)
7. Per-section protections        RX / R / RW per section (never RWX)
8. Resolve exports                from private mapping, return stomped addresses
9. Free private mapping           eliminates floating PE artifact
10. Execute plugin                code runs inside "sacrificial.dll"

Очистка (Уклонение)

11. Restore original .text bytes  sacrificial code back in place
12. FreeLibrary(sacrificial)      unloads the module
13. LoadLibrary(sacrificial)      fresh load = clean file-backed pages
14. Scrub heap buffers            zero saved bytes + raw DLL data

После очистки жертвенная DLL неотличима от нормально загруженного модуля. Страницы имеют файловую поддержку (не приватные), содержимое совпадает с файлом на диске, и никаких артефактов PE в куче не остаётся.

Техники обхода

IOCМитигация
Области памяти RWXЗащита по секциям: .text RX, .rdata R, .data RW
Приватная исполняемая память (плавающий PE)VirtualFree для приватного отображения после разрешения экспортов
Изменённый код модуляВосстановить исходные байты .text, затем FreeLibrary + LoadLibrary для чистых страниц с файловой поддержкой
Заголовки PE в кучеmemset(0) для сырого буфера DLL и сохранённых байтов перед освобождением
Падение DllMain при выгрузкеТочка входа пропатчена на mov eax,1; ret перед затиранием

Структура проекта

ReflectivePluginLoader/
├── CMakeLists.txt
├── Include/
│   ├── IPlugin.h                      Plugin ABI (TaskApi, IPlugin)
│   ├── ReflectiveLoaderEngine.h       PE mapper + export resolver
│   └── StompedLoaderEngine.h          Module stomping engine
├── Modules/
│   └── CmdPlugin/
│       ├── cmdplugin.cpp              Command execution plugin
│       └── CMakeLists.txt
├── Testing/
│   ├── main.cpp                       Test harness
│   └── CMakeLists.txt
└── Tools/
    └── file2hex.py                    DLL to C byte array converter

Написание плагина

  1. Создайте каталог в Modules/ и подключите IPlugin.h.
  2. Реализуйте интерфейс IPlugin:
#include "IPlugin.h"

class MyPlugin : public IPlugin {
public:
    void init()                  const override { /* setup */ }
    void execute(TaskApi* task)  const override { /* work  */ }
    void cleanup()               const override { /* tear  */ }
};
  1. Экспортируйте пять точек входа (create_plugin, destroy_plugin, plugin_init, plugin_exec, plugin_cleanup). Используйте HeapAlloc + placement new для CRT-безопасного выделения памяти.

  2. Добавьте CMakeLists.txt и зарегистрируйте его в корневом файле с помощью add_subdirectory().

Выбор жертвенной DLL

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

Хорошие кандидаты: xpsservices.dll (1.8 МБ .text), mscms.dll, colorui.dll, npmproxy.dll

Плохие кандидаты: ntdll.dll, kernel32.dll (активно используются), clr.dll (проверяется на целостность)

Ограничения

  • Поддерживается: базовые релокации, разрешение импортов, по-секционные защиты памяти, затирание непрерывного образа, полная очистка с восстановлением страниц
  • Не поддерживается: TLS-колбэки, отложенные импорты (delay-load), перенаправленные экспорты, CFG, регистрация таблицы SEH
  • Затирание: весь виртуальный образ плагина должен помещаться в секцию .text жертвенной DLL

Что изменилось (v2.0 — усиление уклонения)

Этот релиз — полная переработка исходного proof-of-concept:

  • Движок затирания модулей (StompedLoaderEngine.h) — затирание непрерывного образа с полной очисткой для уклонения
  • По-секционные защиты памяти — .text RX, .rdata R, .data RW; больше никаких RWX-регионов
  • Устранение приватных страниц — цикл FreeLibrary + LoadLibrary заменяет приватизированные страницы на чистые, подкреплённые файлом
  • Очистка кучи — сырые байты DLL и сохранённая оригинальная .text обнуляются перед окном сканирования
  • Патчинг точки входа — mov eax,1; ret предотвращает краш DllMain во время FreeLibrary
  • Очистка приватных маппингов — VirtualFree рефлективного маппинга после разрешения экспортов (устраняет плавающий PE)
  • Переписан рефлективный загрузчик (ReflectiveLoaderEngine.h) — прямое отображение из входного буфера, без промежуточной копии через VirtualAlloc
  • Очистка ABI плагина (IPlugin.h) — удалены мёртвые хелперы (BeaconCout, CStrLenA, PluginAlloc, PluginFree)
  • Очистка CmdPlugin — удалены все строки-маркеры и отладочные артефакты
  • Переписан тестовый стенд (main.cpp) — условная компиляция через NDEBUG; Release-сборки показывают только вывод команд и команды сканирования
  • Настройки CMake по умолчанию — тип сборки Release по умолчанию, -nostartfiles для DLL плагинов (без CRT в рефлективно загружаемом коде)

Результаты сканера (после очистки)

image

Ссылки

  • stephenfewer/ReflectiveDLLInjection
  • ired.team - Module Stomping
  • fancycode/MemoryModule
  • PE Format (Microsoft)
  • forrest-orr/moneta
  • hasherezade/pe-sieve

Лицензия

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