
Um PICO para Crystal Palace que implementa hospedagem de CLR para executar um assembly .NET em memória.
Um PICO para Crystal Palace que implementa hospedagem nativa de CLR para executar um assembly .NET anexado em memória, usando a mesma técnica do gerador de shellcode donut. Isso permite carregar ferramentas .NET como Rubeus ou Seatbelt a partir de código independente de posição, sem gravá-las no disco.

Você precisará do MinGW GCC, do utilitário zip e dos executáveis CPL necessários para vincular o projeto. Modifique config.spec para especificar o assembly .NET que deseja vincular ao projeto e os argumentos de linha de comando que deseja passar. Modifique Makefile para especificar a localização de crystalpalace.jar.
Para compilar o PICO isoladamente (como um COFF), execute make pico. Para compilar o runner de exemplo e vinculá-lo ao PICO, execute make runner.
O runner de exemplo é gravado em out/runner.bin. A configuração padrão invoca um assembly Rubeus anexado para executar "asktgt" com algumas credenciais fictícias genéricas quando você o executa:

A assinatura do ponto de entrada do PICO é:
HRESULT (*EXECUTE_ASSEMBLY_PICO)(char *assembly, size_t assembly_len, WCHAR *argv[], int argc);
Os dois primeiros argumentos devem conter um ponteiro para um assembly .NET bruto e seu tamanho. Os próximos dois argumentos são usados para passar parâmetros de string para o assembly quando ele é invocado.
Este PICO apenas invoca o assembly com os argumentos fornecidos. Ele não tenta capturar a saída.
Se você precisar fornecer entrada via STDIN ou capturar a saída do STDOUT, modifique seu loader para usar chamadas de API WIN32 como CreatePipe() e SetStdHandle() e conecte os dispositivos padrão de E/S do seu processo a um pipe anônimo. Depois, você pode ler e escrever nele como de costume.
clr.h diretamente no PICO.