
Un PICO para Crystal Palace que implementa CLR hosting para ejecutar un ensamblado .NET en memoria.
Un PICO para Crystal Palace que implementa hosting CLR nativo para ejecutar un ensamblado .NET adjunto en memoria, usando la misma técnica que el generador de shellcode donut. Esto te permite cargar herramientas .NET como Rubeus o Seatbelt desde código independiente de posición sin volcarlas en el disco.

Necesitarás MinGW GCC, la utilidad zip y los ejecutables CPL necesarios para enlazar el proyecto. Modifica config.spec para especificar el ensamblado .NET que quieres enlazar con el proyecto y los argumentos de línea de comandos que quieras pasar. Modifica Makefile para especificar la ubicación de crystalpalace.jar.
Para compilar el PICO por sí solo (como COFF), ejecuta make pico. Para compilar el runner de ejemplo y enlazarlo con el PICO, ejecuta make runner.
El runner de ejemplo se escribe en out/runner.bin. La configuración predeterminada invoca un ensamblado Rubeus adjunto para ejecutar "asktgt" con algunas credenciales ficticias genéricas cuando lo ejecutas:

La firma del punto de entrada del PICO es:
HRESULT (*EXECUTE_ASSEMBLY_PICO)(char *assembly, size_t assembly_len, WCHAR *argv[], int argc);
Los dos primeros argumentos deben contener un puntero a un ensamblado .NET sin procesar y su tamaño. Los dos segundos argumentos se utilizan para pasar parámetros de cadena al ensamblado cuando se invoca.
Este PICO simplemente invoca el ensamblado con los argumentos que proporcionaste. No intenta capturar la salida.
Si necesitas proporcionar entrada a través de STDIN o capturar la salida de STDOUT, debes modificar tu loader para usar llamadas a la API de WIN32 como CreatePipe() y SetStdHandle() y conectar los dispositivos de E/S estándar de tu proceso a una tubería anónima. Luego puedes leer de ella y escribir en ella como de costumbre.
clr.h directamente en el PICO.