Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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
donut — Gera shellcode independente de posição para x86, x64 ou AMD64+x86 que carrega assemblies .NET, arquivos PE e outros payloads do Windows a partir da memória e os executa com parâmetros. | Kitploit
Ferramentas/GitHubGitHub/thewover/donut
Forensia de MemóriaGeração de PayloadsExploraçãoEvasão de IDS/IPSShellcodePós-ExploraçãoTestes de PenetraçãoRed TeamingGeração de ShellcodeDesenvolvimento de PayloadsTop em Evasão de IDS/IPS nº7
4.7k75342há 1 anoRevisado 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
Top em Desenvolvimento de Payloads nº1
Top em Geração de Payloads nº2
Top em Shellcode nº1
Top em Geração de Shellcode nº2
GitHubthewover/donut

donut

Gera shellcode independente de posição para x86, x64 ou AMD64+x86 que carrega assemblies .NET, arquivos PE e outros payloads do Windows a partir da memória e os executa com parâmetros.

Ver Repositório

Issues Contributors Stars Forks License Chat Github All Releases Twitter URL

Alt text

Versão atual: v1.1

Índice

  1. Introdução
  2. Como Funciona
  3. Compilação
  4. Uso
  5. Subprojetos
  6. Desenvolvimento com Donut
  7. Perguntas e Discussões
  8. Aviso Legal

1. Introdução

Donut é um código independente de posição que permite a execução em memória de arquivos VBScript, JScript, EXE, DLL e assemblies dotNET. Um módulo criado pelo Donut pode ser obtido de um servidor HTTP ou embutido diretamente no próprio carregador. O módulo é opcionalmente criptografado usando a cifra de bloco Chaskey e uma chave de 128 bits gerada aleatoriamente. Após o arquivo ser carregado e executado em memória, a referência original é apagada para dificultar scanners de memória. O gerador e o carregador suportam as seguintes funcionalidades:

  • Compressão de arquivos de entrada com aPLib e LZNT1, Xpress, Xpress Huffman via RtlCompressBuffer.
  • Uso de entropia para hashes de API e geração de strings.
  • Criptografia simétrica de 128 bits de arquivos.
  • Sobrescrita de cabeçalhos PE nativos.
  • Armazenamento de PEs nativos em memória MEM_IMAGE.
  • Correção da Interface de Verificação Antimalware (AMSI) e da Política de Bloqueio do Windows (WLDP).
  • Correção do Rastreamento de Eventos para Windows (ETW).
  • Correção da linha de comando para arquivos EXE.
  • Correção de APIs relacionadas a saída para evitar encerramento do processo hospedeiro.
  • Múltiplos formatos de saída: C, Ruby, Python, PowerShell, Base64, C#, Hexadecimal e string UUID.

Existem bibliotecas dinâmicas e estáticas tanto para Linux quanto para Windows que podem ser integradas em seus próprios projetos. Há também um módulo Python sobre o qual você pode ler mais em Compilando e usando a extensão Python.

2. Como Funciona

Donut contém carregadores individuais para cada tipo de arquivo suportado. Para assemblies dotNET EXE/DLL, Donut usa a API Unmanaged CLR Hosting para carregar o Common Language Runtime. Uma vez que o CLR é carregado no processo hospedeiro, um novo Application Domain é criado para permitir a execução de Assemblies em AppDomains descartáveis. Quando o AppDomain está pronto, o Assembly dotNET é carregado via o método AppDomain.Load_3. Finalmente, o Ponto de Entrada para EXEs ou método público para DLLs especificado pelo usuário é invocado com quaisquer parâmetros adicionais. Consulte a MSDN para documentação sobre a API Unmanaged CLR Hosting. Para um exemplo independente de um CLR Host, consulte o código aqui.

Arquivos VBScript e JScript são executados usando a interface IActiveScript. Há também suporte mínimo para alguns dos métodos fornecidos pelo Windows Script Host (wscript/cscript). Para um exemplo independente, consulte o código aqui. Para uma descrição mais detalhada, leia: Execução em Memória de JavaScript, VBScript, JScript e XSL

Arquivos EXE/DLL não gerenciados ou nativos são executados usando um carregador PE personalizado com suporte para Importações Atrasadas, TLS e correção da linha de comando. Apenas arquivos com informações de realocação são suportados. Leia Execução em Memória de DLL para mais informações.

O carregador pode desabilitar AMSI e WLDP para ajudar a evitar a detecção de arquivos maliciosos executados em memória. Para mais informações, leia Como Equipes Vermelhas Contornam AMSI e WLDP para Código Dinâmico .NET. Ele também suporta descompressão de arquivos em memória usando aPLib ou a API RtlDecompressBuffer. Leia Compressão de Dados para mais informações.

A partir da v1.0, o ETW também é contornado. Assim como com AMSI/WLDP, este é um sistema modular que permite substituir o bypass padrão pelo seu próprio. O bypass padrão é derivado da pesquisa de XPN. Leia Escondendo seu .NET - ETW para mais informações.

Por padrão, o carregador sobrescreverá os cabeçalhos PE de PEs não gerenciados (do endereço base até `IMAGE_OPTIONAL_HEADER.SizeOfHeaders`). Se nenhum módulo falso for usado (sobrecarga de módulo), os cabeçalhos PE serão zerados. Se um módulo falso for usado, os cabeçalhos PE do módulo falso serão usados para sobrescrever os do módulo carregado. Isso visa dificultar a detecção por comparação dos cabeçalhos PE de módulos em memória com o arquivo que os originou em disco. O usuário pode solicitar que todos os cabeçalhos PE sejam preservados em seu estado original. Isso é útil para cenários onde o módulo carregado precisa acessar seus cabeçalhos PE, como ao procurar por recursos PE embutidos.

Para um passo a passo detalhado usando o gerador e como o Donut afeta as técnicas de operação, leia Donut - Injetando Assemblies .NET como Shellcode. Para mais informações sobre o carregador, leia Carregando Assemblies .NET a Partir da Memória.

Aqueles que desejam saber mais sobre os detalhes internos devem consultar as Notas do desenvolvedor.

3. Compilação

Existem dois tipos de compilação. Se você deseja depurar o Donut, consulte a documentação aqui. Caso contrário, continue lendo para a compilação de lançamento.

Clone

De um prompt de comando do Windows ou terminal Linux, clone o repositório.

Baixar ferramenta