
PICO для Crystal Palace, который реализует хостинг CLR для выполнения .NET-сборки в памяти.
PICO для Crystal Palace, реализующий нативное размещение CLR для выполнения добавленной .NET-сборки в памяти, с использованием той же техники, что и генератор шеллкода donut. Это позволяет загружать .NET-инструменты, такие как Rubeus или Seatbelt, из позиционно-независимого кода, не сбрасывая их на диск.

Вам понадобятся MinGW GCC, утилита zip и исполняемые файлы CPL, необходимые для компоновки проекта. Измените config.spec, чтобы указать .NET-сборку, которую вы хотите связать с проектом, и аргументы командной строки, которые нужно передать. Измените Makefile, чтобы указать расположение crystalpalace.jar.
Чтобы собрать PICO отдельно (в формате COFF), выполните make pico. Чтобы собрать пример раннера и слинковать его с PICO, выполните make runner.
Пример раннера записывается в out/runner.bin. Конфигурация по умолчанию вызывает добавленную сборку Rubeus для выполнения "asktgt" с некоторыми стандартными тестовыми учётными данными при его запуске:

Сигнатура точки входа PICO выглядит следующим образом:
HRESULT (*EXECUTE_ASSEMBLY_PICO)(char *assembly, size_t assembly_len, WCHAR *argv[], int argc);
Первые два аргумента должны содержать указатель на .NET-сборку в сыром виде и её размер. Вторые два аргумента используются для передачи строковых параметров сборке при её вызове.
Этот PICO просто вызывает сборку с переданными вами аргументами. Он не предпринимает никаких попыток перехватить вывод.
Если вам нужно передавать входные данные через STDIN или перехватывать вывод из STDOUT, измените свой загрузчик, чтобы использовать вызовы WIN32 API, такие как CreatePipe() и SetStdHandle(), и подключите стандартные устройства ввода-вывода вашего процесса к анонимному каналу. Затем вы сможете читать из него и писать в него как обычно.
clr.h в PICO.