
Assistente de red team com IA local no seu telefone
Um agente autônomo de teste de penetração que roda inteiramente em um smartphone. Coloque o telefone em uma rede, afaste-se, e ele descobre hosts, mapeia serviços, encontra vulnerabilidades e gera um relatório de pentest — tudo sem conectividade com a nuvem.
░█▄░█ █ █▀▀ █░█ ▀█▀ █▀▀ █▀█ ▄▀█ █░█░█ █░░ █▀▀ █▀█
░█░▀█ █ █▄█ █▀█ ░█░ █▄▄ █▀▄ █▀█ ▀▄▀▄▀ █▄▄ ██▄ █▀▄ v0.1.0
AUTONOMOUS MOBILE PENTEST AGENT
OnePlus 8 · NetHunter · LFM2.5-1.2B · OpenCL GPU
Teste de penetração (pentest) é a prática de testar a segurança de uma rede de computadores simulando um ataque — com a permissão explícita do proprietário da rede. Pentesters profissionais são contratados para encontrar vulnerabilidades antes que atacantes reais o façam.
O Nightcrawler automatiza esse processo em um telefone. Ele usa um pequeno modelo de IA (LFM2.5-1.2B-Instruct-Heretic, 1,2 bilhão de parâmetros) rodando localmente na GPU do telefone para decidir o que fazer em seguida — qual host sondar, qual ferramenta usar, o que procurar. Nenhuma conexão com a internet ou API em nuvem é necessária.
▶️ Assista ao Nightcrawler em ação no Instagram
O agente opera como um pentester humano paciente — ele rotaciona entre hosts, faz uma pequena ação por turno e constrói conhecimento gradualmente ao longo de horas. Isso o torna muito mais difícil de detectar do que scanners de vulnerabilidade tradicionais que atacam todos os hosts de uma vez.
┌──────────────────────────────────────────────────────────┐
│ PHONE (OnePlus 8) │
│ │
│ ┌─────────────┐ ┌──────────────────┐ │
│ │ LFM2.5 │ │ Agent Loop │ │
│ │ 1.2B model │◄───►│ (main.py) │ │
│ │ on GPU │ │ Decides what │ │
│ │ (:8080) │ │ to do next │ │
│ └─────────────┘ └────────┬─────────┘ │
│ │ │
│ ┌────────▼─────────┐ │
│ │ Scope Proxy │ ← Safety layer │
│ │ Validates every │ Blocks out- │
│ │ command before │ of-scope │
│ │ execution │ actions │
│ └────────┬─────────┘ │
│ │ │
│ ┌────────▼─────────┐ │
│ │ Kali MCP Server │ ← Runs the │
│ │ nmap, curl, │ actual │
│ │ smbclient, ... │ commands │
│ └──────────────────┘ │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Web Dashboard │ │ SQLite DB │ │
│ │ (:8888) │ │ Hosts, vulns, │ │
│ │ Monitor & steer │ │ creds, commands │ │
│ └──────────────────┘ └──────────────────┘ │
└──────────────────────────────────────────────────────────┘
Para o design completo do sistema, consulte docs/ARCHITECTURE.md.
Consulte docs/FEATURES.md para a referência completa de recursos.
Toda a inferência via OpenCL na GPU Adreno 650:
Nota: O Android limita a GPU quando alimentado por bateria (desaceleração de 6x). O Nightcrawler inclui um daemon de governança de GPU que força o desempenho máximo e limita automaticamente a ≤15% de bateria.
# 1. Instalação (dentro do chroot do Kali NetHunter)
bash INSTALL.sh
# 2. Aguarde o llama-server iniciar (~5 min após o boot)
curl -s http://127.0.0.1:8080/health # Deve retornar {"status":"ok"}
# 3. Inicie todos os serviços
bash scripts/run-36h.sh
# 4. Abra o painel web (de qualquer dispositivo na sua rede Tailscale)
# https://<seu-hostname-tailscale>:8888
NC_DRY_RUN=1 python3 main.py
Isso usa um servidor Kali simulado para que você possa testar o loop do agente sem executar comandos reais de rede.
kali-server-mcp --port 5000 &
python3 scope_proxy.py --config config.yaml --port 8800 --upstream http://127.0.0.1:5000 &
bash scripts/webui-daemon.sh start
python3 main.py &
Edite config.yaml antes da implantação:
mission:
id: "CLIENT-YYYY-XXX" # Seu ID de engajamento
scope:
networks: ["auto"] # "auto" = detectar a partir de wlan0 na inicialização
excluded_hosts: ["auto"] # "auto" = gateway + IP próprio
excluded_ports: [502, 503] # Portas SCADA/ICS que nunca devem ser tocadas
authorization: "ROE-YYYY-XXX.pdf"
max_runtime_hours: 0 # 0 = sem limite
model:
local:
ctx_size: 8192
port: 8080
Detecção dinâmica de escopo significa zero mudanças de configuração ao mover entre redes — o agente lê a sub-rede atual de wlan0 na inicialização.
nightcrawler/
├── main.py # Ponto de entrada
├── config.yaml # Escopo da missão + configuração do modelo
├── scope_proxy.py # Proxy de imposição de escopo
├── INSTALL.sh # Instalador
│
├── agent/ # Lógica central do agente
│ ├── loop.py # Loop de decisão + recuperação de erros
│ ├── planner.py # Máquina de estados de fase (recon → exploit)
│ ├── llm_client.py # Cliente de API LLM (llama.cpp / remoto)
│ ├── db.py # Backend SQLite (hosts, vulns, creds)
│ ├── host_memory.py # Observações por host + auto-tagging
│ ├── cve_db.py # Banco de dados CVE com 24.956 entradas
│ ├── attack_planner.py # Diretrizes estratégicas para a fase de exploração
│ ├── output_parser.py # Extrai dados estruturados da saída das ferramentas
│ ├── offline_manager.py # Máquina de estados do pipeline de invasão WiFi
│ ├── net_detect.py # Auto-detecção de rede a partir de wlan0
│ ├── cover_traffic.py # Mistura furtiva com tráfego web realista
│ ├── passive_capture.py # tcpdump em segundo plano para tráfego de broadcast
│ └── ...
│
├── proxy/ # Componentes de imposição de escopo
│ ├── scope.py # Validação de IP/porta/host
│ ├── rate_limiter.py # Limitação de taxa de comandos + jitter
│ └── command_filter.py # Lista de bloqueio de comandos destrutivos
│
├── webui/ # Painel web (Flask)
│ ├── server.py # API + middleware furtivo
│ └── templates/index.html # UI do painel
│
├── data/ # Arquivos de dados estáticos
│ ├── cve_exploits.json # Mapeamentos CVE→comando de exploração
│ └── playbooks.json # 27 playbooks de ataque em várias etapas
│
├── prompts/ # Modelos de prompt LLM (recarregáveis a quente)
├── scripts/ # Scripts operacionais (iniciar, parar, watchdogs)
├── tests/ # Suítes de teste (API, UI, modo offline)
├── kernels/ # Módulos de driver WiFi + documentação do kernel
├── simulation/ # Servidor simulado para execução de teste
├── docs/ # Arquitetura, configuração de GPU, recursos
├── logs/ # Dados de execução (ignorados pelo git)
└── models/ # Arquivos de modelo (ignorados pelo git)
O agente usa um loop simples, mas eficaz:
REASONING: ... COMMAND: ...O modelo de 1,2B tem uma taxa de sucesso de comando de ~50% (inerente ao seu tamanho). O agente compensa com:
O painel em :8888 fornece monitoramento e controle em tempo real:
O painel é filtrado por furtividade: ele falsifica cabeçalhos nginx e retorna 404s vazios para conexões da rede alvo.
De 72+ horas de operação autônoma em múltiplas redes:
Contribuições são bem-vindas! Consulte CONTRIBUTING.md para diretrizes.
# Clone o repositório
git clone https://github.com/garagehq/nightcrawler.git
cd nightcrawler
# Modo de execução de teste (sem comandos reais, sem necessidade de hardware)
NC_DRY_RUN=1 python3 main.py
# Execute os testes
python3 -m pytest tests/
Esta ferramenta é apenas para testes de penetração autorizados. Você deve ter permissão por escrito (Regras de Engajamento) do proprietário da rede antes de implantar o Nightcrawler. Uso não autorizado contra redes que você não possui ou não tem permissão para testar é ilegal.
MIT — consulte LICENSE para detalhes.
Se você gosta deste projeto, pode me pagar um café ☕:
| Termo | O que significa |
|---|
| Drop box | Um dispositivo deixado em uma rede alvo para realizar testes autonomamente |
| Escopo | O conjunto de redes/hosts que você está autorizado a testar |
| Regras de Engajamento (ROE) | Um documento legal especificando o que você tem permissão para fazer |
| Furtividade | Técnicas para evitar detecção por monitoramento de rede (IDS/IPS) |
| MCP | Model Context Protocol — uma interface padrão para uso de ferramentas por IA |
| C2 | Command and Control — o painel web para monitorar e direcionar o agente |
| Modelo | Quantização | Velocidade de Prompt | Velocidade de Geração |
|---|
| LFM2.5-1.2B-Instruct-Heretic (produção) | Q8_0 | 115 tok/s | 13 tok/s |
| Qwen3.5-0.8B | Q8_0 | 30,5 tok/s | 6,3 tok/s |
| Qwen3.5-4B | Q4_0 | 10,1 tok/s | 2,0 tok/s |