
Estrutura de pesquisa de comando e controle (C2) criptografado para educação em cibersegurança, laboratórios de red team e experimentos de comunicação segura cliente-servidor.
BlackBerryC2 é um framework de administração remota e C2 criptografado projetado exclusivamente para uso educacional, pesquisa de segurança e ambientes laboratoriais controlados.

O projeto demonstra como construir um servidor de comando e controle personalizado com criptografia na camada de aplicação, gerenciamento de sessão e comunicação segura com o cliente sem depender de pilhas TLS externas.
Este projeto NÃO é malware e NÃO se destina a acesso não autorizado.
BlackBerryC2:
Use apenas em sistemas e redes que você possui ou tem autorização explícita para testar.
Dependências Python:
pip install cryptography prompt_toolkit zstandard
zstandardé opcional, mas recomendado para transferências maiores que 1 GB.
get -r, put -r)-b) — não bloqueantes, canceláveis.partial + .resume)generate-payload)BlackBerryHTTPs_TLSProxyGUI)log)BlackBerryC2 v2.0 estabelece comunicação segura da seguinte forma:
REQUEST_PUBKEY.secp256r1).HMAC_PRE_SHARED_SECRET).Cada sessão mantém:
Todas as chaves criptográficas são geradas em tempo de execução e nunca reutilizadas entre reinicializações (a menos que --persistente seja definido).
python3 BlackBerryC2_server.py
Configuração padrão:
0.0.0.09949Exemplos:
# Inicialização básica (solicita frase secreta do log)
python3 BlackBerryC2_server.py
# Chaves ECDHE persistentes + verboso
python3 BlackBerryC2_server.py -p -vv
# Porta personalizada, sem verificação HMAC
python3 BlackBerryC2_server.py -P 8080 --no-secure
# Port-knocking em portas personalizadas
python3 BlackBerryC2_server.py --spa --spa-mode knock --knock-seq 9001,9002,9003
# Modo BerryTransfer com confirmação automática
python3 BlackBerryC2_server.py --berrytransfer --auto-confirm
# Visualizar/descriptografar logs sem iniciar o servidor
python3 BlackBerryC2_server.py --logs
select <ID>)BerryTransfer é um modo de servidor dedicado apenas para transferência de arquivos inspirado no scp. Quando ativo, o servidor rejeita todo acesso a shell e aceita apenas comandos de protocolo BT:*.
Iniciar:
python3 BlackBerryC2_server.py --berrytransfer
python3 BlackBerryC2_server.py --berrytransfer --auto-confirm # sem prompt do operador para GETs
Comandos do shell BerryTransfer:
O log de transferência é escrito em logs/bt_transfer.jsonl (opcionalmente criptografado com AES-256-GCM).
Quando --spa está ativo, os clientes devem se autenticar via UDP antes que a conexão TCP seja aceita.
Modo SPA (padrão): O cliente envia um token HMAC-SHA256 de 32 bytes para SPA_UDP_PORT.
token = HMAC-SHA256(HMAC_SECRET, "{ip}:{time_window_30s}")
Modo Knock: O cliente bate em uma sequência de portas UDP em ordem dentro de uma janela de tempo limite.
python3 BlackBerryC2_server.py --spa --spa-mode knock --knock-seq 7001,7002,7003 --knock-timeout 10
IPs autorizados são válidos por --spa-ttl segundos (padrão 60).
Visualize logs com o visualizador integrado:
BlackBerry> log
Ou de forma independente:
python3 BlackBerryC2_server.py --logs
Este projeto é destinado apenas para:
O uso não autorizado contra sistemas sem permissão é estritamente proibido.
Veja o arquivo LICENSE para detalhes completos da licença.
Este software é fornecido "como está", sem garantia de qualquer tipo.
Os autores não assumem nenhuma responsabilidade por uso indevido ou danos causados por este software.
logs/last_start.json| Flag | Descrição |
|---|
-p / --persistente | Usa chaves ECDHE persistentes de ecdhe-cert/ (solicita a frase secreta) |
-v | Log de depuração |
-vv | Log verboso (relaxado) |
-H <host> | Host de escuta (padrão: 0.0.0.0) |
-P <port> | Porta de escuta (padrão: 9949) |
--no-secure | Aceita qualquer cliente ECDHE sem verificação HMAC |
--hmac <secret> | Segredo pré-compartilhado HMAC personalizado (hex ou string) |
--log-passphrase <pass> | Criptografa o log do servidor com AES-256-GCM (PBKDF2 600k iterações) |
--logs | Visualizador interativo de logs — sem servidor iniciado |
--spa | Habilita pré-autenticação SPA/port-knocking |
--spa-mode <spa|knock> | spa = token UDP único, knock = sequência de portas |
--spa-port <port> | Porta UDP para o ouvinte SPA (padrão: 7331) |
--knock-seq <ports> | Sequência de portas para modo knock (padrão: 7001,7002,7003) |
--knock-timeout <sec> | Segundos para completar a sequência knock (padrão: 10) |
--spa-ttl <sec> | Segundos que um IP autorizado permanece válido (padrão: 60) |
--berrytransfer | Modo BerryTransfer: apenas transferência de arquivos, sem shell |
--transfer-root <dir> | Diretório raiz para BerryTransfer (padrão: ./berry_transfers) |
--auto-confirm | Aprova automaticamente todas as solicitações GET no BerryTransfer (sem prompt do operador) |
| Comando | Descrição |
|---|
list | Lista sessões ativas com estatísticas e nome do host |
select <ID> | Interagir com uma sessão do cliente |
all <cmd> | Envia um comando para todos os clientes conectados |
report | Relatório completo do status do servidor (tempo de atividade, sessões, transferências) |
set host <HOST> | Altera o host de escuta (reatribui o servidor) |
set port <PORT> | Altera a porta de escuta (reatribui o servidor) |
sVbanner "<text>" | Altera o banner do serviço |
generate-payload | Gera um payload para o cliente |
fingerprint | Mostra a impressão digital da chave do servidor ECDHE (SHA-256) |
ecdhe-keys | Imprime o par de chaves ECDHE atual (PEM) |
kill <id|ip> | Encerra uma sessão por ID ou IP |
block <IP> | Bloqueia um IP permanentemente |
unblock <IP> | Desbloqueia um IP (persistente + temporário) |
blocklist | Mostra IPs bloqueados (persistentes e temporários) |
log | Visualizador interativo de logs (suporta logs criptografados) |
report | Resumo do status: tempo de atividade, sessões, transferências |
banner | Reexibe o banner de inicialização |
clean | Exclui arquivos de log do servidor |
v | Alterna log de DEBUG |
vv | Alterna log VERBOSO |
cd <dir> | Altera o diretório de trabalho local do servidor |
E <cmd> | Executa comando via os.system localmente |
<any command> | Executa localmente no servidor |
exit | Para o servidor e sai |
| Comando | Descrição |
|---|
proxy | Inicia o daemon de proxy TLS/HTTP (modo automático) |
proxy --mode <mode> | Modos: auto, tls, http, https, both, all |
proxy --stats | Mostra estatísticas do proxy |
proxy gui | Inicia a GUI do proxy (processo separado) |
stop-proxy | Para o daemon de proxy |
stop-proxy-gui | Para a GUI do proxy |
proxy-help | Ajuda completa do proxy |
| Comando | Descrição |
|---|
help | Mostra ajuda da sessão |
exit | Retorna ao shell principal |
!<cmd> | Executa comando localmente no servidor |
<cmd> | Executa comando no cliente remoto |
cmd1 && cmd2 | Encadeamento: executa cmd2 apenas se cmd1 tiver sucesso |
cmd1 || cmd2 | Encadeamento: executa cmd2 apenas se cmd1 falhar |
cmd1 ; cmd2 | Encadeamento: sempre executa cmd2 |
| Comando | Descrição |
|---|
get <file> | Baixa arquivo do cliente |
get <dir> -r | Download recursivo de diretório |
get <file> -b | Download em segundo plano (não bloqueante) |
get <dir> -r -b | Download recursivo em segundo plano |
put <file> | Envia arquivo para o cliente |
put <file> -exc | Envia e executa em memória (scripts) |
put <dir> -r | Upload recursivo de diretório |
put <file> -b | Upload em segundo plano |
transfers | Lista todas as transferências ativas e concluídas |
stop <ID> | Cancela uma transferência em segundo plano (ex.: stop T1) |
resume <local_file> | Retoma um download interrompido |
screenshot | Captura a tela do cliente |
| Comando | Descrição |
|---|
confirm <ID> | Aprova uma solicitação GET pendente |
deny <ID> | Rejeita uma solicitação GET pendente |
pending | Lista solicitações GET aguardando aprovação |
auto [on|off] | Alterna/define confirmação automática |
clients | Mostra sessões BerryTransfer ativas |
ls [dir] | Lista arquivos no diretório raiz de transferência |
tree [dir] | Árvore de arquivos do diretório raiz de transferência |
find <name> | Procura arquivo no diretório raiz de transferência |
rm <file> | Exclui arquivo do diretório raiz de transferência (com confirmação) |
log [N] | Mostra as últimas N entradas do log de transferência (padrão 30) |
cd <dir> | Altera diretório de trabalho local |
pwd | Mostra diretório local atual |
!<cmd> | Executa comando local do sistema |
exit | Para o servidor BerryTransfer |
| Recurso | Detalhes |
|---|
| Troca de chaves | ECDHE secp256r1 efêmera ou persistente |
| Criptografia de sessão | AES-256-GCM, nonce aleatório de 12 bytes por mensagem |
| Autenticação do cliente | HMAC-SHA256 sobre segredo compartilhado durante handshake |
| Integridade da mensagem | HMAC-SHA256 por pacote (cobre seq + nonce + texto cifrado) |
| Anti-replay | Rastreador de janela de números de sequência por sessão |
| Proteção contra downgrade | Tamanho mínimo de chave AES imposto (256 bits) |
| Limitação de taxa de heartbeat | Mínimo de 3s entre heartbeats; violações rastreadas |
| Proteção contra inundação de comandos | Limitador de taxa; desconexão automática após limite |
| Detecção de varredura | Contadores de scan de conexão, captura de banner, falhas de handshake |
| Gerenciamento de IP | Lista de bloqueio persistente + banimentos temporários (automático + manual) |
| Criptografia de log | AES-256-GCM + PBKDF2-HMAC-SHA256 (600k iterações) |
| Jitter de resposta | Jitter aleatório de 10–50ms para resistir a ataques de temporização |
| Pré-autenticação | Token SPA ou port-knocking antes que o TCP seja aceito |
| Arquivo de log | Conteúdo |
|---|
logs/BlackBerryC2_Server.log | Log do servidor rotativo em texto simples (INFO+) |
logs/BlackBerryC2_enc.log | Log do servidor criptografado (se --log-passphrase definido) |
logs/sessions.jsonl | Eventos de sessão: conectar, desconectar, bytes |
logs/bt_transfer.jsonl | Log de transferência de arquivos do BerryTransfer |
logs/last_start.json | Instantâneo da configuração de inicialização (host, porta, token, pid) |