Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
donut — Genera shellcode indipendente dalla posizione per x86, x64 o AMD64+x86 che carica assembly .NET, file PE e altri payload Windows dalla memoria e li esegue con parametri. | Kitploit
Strumenti/GitHubGitHub/thewover/donut
Memory ForensicsGenerazione di PayloadExploitEvasione IDS/IPSShellcodePost-ExploitPenetration TestingRed TeamingGenerazione di ShellcodeSviluppo PayloadTop in Evasione IDS/IPS n.7
4.7k753731 anno faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Top in Sviluppo Payload n.1
Top in Generazione di Payload n.2
Top in Shellcode n.1
Top in Generazione di Shellcode n.2
GitHubthewover/donut

donut

Genera shellcode indipendente dalla posizione per x86, x64 o AMD64+x86 che carica assembly .NET, file PE e altri payload Windows dalla memoria e li esegue con parametri.

Vedi Repository

Issues Contributors Stars Forks License Chat Github All Releases Twitter URL

Alt text

Versione corrente: v1.1

Indice

  1. Introduzione
  2. Come funziona
  3. Compilazione
  4. Utilizzo
  5. Sottoprogetti
  6. Sviluppo con Donut
  7. Domande e discussioni
  8. Disclaimer

1. Introduzione

Donut è un codice indipendente dalla posizione che consente l'esecuzione in memoria di file VBScript, JScript, EXE, DLL e assembly .NET. Un modulo creato da Donut può essere ottenuto da un server HTTP oppure incorporato direttamente nel loader stesso. Il modulo è opzionalmente cifrato utilizzando il cifrario a blocchi Chaskey con una chiave a 128 bit generata casualmente. Dopo che il file viene caricato ed eseguito in memoria, il riferimento originale viene cancellato per scoraggiare gli scanner di memoria. Il generatore e il loader supportano le seguenti caratteristiche:

  • Compressione dei file di input con aPLib e LZNT1, Xpress, Xpress Huffman tramite RtlCompressBuffer.
  • Utilizzo di entropia per gli hash delle API e la generazione di stringhe.
  • Cifratura simmetrica a 128 bit dei file.
  • Sovrascrittura degli header PE nativi.
  • Memorizzazione dei PE nativi in memoria MEM_IMAGE.
  • Patch dell'Antimalware Scan Interface (AMSI) e del Windows Lockdown Policy (WLDP).
  • Patch dell'Event Tracing for Windows (ETW).
  • Patch della riga di comando per i file EXE.
  • Patch delle API relative all'uscita per evitare la terminazione del processo host.
  • Molteplici formati di output: C, Ruby, Python, PowerShell, Base64, C#, Esadecimale e stringa UUID.

Sono disponibili librerie dinamiche e statiche sia per Linux che per Windows che possono essere integrate nei propri progetti. È disponibile anche un modulo Python di cui puoi saperne di più in Costruzione e utilizzo dell'estensione Python.

2. Come funziona

Donut contiene loader individuali per ogni tipo di file supportato. Per gli assembly .NET EXE/DLL, Donut utilizza l'API Unmanaged CLR Hosting API per caricare il Common Language Runtime. Una volta che il CLR è caricato nel processo host, viene creato un nuovo Application Domain per consentire l'esecuzione di Assembly in AppDomain usa e getta. Quando l'AppDomain è pronto, l'assembly .NET viene caricato tramite il metodo AppDomain.Load_3. Infine, il Punto di ingresso per gli EXE o il metodo pubblico per le DLL specificato dall'utente viene invocato con eventuali parametri aggiuntivi. Fare riferimento a MSDN per la documentazione sull'API Unmanaged CLR Hosting. Per un esempio autonomo di un host CLR, fare riferimento al codice qui.

I file VBScript e JScript vengono eseguiti utilizzando l'interfaccia IActiveScript. C'è anche un supporto minimo per alcuni dei metodi forniti da Windows Script Host (wscript/cscript). Per un esempio autonomo, fare riferimento al codice qui. Per una descrizione più dettagliata, leggere: Esecuzione in memoria di JavaScript, VBScript, JScript e XSL

I file EXE/DLL non gestiti o nativi vengono eseguiti utilizzando un loader PE personalizzato con supporto per Import ritardati, TLS e patch della riga di comando. Sono supportati solo i file con informazioni di rilocazione. Leggere Esecuzione in memoria di DLL per maggiori informazioni.

Il loader può disabilitare AMSI e WLDP per aiutare a eludere il rilevamento di file dannosi eseguiti in memoria. Per maggiori informazioni, leggere Come i Red Team bypassano AMSI e WLDP per il codice dinamico .NET. Supporta anche la decompressione dei file in memoria utilizzando aPLib o l'API RtlDecompressBuffer. Leggere Compressione dei dati per maggiori informazioni.

A partire dalla v1.0, anche ETW viene bypassato. Come con AMSI/WLDP, questo è un sistema modulare che ti permette di sostituire il bypass predefinito con il tuo. Il bypass predefinito è derivato dalla ricerca di XPN. Leggere Nascondere il tuo .NET - ETW per maggiori informazioni.

Per impostazione predefinita, il loader sovrascrive gli header PE dei PE non gestiti (dall'indirizzo di base a `IMAGE_OPTIONAL_HEADER.SizeOfHeaders`). Se non viene utilizzato un modulo fittizio (module overloading), gli header PE vengono azzerati. Se viene utilizzato un modulo fittizio, gli header PE del modulo fittizio vengono utilizzati per sovrascrivere quelli del modulo payload. Questo serve a scoraggiare il rilevamento confrontando gli header PE dei moduli in memoria con il file che li supporta su disco. L'utente può richiedere che tutti gli header PE siano conservati nel loro stato originale. Questo è utile in scenari in cui il modulo payload deve accedere ai propri header PE, ad esempio durante la ricerca di risorse PE incorporate.

Per una guida dettagliata all'uso del generatore e a come Donut influisce sulle tecniche operative, leggere Donut - Iniettare assembly .NET come shellcode. Per maggiori informazioni sul loader, leggere Caricare assembly .NET dalla memoria.

Chi desidera saperne di più sugli interni dovrebbe fare riferimento alle Note per sviluppatori.

3. Compilazione

Scarica lo strumento