一个用于 Crystal Palace 的 PICO,实现原生 CLR 托管,以在内存中执行附加的 .NET 程序集,采用与 donut shellcode 生成器相同的技术。这使你可以从位置无关代码中加载 Rubeus 或 Seatbelt 等 .NET 工具,而无需将其写入磁盘。

你需要 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 捕获输出,则应修改你的加载器,使用 CreatePipe() 和 SetStdHandle() 等 WIN32 API 调用,并将进程的标准 I/O 设备连接到匿名管道。然后你就可以像平常一样从中读取和写入。
clr.h。