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
Shoggoth — Cifrador polimórfico que transforma shellcode, archivos PE y COFF en payloads ofuscados e independientes de la posición con cifrado RC4 y cifrado de bloque aleatorio, además de generación de instrucciones basura utilizando la biblioteca AsmJit. | Kitploit
Herramientas/GitHubGitHub/frkngksl/shoggoth
Frameworks de ExploitsGeneración de PayloadsShellcodeAnálisis de BinariosRed Teaming
GitHubfrkngksl/shoggoth

Shoggoth

Cifrador polimórfico que transforma shellcode, archivos PE y COFF en payloads ofuscados e independientes de la posición con cifrado RC4 y cifrado de bloque aleatorio, además de generación de instrucciones basura utilizando la biblioteca AsmJit.

Ver Repositorio
80510314hace 5 mesesRevisado 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

Shoggoth

Presentado en

  • BlackHat Europe 2022 Arsenal - Grabación de la presentación

Introducción

Descripción

Shoggoth es un proyecto de código abierto basado en C++ y la biblioteca asmjit utilizado para cifrar shellcode, archivos PE y COFF de forma polimórfica.

Shoggoth generará un archivo de salida que almacena el payload y su cargador correspondiente en una forma ofuscada. Dado que el contenido de la salida es independiente de la posición, se puede ejecutar directamente como un shellcode. Mientras se ejecuta el payload, se descifra a sí mismo en tiempo de ejecución. Además de la rutina de cifrado, Shoggoth también agrega instrucciones basura que no modifican nada entre las rutinas.

Comencé a desarrollar este proyecto para estudiar diferentes enfoques de generación dinámica de instrucciones, prácticas de ensamblado y detecciones de firmas. Planeo actualizar regularmente el repositorio con mis nuevos aprendizajes.

Características

Las características actuales se enumeran a continuación:

  • Funciona solo con entradas x64
  • Capacidad de fusionar el cargador PIC COFF con archivos de entrada COFF o BOF
  • Capacidad de fusionar el cargador PIC PE con archivos de entrada PE
  • Cifrado de flujo con algoritmo RC4
  • Cifrado de bloque con operaciones generadas aleatoriamente
  • Generación de instrucciones basura

Flujo de ejecución

El flujo de ejecución general de Shoggoth para un archivo de entrada se puede ver en la imagen a continuación. Puede observar este flujo con las configuraciones predeterminadas.

Básicamente, Shoggoth primero fusiona el shellcode del cargador precompilado según el modo elegido (archivo COFF o PE) y el archivo de entrada. Luego agrega múltiples instrucciones basura que genera a este payload fusionado. El stub que contiene el cargador, la instrucción basura y el payload se cifra primero con cifrado RC4 y luego con un cifrado de bloque generado aleatoriamente combinando los descifradores correspondientes. Finalmente, agrega una instrucción basura al bloque resultante.

Generación de código máquina

Mientras Shoggoth genera instrucciones aleatoriamente para stubs basura o rutinas de cifrado, utiliza la biblioteca AsmJit.

AsmJit es una biblioteca ligera para la generación de código máquina escrita en lenguaje C++. Puede generar código máquina para las arquitecturas X86, X86_64 y AArch64, y admite instrucciones base y todas las extensiones recientes. AsmJit permite especificar códigos de operación, registros, operandos inmediatos, etiquetas de llamada e incrustar valores arbitrarios en cualquier desplazamiento dentro del código. Al generar algunas instrucciones de ensamblado usando AsmJit, basta con llamar a la función API que corresponde a la operación de ensamblado requerida con los valores de los operandos de ensamblado de la clase Assembler. Para cada llamada API, AsmJit mantiene la información del código y la reubicación en su estructura interna CodeHolder. Después de llamar a las funciones API de todos los comandos de ensamblado a generar, se puede usar su clase JitRuntime para copiar el código desde CodeHolder a la memoria con permiso de ejecución y reubicarlo.

Mientras buscaba una biblioteca de generación de código, me encontré con AsmJit y vi que es ampliamente utilizado por muchos proyectos populares. Por eso decidí usarlo para mis necesidades. No sé si Shoggoth es el primer proyecto que lo utiliza en el contexto de red team, pero creo que puede ser una referencia para futuras implementaciones.

Cargadores COFF y PE

Shoggoth se puede utilizar para cifrar archivos PE y COFF dados, de modo que ambos puedan ejecutarse como un shellcode gracias a los cargadores precompilados independientes de la posición. Simplemente utilicé el método C a Shellcode para obtener la versión PIC de cargadores PE y COFF conocidos que modifiqué para mis proyectos anteriores. Para la compilación, utilicé el Makefile del proyecto HandleKatz, que es un volcador de LSASS en forma PIC.

Básicamente, para obtener el shellcode con la técnica de C a Shellcode, eliminé todas las variables globales en el código fuente del cargador, almacené todas las cadenas en la pila y resolví las direcciones de las funciones de la API de Windows cargando y analizando las DLL necesarias en tiempo de ejecución. Después, determiné el punto de entrada con un script de enlazador y compilé el código usando MinGW con varias banderas de compilación. Extraje la sección .text del archivo ejecutable generado y obtuve el shellcode del cargador. Dado que el archivo ejecutable obtenido después de editar el código como se indicó anteriormente no contiene secciones distintas a la sección .text, el código en esta sección se puede usar como independiente de la posición.

El código fuente de estos se puede ver y editar desde los directorios COFFLoader y PELoader. También se pueden encontrar versiones compiladas de estos códigos fuente en el directorio stub. Por ahora, si desea editar o modificar estos cargadores, debe obedecer las firmas y reemplazar los binarios precompilados del directorio stub.

Para pasar argumentos a un BOF, use la opción '--coff-arg'. Shoggoth espera una cadena hexadecimal preformateada que contenga los argumentos empaquetados, que se puede crear usando el script beacon_generate.py de TrustedSec. Se ha incluido una copia de este script como COFFArgGenerator/beacon_generate.py. (Muchas gracias a @Octoberfest7)

Cifrado RC4

Shoggoth primero utiliza uno de los cifrados de flujo, el algoritmo RC4, para cifrar el payload que obtiene. Después de generar aleatoriamente la clave utilizada aquí, cifra el payload con esa clave. El stub descifrador, que descifra el payload durante la ejecución, se crea dinámicamente y se ensambla usando AsmJit. Los registros utilizados en el stub se seleccionan aleatoriamente para cada muestra.

Hice referencia al código de Nayuki para la implementación del algoritmo RC4 que utilicé en Shoggoth.

Cifrado de bloque aleatorio

Después de realizar el primer cifrado, Shoggoth utiliza el segundo cifrado, que es un cifrado de bloque generado aleatoriamente. Con el segundo cifrado, cifra tanto el descifrador RC4 como, opcionalmente, el stub que contiene el payload, las instrucciones basura y el cargador cifrados con RC4. Divide el fragmento a cifrar en bloques de 8 bytes y utiliza instrucciones generadas aleatoriamente para cada bloque. Estas instrucciones incluyen ADD, SUB, XOR, NOT, NEG, INC, DEC, ROL y ROR. Los operandos para estas instrucciones también se seleccionan aleatoriamente.

Generación de instrucciones basura

Descargar herramienta