Interface graphique Electron multiplateforme pour le framework C2 Sliver, offrant des tableaux de bord de sessions et de balises, la génération de payloads, des listeners, le loot et la gestion du déploiement cloud.
Sliver GUI est une application de bureau Electron multiplateforme pour Sliver. Elle combine des connexions backend, des vues d'état en direct, des espaces de travail dédiés et une console Sliver native dans une interface React construite avec HeroUI, HeroUI Pro et Font Awesome.
L'interface graphique n'implémente pas toutes les commandes ou options en amont. Les connexions des opérateurs utilisent mTLS ; les configurations d'opérateur WireGuard sont reconnues mais ne peuvent pas se connecter. Voir le rapport de parité opérateur pour la couverture suivie et les documents de fonctionnalités ci-dessous pour les limites spécifiques.
Les versions prises en charge et les dépendances verrouillées sont enregistrées dans package.json et package-lock.json. Le code de l'application utilise TypeScript strict ; les assistants de build utilisent les modules ES de Node.js.
npm ci --strict-allow-scripts
npx heroui-pro login
npx heroui-pro install --yes
npm run dev
Les étapes de connexion/installation HeroUI sont nécessaires pour la configuration initiale du poste de travail ; elles
peuvent être ignorées lorsque HEROUI_AUTH_TOKEN est déjà configuré pour l'installation.
Gardez les identifiants hors des fichiers suivis.
npm run dev compile et lance l'application statique à
sliver://app/index.html, en utilisant la politique de sécurité de contenu de production.
Redémarrez la commande après des modifications du code source ; ce flux de travail n'utilise pas le HMR.
Le client TypeScript est installé à partir du paquet npm sliver-script épinglé.
Un checkout client adjacent n'est pas nécessaire. Le développement ordinaire de l'application
ne nécessite pas de checkout des sources de Sliver ; la compilation de la console native, si.
La racine par défaut du client Sliver est ~/.sliver-client ; SLIVER_CLIENT_ROOT_DIR
peut sélectionner une autre racine. Les préférences de l'application, y compris les options du graphe
Overview, sont enregistrées dans gui/application-settings.json ; le zoom de l'espace de travail est enregistré dans
gui/workspace-zoom.json, et les préférences de l'éditeur de texte dans
gui/text-editor-settings.json sous cette racine. L'interface graphique découvre les configurations d'opérateur existantes dans configs/ et met à jour le
sélecteur ouvert lorsqu'une configuration valide y est enregistrée. Elle enregistre les configurations sélectionnées
via Import en tant que références de fichiers privées dans gui/operator-configs.json.
Import et Forget ne copient ni ne suppriment les configurations sources.
Les couleurs de terminal compatibles Ghostty sont configurées dans Settings → Terminal et
enregistrées dans gui/ghostty/config. Les thèmes personnalisés appartiennent à gui/ghostty/themes/ ;
les thèmes Ghostty natifs installés sont découverts automatiquement. Voir
apparence du terminal et thèmes Ghostty pour le partage de configuration, l'éditeur Monaco,
la prise en charge de la transparence par plateforme et les limites d'exécution.
| Commande | Objectif |
|---|---|
npm run typecheck | Vérifier les projets TypeScript main/preload et renderer. |
npm test | Exécuter les tests unitaires et de composants Vitest. |
npm run test:watch | Exécuter Vitest de manière interactive. |
npm run test:e2e:electron | Compiler et exercer Electron via son renderer, preload et IPC. |
npm run protocol:check | Vérifier le client épinglé, la référence en amont et les artefacts de parité. |
npm run build | Vérifier les types et compiler la sortie de l'application dans dist/. |
npm run build:console | Compiler la console Sliver native épinglée. |
npm run package | Créer une application non empaquetée sous release/. |
npm run dist | Créer les installateurs de plateforme sous release/. |
npm run test:e2e:packaged | Vérifier et tester une application non empaquetée existante contre un fixture local. |
Les tests unitaires et de composants se trouvent à côté des fichiers sources ; les scénarios Electron se trouvent dans
src/e2e/. Les tests sur serveur réel sont des vérifications séparées, sur opt-in, nécessitant une infrastructure jetable
configurée. Un test de fixture n'établit pas la compatibilité avec un serveur en direct ou un paquet installé.
La vérification du protocole utilise Go et récupère la source en amont épinglée dans un répertoire temporaire. Voir documentation du protocole pour les vérifications de provenance et l'utilisation d'une référence locale explicitement sélectionnée.
Les builds de console et de distribution nécessitent Go 1.27.1 et un checkout Sliver propre
au commit et à l'arbre enregistrés dans
provenance de la console. Placez-le dans
sliver/ ou définissez SLIVER_SOURCE_DIR. Le build de la console valide la source ;
il ne récupère ni ne modifie ce checkout.
Le build désactive le basculement automatique de la chaîne d'outils Go. Placez le binaire Go requis
sur le PATH ou définissez SLIVER_GO_BINARY sur son chemin absolu. Les builds universels de console macOS
nécessitent macOS et /usr/bin/lipo.
npm run package et npm run dist préparent le runtime natif, la console et
l'inventaire des licences avant l'empaquetage. La sortie générée sous dist/, release/,
native/sliver-console/ et .e2e-dist/ est ignorée par Git.
La matrice d'empaquetage CI est :
| Plateforme | Paquets | Mises à jour automatiques |
|---|---|---|
| macOS universel | DMG et ZIP | L'application installée télécharge la mise à jour ZIP. |
| Windows x64 | Installateur NSIS et EXE portable | Installations NSIS uniquement ; les builds portables se mettent à jour manuellement. |
| Linux x64 | AppImage et DEB | AppImage uniquement ; les paquets DEB se mettent à jour manuellement. |
Les paquets pris en charge sont configurés pour vérifier les GitHub Releases, télécharger les mises à jour en arrière-plan et installer lors de Restart to update ou à la sortie normale de l'application. Les builds stables n'acceptent pas les mises à jour préliminaires. Aucun jeton GitHub n'est intégré dans l'application.