
Cadre de recherche de commande et contrôle (C2) chiffré pour l'éducation en cybersécurité, les laboratoires d'équipe rouge et les expériences de communication client-serveur sécurisées.
BlackBerryC2 est un framework d’administration à distance et de C2 chiffré conçu exclusivement pour un usage éducatif, la recherche en sécurité et les environnements de laboratoire contrôlés.

Le projet montre comment construire un serveur de commande et de contrôle personnalisé avec cryptographie au niveau applicatif, gestion de session et communication client sécurisée sans dépendre de piles TLS externes.
Ce projet n’est PAS un logiciel malveillant et n’est PAS destiné à un accès non autorisé.
BlackBerryC2 :
Utilisez-le uniquement sur des systèmes et réseaux que vous possédez ou pour lesquels vous avez une autorisation explicite de test.
Dépendances Python :
pip install cryptography prompt_toolkit zstandard
zstandardest optionnel mais recommandé pour les transferts de plus de 1 Go.
get -r, put -r)-b) — non bloquants, annulables.partial + .resume)generate-payload)BlackBerryHTTPs_TLSProxyGUI)log)logs/last_start.jsonBlackBerryC2 v2.0 établit une communication sécurisée comme suit :
REQUEST_PUBKEY.secp256r1).HMAC_PRE_SHARED_SECRET).Chaque session maintient :
Toutes les clés cryptographiques sont générées à l’exécution et jamais réutilisées entre les redémarrages (sauf si --persistente est défini).
python3 BlackBerryC2_server.py
Configuration par défaut :
0.0.0.09949| Flag | Description |
|---|---|
-p / --persistente | Utiliser des clés ECDHE persistantes depuis ecdhe-cert/ (demande une phrase de passe) |
-v | Journalisation de débogage |
-vv | Journalisation verbose (détendue) |
-H <host> | Hôte d’écoute (défaut : 0.0.0.0) |
-P <port> | Port d’écoute (défaut : 9949) |
--no-secure | Accepter tout client ECDHE sans vérification HMAC |
--hmac <secret> | Secret partagé HMAC personnalisé (hex ou chaîne) |
--log-passphrase <pass> | Chiffrer le journal serveur avec AES-256-GCM (PBKDF2 600k itérations) |
--logs | Visualiseur de journal interactif — sans démarrer le serveur |
--spa | Activer la pré-authentification SPA/port-knocking |
--spa-mode <spa|knock> | spa = jeton UDP unique, knock = séquence de ports |
--spa-port <port> | Port UDP pour l’écoute SPA (défaut : 7331) |
--knock-seq <ports> | Séquence de ports pour le mode knock (défaut : 7001,7002,7003) |
--knock-timeout <sec> | Secondes pour terminer la séquence knock (défaut : 10) |
--spa-ttl <sec> | Secondes pendant lesquelles une IP autorisée reste valide (défaut : 60) |
--berrytransfer | Mode BerryTransfer : transfert de fichiers uniquement, pas de shell |
--transfer-root <dir> | Répertoire racine pour BerryTransfer (défaut : ./berry_transfers) |
--auto-confirm | Approuver automatiquement toutes les demandes GET en BerryTransfer (sans invite opérateur) |
Exemples :
# Démarrage de base (demande une phrase de passe pour le journal)
python3 BlackBerryC2_server.py
# Clés ECDHE persistantes + verbose
python3 BlackBerryC2_server.py -p -vv
# Port personnalisé, sans vérification HMAC
python3 BlackBerryC2_server.py -P 8080 --no-secure
# Port-knocking sur des ports personnalisés
python3 BlackBerryC2_server.py --spa --spa-mode knock --knock-seq 9001,9002,9003
# Mode BerryTransfer avec confirmation automatique
python3 BlackBerryC2_server.py --berrytransfer --auto-confirm
# Afficher/déchiffrer les journaux sans démarrer le serveur
python3 BlackBerryC2_server.py --logs
| Commande | Description |
|---|---|
list | Lister les sessions actives avec statistiques et nom d’hôte |
select <ID> | Interagir avec une session client |
all <cmd> | Envoyer une commande à tous les clients connectés |
report | Rapport complet d’état du serveur (uptime, sessions, transferts) |
set host <HOST> | Modifier l’hôte d’écoute (relie le serveur) |
set port <PORT> | Modifier le port d’écoute (relie le serveur) |
sVbanner "<text>" | Modifier la bannière de service |
generate-payload | Générer un payload client |
fingerprint | Afficher l’empreinte de la clé serveur ECDHE (SHA-256) |
ecdhe-keys | Afficher la paire de clés ECDHE actuelle (PEM) |
kill <id|ip> | Terminer une session par ID ou IP |
block <IP> | Bloquer définitivement une IP |
unblock <IP> | Débloquer une IP (persistante + temporaire) |
blocklist | Afficher les IP bloquées (persistantes et temporaires) |
log | Visualiseur de journal interactif (prend en charge les journaux chiffrés) |
report | Résumé d’état : uptime, sessions, transferts |
banner | Réafficher la bannière de démarrage |
clean | Supprimer les fichiers de journal du serveur |
v | Activer/désactiver le journal DEBUG |
vv | Activer/désactiver le journal VERBOSE |
cd <dir> | Changer le répertoire de travail local du serveur |
E <cmd> | Exécuter une commande via os.system localement |
<any command> | Exécuter localement sur le serveur |
exit | Arrêter le serveur et quitter |