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

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

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

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

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

Категории

Все категории
Loading categories
sRDI — Реализация Reflective DLL Injection в виде шелл-кода. Преобразование DLL в позиционно-независимый шелл-код. | Kitploit
Инструменты/GitHubGitHub/monoxgas/srdi
Криминалистика памятиГенерация полезной нагрузкиЭксплуатацияОбход IDS/IPSШелл-кодПост-эксплуатацияТестирование на ПроникновениеRed TeamingГенерация ШеллкодаРазработка Полезной НагрузкиТоп в Обход IDS/IPS №8
2.5k497664 лет назадПроверено Kitploit

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
Топ в Разработка Полезной Нагрузки №2
Топ в Генерация полезной нагрузки №3
Топ в Шелл-код №2
Топ в Генерация Шеллкода №3
GitHubmonoxgas/srdi

sRDI

Реализация Reflective DLL Injection в виде шелл-кода. Преобразование DLL в позиционно-независимый шелл-код.

Репозиторий

sRDI - Внедрение отражённой DLL через шеллкод

sRDI позволяет преобразовывать DLL-файлы в позиционно-независимый шеллкод. Он стремится быть полностью функциональным загрузчиком PE, поддерживающим правильные разрешения секций, обратные вызовы TLS и проверки целостности. Его можно рассматривать как загрузчик PE в виде шеллкода, прикреплённый к упакованной DLL.

Функционал реализуется двумя компонентами:

  • C проект, который компилирует реализацию загрузчика PE (RDI) в шеллкод
  • Код конвертации, который объединяет DLL, RDI и пользовательские данные с помощью бутстрапа

Этот проект состоит из следующих элементов:

  • ShellcodeRDI: Компилирует шеллкод для загрузчика DLL
  • NativeLoader: При необходимости преобразует DLL в шеллкод, затем внедряет в память
  • DotNetLoader: Реализация NativeLoader на C#
  • Python\ConvertToShellcode.py: Преобразует DLL в шеллкод на месте
  • Python\EncodeBlobs.py: Кодирует скомпилированные блобы sRDI для статического внедрения
  • PowerShell\ConvertTo-Shellcode.ps1: Преобразует DLL в шеллкод на месте
  • FunctionTest: Импортирует C-функцию sRDI для отладочного тестирования
  • TestDLL: Пример DLL, содержащий две экспортируемые функции для вызова при загрузке и после

DLL не обязательно компилировать с RDI, однако техника является кроссплатформенно совместимой.

Варианты использования / Примеры

Перед использованием рекомендую ознакомиться с Reflective DLL Injection и её назначением.

Преобразование DLL в шеллкод с помощью Python

root@kitploit:~
from ShellcodeRDI import *

dll = open("TestDLL_x86.dll", 'rb').read()
shellcode = ConvertToShellcode(dll)

Загрузка DLL в память с помощью C# загрузчика

root@kitploit:~
DotNetLoader.exe TestDLL_x64.dll

Преобразование DLL с помощью python-скрипта и загрузка через Native EXE

root@kitploit:~
python ConvertToShellcode.py TestDLL_x64.dll
NativeLoader.exe TestDLL_x64.bin

Преобразование DLL с помощью PowerShell и загрузка через Invoke-Shellcode

root@kitploit:~
Import-Module .\Invoke-Shellcode.ps1
Import-Module .\ConvertTo-Shellcode.ps1
Invoke-Shellcode -Shellcode (ConvertTo-Shellcode -File TestDLL_x64.dll)

Флаги

Код загрузчика PE использует аргумент flags для управления различными опциями логики загрузки:

  • SRDI_CLEARHEADER [0x1]: DOS-заголовок и DOS-заглушка целевой DLL полностью затираются нулевыми байтами при загрузке (кроме e_lfanew). Это может вызвать проблемы со стандартными Windows API при передаче базового адреса в качестве псевдо HMODULE.
  • SRDI_CLEARMEMORY [0x2]: После вызова функций в загруженном модуле (DllMain и любых экспортов) данные DLL будут очищены из памяти. Это опасно, если вы планируете продолжать выполнение кода из модуля (потоки / GetProcAddressR).
  • SRDI_OBFUSCATEIMPORTS [0x4]: Порядок импортов в модуле будет рандомизирован перед началом патчинга IAT. Кроме того, старшие 16 бит флага можно использовать для хранения количества секунд паузы перед обработкой следующего импорта. Например, flags | (3 << 16) приостановит выполнение на 3 секунды между каждым импортом.
  • SRDI_PASS_SHELLCODE_BASE [0x8]: Вместо передачи предоставленных пользовательских данных в экспортируемую функцию, sRDI передаёт базовый адрес текущего выполняемого блока шеллкода. Это может быть полезно для самоочистки внутри более продвинутых модулей.

Сборка

Этот проект собирается с помощью Visual Studio 2019 (v142) и Windows SDK 10. Python-скрипт написан на Python 3.

Скрипты Python и PowerShell находятся по адресу:

  • Python\ConvertToShellcode.py
  • PowerShell\ConvertTo-Shellcode.ps1

После сборки проекта остальные бинарные файлы будут находиться по адресу:

  • bin\NativeLoader.exe
  • bin\DotNetLoader.exe
  • bin\TestDLL_<arch>.dll
  • bin\ShellcodeRDI_<arch>.bin

Если вы хотите обновить статические блобы внутри любого из инструментов:

root@kitploit:~
> python .\lib\Python\EncodeBlobs.py -h
usage: EncodeBlobs.py [-h] solution_dir

sRDI Blob Encoder

positional arguments:
  solution_dir  Solution Directory

optional arguments:
  -h, --help    show this help message and exit

> python lib\Python\EncodeBlobs.py C:\code\srdi

[+] Updated C:\code\srdi\Native/Loader.cpp
[+] Updated C:\code\srdi\DotNet/Program.cs
[+] Updated C:\code\srdi\Python/ShellcodeRDI.py
[+] Updated C:\code\srdi\PowerShell/ConvertTo-Shellcode.ps1

Альтернативы

Если мой код вас не устраивает, или вы просто ищете альтернативный проект загрузчика PE в памяти, ознакомьтесь с некоторыми из них:

  • https://github.com/fancycode/MemoryModule — Вероятно, один из самых чистых загрузчиков PE, отличный справочник.
  • https://github.com/TheWover/donut — Хотите конвертировать .NET-сборки? Или, может быть, JScript?
  • https://github.com/hasherezade/pe_to_shellcode — Генерирует полиморфные гибриды PE+шеллкод.
  • https://github.com/DarthTon/Blackbone — Большая библиотека с множеством примитивов для взлома/хуков памяти.

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

Основа этого проекта взята из "Improved Reflective DLL Injection" от Дэна Стейплса, которая, в свою очередь, основана на оригинальном проекте Стивена Фьюера.

Проектный фреймворк для компиляции C-кода как шеллкода взят из исследования Мэтью Грэбера "PIC_BindShell"

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