Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
donut — Genera shellcode independiente de posición para x86, x64 o AMD64+x86 que carga .NET Assemblies, archivos PE y otras cargas útiles de Windows desde la memoria y las ejecuta con parámetros | Kitploit
Herramientas/GitHubGitHub/thewover/donut
Forensia de MemoriaGeneración de PayloadsExplotaciónEvasión de IDS/IPSShellcodePost-ExplotaciónPruebas de PenetraciónRed TeamingGeneración de ShellcodeDesarrollo de PayloadsTop en Evasión de IDS/IPS #7
4.7k75342hace 1 añoRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Top en Desarrollo de Payloads #1
Top en Generación de Payloads #2
Top en Shellcode #1
Top en Generación de Shellcode #2
GitHubthewover/donut

donut

Genera shellcode independiente de posición para x86, x64 o AMD64+x86 que carga .NET Assemblies, archivos PE y otras cargas útiles de Windows desde la memoria y las ejecuta con parámetros

Ver Repositorio

Issues Contributors Stars Forks License Chat Github All Releases Twitter URL

Alt text

Versión actual: v1.1

Índice de contenidos

  1. Introducción
  2. Cómo funciona
  3. Compilación
  4. Uso
  5. Subproyectos
  6. Desarrollo con Donut
  7. Preguntas y discusiones
  8. Aviso legal

1. Introducción

Donut es un código independiente de la posición que permite la ejecución en memoria de archivos VBScript, JScript, EXE, DLL y ensamblados .NET. Un módulo creado por Donut puede ser servido desde un servidor HTTP o incrustado directamente en el propio cargador. El módulo está opcionalmente cifrado usando el cifrador de bloque Chaskey y una clave de 128 bits generada aleatoriamente. Después de que el archivo se cargue y ejecute en memoria, la referencia original se borra para disuadir a los escáneres de memoria. El generador y cargador soportan las siguientes características:

  • Compresión de archivos de entrada con aPLib y LZNT1, Xpress, Xpress Huffman mediante RtlCompressBuffer.
  • Uso de entropía para hashes de API y generación de cadenas.
  • Cifrado simétrico de 128 bits de archivos.
  • Sobrescritura de cabeceras PE nativas.
  • Almacenamiento de PE nativos en memoria MEM_IMAGE.
  • Parcheo de la Interfaz de Escaneo Antimalware (AMSI) y la Política de Bloqueo de Windows (WLDP).
  • Parcheo de Seguimiento de Eventos para Windows (ETW).
  • Parcheo de la línea de comandos para archivos EXE.
  • Parcheo de API relacionadas con la salida para evitar la terminación del proceso anfitrión.
  • Múltiples formatos de salida: C, Ruby, Python, PowerShell, Base64, C#, Hexadecimal y cadena UUID.

Hay bibliotecas dinámicas y estáticas tanto para Linux como para Windows que se pueden integrar en tus propios proyectos. También hay un módulo de Python del que puedes leer más en Construcción y uso de la extensión Python.

2. Cómo funciona

Donut contiene cargadores individuales para cada tipo de archivo soportado. Para ensamblados .NET EXE/DLL, Donut utiliza la API de Alojamiento CLR No Administrada para cargar el Common Language Runtime. Una vez que el CLR se carga en el proceso anfitrión, se crea un nuevo Dominio de Aplicación para permitir la ejecución de Ensamblados en AppDomains desechables. Cuando el AppDomain está listo, el ensamblado .NET se carga mediante el método AppDomain.Load_3. Finalmente, se invoca el Punto de Entrada para EXEs o el método público para DLLs especificado por el usuario con cualquier parámetro adicional. Consulte MSDN para obtener documentación sobre la API de Alojamiento CLR No Administrada. Para un ejemplo independiente de un Host CLR, consulte el código aquí.

Los archivos VBScript y JScript se ejecutan utilizando la interfaz IActiveScript. También hay soporte mínimo para algunos de los métodos proporcionados por el Host de Scripts de Windows (wscript/cscript). Para un ejemplo independiente, consulte el código aquí. Para una descripción más detallada, lea: Ejecución en Memoria de JavaScript, VBScript, JScript y XSL

Los archivos EXE/DLL no administrados o nativos se ejecutan utilizando un cargador PE personalizado con soporte para Importaciones Retrasadas, TLS y parcheo de la línea de comandos. Solo se admiten archivos con información de reubicación. Lea Ejecución en Memoria de DLL para más información.

El cargador puede deshabilitar AMSI y WLDP para ayudar a evadir la detección de archivos maliciosos ejecutados en memoria. Para más información, lea Cómo los Red Teams evaden AMSI y WLDP para Código Dinámico .NET. También soporta la descompresión de archivos en memoria usando aPLib o la API RtlDecompressBuffer. Lea Compresión de Datos para más información.

A partir de v1.0, ETW también se evita. Al igual que con AMSI/WLDP, este es un sistema modular que te permite intercambiar la evasión predeterminada por la tuya propia. La evasión predeterminada se deriva de la investigación de XPN. Lea Ocultando tu .NET - ETW para más información.

Por defecto, el cargador sobrescribirá las cabeceras PE de los PE no administrados (desde la dirección base hasta `IMAGE_OPTIONAL_HEADER.SizeOfHeaders`). Si no se utiliza un módulo señuelo (sobrecarga de módulos), las cabeceras PE se pondrán a cero. Si se utiliza un módulo señuelo, las cabeceras PE del módulo señuelo se usarán para sobrescribir las del módulo de carga útil. Esto es para disuadir la detección comparando las cabeceras PE de los módulos en memoria con el archivo que los respalda en disco. El usuario puede solicitar que todas las cabeceras PE se conserven en su estado original. Esto es útil para escenarios donde el módulo de carga útil necesita acceder a sus cabeceras PE, como cuando se buscan recursos PE incrustados.

Para un recorrido detallado usando el generador y cómo Donut afecta el arte operativo, lea Donut - Inyectando Ensamblados .NET como Shellcode. Para más información sobre el cargador, lea Cargando Ensamblados .NET desde Memoria.

Aquellos que deseen saber más sobre el funcionamiento interno deben consultar las Notas de desarrollo.

3. Compilación

Descargar herramienta