
Marco de investigación de comando y control (C2) cifrado para educación en ciberseguridad, laboratorios de red team y experimentos de comunicación segura cliente‑servidor.
BlackBerryC2 es un framework de administración remota y C2 encriptado diseñado exclusivamente para uso educativo, investigación de seguridad y entornos de laboratorio controlados.

El proyecto demuestra cómo construir un servidor de comando y control personalizado con criptografía a nivel de aplicación, gestión de sesiones y comunicación segura con el cliente sin depender de pilas TLS externas.
Este proyecto NO es malware y NO está destinado para acceso no autorizado.
BlackBerryC2:
Úselo solo en sistemas y redes de su propiedad o para los que tenga autorización explícita para probar.
Dependencias de Python:
pip install cryptography prompt_toolkit zstandard
zstandardes opcional pero recomendado para transferencias mayores de 1 GB.
get -r, put -r)-b) — no bloqueantes, cancelables.partial + .resume)generate-payload)BlackBerryHTTPs_TLSProxyGUI)log)logs/last_start.jsonBlackBerryC2 v2.0 establece comunicación segura de la siguiente manera:
REQUEST_PUBKEY.secp256r1).HMAC_PRE_SHARED_SECRET).Cada sesión mantiene:
Todas las claves criptográficas se generan en tiempo de ejecución y nunca se reutilizan entre reinicios (a menos que se establezca --persistente).
python3 BlackBerryC2_server.py
Configuración por defecto:
0.0.0.09949| Flag | Descripción |
|---|---|
-p / --persistente | Usa claves ECDHE persistentes de ecdhe-cert/ (solicita frase de paso) |
-v | Registro de depuración (debug) |
-vv | Registro verbose (relajado) |
-H <host> | Host de escucha (por defecto: 0.0.0.0) |
-P <port> | Puerto de escucha (por defecto: 9949) |
--no-secure | Acepta cualquier cliente ECDHE sin verificación HMAC |
--hmac <secret> | Secreto precompartido HMAC personalizado (hex o cadena) |
--log-passphrase <pass> | Cifra el registro del servidor con AES-256-GCM (PBKDF2 600k iter) |
--logs | Visor de registros interactivo — no inicia el servidor |
--spa | Habilita pre-autenticación SPA/port-knocking |
--spa-mode <spa|knock> | spa = token UDP único, knock = secuencia de puertos |
--spa-port <port> | Puerto UDP para el listener SPA (por defecto: 7331) |
--knock-seq <ports> | Secuencia de puertos para modo knock (por defecto: 7001,7002,7003) |
--knock-timeout <sec> | Segundos para completar la secuencia knock (por defecto: 10) |
--spa-ttl <sec> | Segundos que una IP autorizada permanece válida (por defecto: 60) |
--berrytransfer | Modo BerryTransfer: solo transferencia de archivos, sin shell |
--transfer-root <dir> | Directorio raíz para BerryTransfer (por defecto: ./berry_transfers) |
--auto-confirm | Aprueba automáticamente todas las solicitudes GET en BerryTransfer (sin aviso al operador) |
Ejemplos:
# Inicio básico (solicita frase de paso para el registro)
python3 BlackBerryC2_server.py
# Claves ECDHE persistentes + verbose
python3 BlackBerryC2_server.py -p -vv
# Puerto personalizado, sin verificación HMAC
python3 BlackBerryC2_server.py -P 8080 --no-secure
# Port-knocking en puertos personalizados
python3 BlackBerryC2_server.py --spa --spa-mode knock --knock-seq 9001,9002,9003
# Modo BerryTransfer con auto-confirmación
python3 BlackBerryC2_server.py --berrytransfer --auto-confirm
# Ver/descifrar registros sin iniciar el servidor
python3 BlackBerryC2_server.py --logs
| Comando | Descripción |
|---|---|
list | Lista sesiones activas con estadísticas y nombre de host |
select <ID> | Interactúa con una sesión de cliente |
all <cmd> | Envía un comando a todos los clientes conectados |
report | Informe completo del estado del servidor (tiempo activo, sesiones, transferencias) |
set host <HOST> | Cambia el host de escucha (reengancha el servidor) |
set port <PORT> | Cambia el puerto de escucha (reengancha el servidor) |
sVbanner "<text>" | Cambia el banner de servicio |
generate-payload | Genera un payload para el cliente |
fingerprint | Muestra la huella digital de la clave ECDHE del servidor (SHA-256) |
ecdhe-keys | Imprime el par de claves ECDHE actual (PEM) |
kill <id|ip> | Termina una sesión por ID o IP |
block <IP> | Bloquea permanentemente una IP |
unblock <IP> | Desbloquea una IP (persistente + temporal) |
blocklist | Muestra las IPs bloqueadas (persistentes y temporales) |
log | Visor de registros interactivo (soporta registros encriptados) |
report | Resumen de estado: tiempo activo, sesiones, transferencias |
banner | Vuelve a mostrar el banner de inicio |
clean | Elimina los archivos de registro del servidor |
v | Alterna el registro de depuración (DEBUG) |
vv | Alterna el registro verbose (VERBOSE) |
cd <dir> | Cambia el directorio de trabajo local del servidor |
E <cmd> | Ejecuta comando mediante os.system localmente |
<any command> | Ejecuta localmente en el servidor |
exit | Detiene el servidor y sale |