Кроссплатформенный Electron GUI для C2-фреймворка Sliver, предоставляющий панели управления сессиями и beacon-ами, генерацию полезных нагрузок, слушатели, добычу и управление развёртыванием в облаке.
Sliver GUI — это кроссплатформенное десктопное приложение на Electron для Sliver. Оно объединяет подключения к бэкенду, представления статуса в реальном времени, выделенные рабочие пространства и нативную консоль Sliver в интерфейсе React, построенном на HeroUI, HeroUI Pro и Font Awesome.
GUI не реализует все вышестоящие команды или опции. Подключения оператора используют mTLS; конфигурации оператора WireGuard распознаются, но подключиться не могут. См. отчёт о паритете оператора для отслеживаемого покрытия и приведённые ниже документы о функциях для конкретных границ.
Поддерживаемые версии и зафиксированные зависимости записаны в package.json и package-lock.json. Код приложения использует строгий TypeScript; вспомогательные скрипты сборки используют ES-модули Node.js.
npm ci --strict-allow-scripts
npx heroui-pro login
npx heroui-pro install --yes
npm run dev
Шаги входа/установки HeroUI нужны для первоначальной настройки рабочей станции; их можно пропустить, если HEROUI_AUTH_TOKEN уже настроен для установки. Держите учётные данные вне отслеживаемых файлов.
npm run dev собирает и запускает статическое приложение по адресу
sliver://app/index.html, используя политику безопасности контента для продакшена. Перезапускайте команду после изменений в исходном коде; этот рабочий процесс не использует HMR.
Клиент TypeScript устанавливается из зафиксированного npm-пакета sliver-script.
Смежная копия клиента не требуется. Обычная разработка приложения
не требует копии исходников Sliver; для сборки нативной консоли — требует.
Корневой каталог клиента Sliver по умолчанию — ~/.sliver-client; SLIVER_CLIENT_ROOT_DIR
может выбрать другой корень. Настройки приложения, включая параметры графа Overview,
сохраняются в gui/application-settings.json; масштаб рабочего пространства сохраняется в
gui/workspace-zoom.json, а настройки текстового редактора — в
gui/text-editor-settings.json в этом корне. GUI обнаруживает существующие
конфигурации оператора в configs/ и обновляет
открытый селектор при сохранении туда валидной конфигурации. Он сохраняет конфигурации, выбранные
через Import, как приватные ссылки на файлы в gui/operator-configs.json.
Import и Forget не копируют и не удаляют исходные конфигурации.
Совместимые с Ghostty цвета терминала настраиваются в Settings → Terminal и
сохраняются в gui/ghostty/config. Пользовательские темы размещаются в gui/ghostty/themes/;
установленные нативные темы Ghostty обнаруживаются автоматически. См.
внешний вид терминала и темы Ghostty для совместного использования конфигурации, редактора Monaco, поддержки прозрачности на платформах и ограничений времени выполнения.
| Команда | Назначение |
|---|---|
npm run typecheck | Проверить проекты TypeScript main/preload и renderer. |
npm test | Запустить модульные и компонентные тесты Vitest. |
npm run test:watch | Запустить Vitest в интерактивном режиме. |
npm run test:e2e:electron | Собрать и протестировать Electron через его renderer, preload и IPC. |
npm run protocol:check | Проверить зафиксированный клиент, вышестоящий baseline и артефакты паритета. |
npm run build | Проверить типы и собрать выходные данные приложения в dist/. |
npm run build:console | Собрать зафиксированную нативную консоль Sliver. |
npm run package | Создать распакованное приложение в release/. |
npm run dist | Создать установщики для платформ в release/. |
npm run test:e2e:packaged | Проверить и протестировать существующее распакованное приложение на локальном фикстуре. |
Модульные и компонентные тесты находятся рядом с исходными файлами; сценарии Electron — в
src/e2e/. Тесты с реальным сервером — это отдельные, опциональные проверки, требующие настроенной
одноразовой инфраструктуры. Тест на фикстуре не устанавливает совместимость с живым сервером или
установленным пакетом.
Проверка протокола использует Go и извлекает зафиксированный вышестоящий исходный код во временный каталог. См. документацию протокола для проверок происхождения и использования явно выбранного локального baseline.
Сборки консоли и дистрибутива требуют Go 1.27.1 и чистой копии Sliver
на коммите и дереве, записанных в
происхождении консоли. Поместите её в
sliver/ или задайте SLIVER_SOURCE_DIR. Сборка консоли проверяет исходный код;
она не извлекает и не изменяет эту копию.
Сборка отключает автоматическое переключение цепочки инструментов Go. Поместите требуемый бинарник Go
в PATH или задайте SLIVER_GO_BINARY с абсолютным путём к нему. Универсальные сборки консоли для macOS
требуют macOS и /usr/bin/lipo.
npm run package и npm run dist подготавливают нативную среду выполнения, консоль и
инвентаризацию лицензий перед упаковкой. Сгенерированные выходные данные в dist/, release/,
native/sliver-console/ и .e2e-dist/ игнорируются Git.
Матрица упаковки CI:
| Платформа | Пакеты | Автоматические обновления |
|---|---|---|
| macOS universal | DMG и ZIP | Установленное приложение загружает обновление ZIP. |
| Windows x64 | Установщик NSIS и портативный EXE | Только установки NSIS; портативные сборки обновляются вручную. |
| Linux x64 | AppImage и DEB | Только AppImage; пакеты DEB обновляются вручную. |
Поддерживаемые пакеты настроены на проверку GitHub Releases, загрузку обновлений в фоне и установку по Restart to update или при обычном выходе из приложения. Стабильные сборки не принимают предрелизные обновления. В приложение не встроен токен GitHub.
Первоначальный релиз v0.0.1 использует постоянные самоподписанные сертификаты для подписи кода.
Check for Updates в macOS предлагает нативный диалог доверия сертификату перед
первой проверкой обновлений; приложению сначала нужно разрешить запуск через
Gatekeeper. Установкам Windows необходимо доверие публичному сертификату подписи
на целевой машине. См. установка и обновления с самоподписанными сертификатами
для начальной настройки доверия, публичных отпечатков и политики ключей релиза.