
Crystal Palace용 PICO로, CLR 호스팅을 구현하여 .NET 어셈블리를 메모리에서 실행합니다.
Crystal Palace용 PICO로, donut 셸코드 생성기와 동일한 기법을 사용하여 추가된 .NET 어셈블리를 메모리에서 실행하는 네이티브 CLR 호스팅을 구현합니다. 이를 통해 Rubeus나 Seatbelt 같은 .NET 도구를 디스크에 드롭하지 않고 위치 독립 코드에서 로드할 수 있습니다.

빌드하려면 MinGW GCC, zip 유틸리티, 그리고 프로젝트를 링크하는 데 필요한 CPL 실행 파일이 필요합니다. config.spec을 수정하여 프로젝트와 링크할 .NET 어셈블리와 전달할 명령줄 인수를 지정하세요. Makefile을 수정하여 crystalpalace.jar의 위치를 지정하세요.
PICO를 단독으로(COFF로) 빌드하려면 make pico를 실행하세요. 예제 러너를 빌드하고 PICO와 링크하려면 make runner를 실행하세요.
예제 러너는 out/runner.bin으로 출력됩니다. 기본 구성은 실행 시 몇 가지 일반적인 더미 자격 증명으로 "asktgt"를 실행하는 추가된 Rubeus 어셈블리를 호출합니다:

PICO 진입점의 시그니처는 다음과 같습니다:
HRESULT (*EXECUTE_ASSEMBLY_PICO)(char *assembly, size_t assembly_len, WCHAR *argv[], int argc);
처음 두 인수는 원시 .NET 어셈블리에 대한 포인터와 그 크기를 포함해야 합니다. 그다음 두 인수는 어셈블리가 호출될 때 문자열 매개변수를 전달하는 데 사용됩니다.
이 PICO는 제공된 인수로 어셈블리를 호출하기만 합니다. 출력을 캡처하려는 시도는 하지 않습니다.
STDIN을 통해 입력을 제공하거나 STDOUT에서 출력을 캡처해야 하는 경우, CreatePipe() 및 SetStdHandle()과 같은 WIN32 API 호출을 사용하고 프로세스의 표준 I/O 장치를 익명 파이프에 연결하도록 로더를 수정해야 합니다. 그러면 평소처럼 파이프에서 읽고 쓸 수 있습니다.
clr.h를 직접 사용했습니다.