Primeira versão estável: valida ponta a ponta contra hardware real (Evil
Twin PSK e Enterprise, WPS, quebra com regras/máscara, relatório) e fecha
o roadmap de 0.1.0 quase inteiro. Changelog completo em CHANGELOG.md.
- Cargo.toml (workspace + app desktop) e tauri.conf.json: 0.1.0 → 1.0.0.
- README/ROADMAP (EN+PT-BR): refletem o que de fato existe agora
(regras/máscara, .hc22000, WPS, Evil Twin, relatório), não mais "Next".
- docs/cli.md e docs/interface.md (EN+PT-BR): documentam --rules no
crack e a aba Ataques/relatório da interface.
- app.js/app.css/index.html: telas novas para Evil Twin (PSK e
Enterprise), regras de mutação/máscara na quebra de senha, WPS,
indicador de modo (monitor/gerenciado) movido para baixo do seletor de
interface, e aviso específico quando a placa não entrega captura de
verdade (ver bug de ScanSnapshot.warning no engine).
- Lista de redes/BSSIDs não reordena mais a cada poll: ordem de chegada
como critério de desempate e sinal arredondado em buckets de 4 dBm,
porque reordenar pelo sinal instantâneo fazia as linhas flutuarem de
posição debaixo do cursor a cada atualização.
- "Forçar handshake" religa a captura sozinho se ela tiver sido parada
(esperando o AP reaparecer no canal certo antes de disparar o job, e
travando o alvo numa variável local pra não perder o BSSID se o diálogo
fechar no meio da espera).
- Grid da aba Ataques trocado de CSS grid pra colunas (alvenaria): cards
com alturas muito diferentes na mesma linha deixavam buracos vazios
enormes com align-items:start.
- check-ui-i18n.mjs: ajustes de cobertura para as novas telas.
- engine.rs: expõe Evil Twin (PSK/Enterprise), crack com regras/máscara,
relatório e exportação .hc22000 pros três front-ends (CLI, servidor web
da UI, Tauri). set_monitor() agora solta a interface do NetworkManager
antes de ativar modo monitor e devolve ao desativar — sem isso o NM
reafirma a própria conexão por cima e a captura cai sozinha pouco
depois ("está em modo managed"). Evil Twin grava um arquivo de estado
em disco antes de soltar as interfaces; se o processo morrer no meio
(Ctrl+C sem handler, kill -9, queda de energia), o próximo início do
engine desfaz tudo sozinho (self_heal_eviltwin_leftovers) — sem isso as
duas interfaces ficavam presas em managed=no pro NetworkManager pra
sempre e o Wi-Fi inteiro sumia do painel do sistema. hostapd/hostapd-wpe
que morrem na hora de subir agora reportam a saída real capturada em
log, em vez de um processo "<defunct>" mudo. Novo
ScanSnapshot.warning: avisa quando a sessão roda >12s sem receber
nenhum quadro — sintoma de placa que aceita ativar modo monitor sem
entregar captura de verdade (comum em Wi-Fi interno de notebook).
- sabia-cli (main.rs/web/mod.rs) e o app desktop (Tauri main.rs) ganham
as rotas/comandos equivalentes pra tudo isso.
- report.rs: capa em página A4 cheia com o logo do Sabiá embutido (base64,
funciona offline), sumário com âncoras pra cada seção, cabeçalho/rodapé
corridos via @page margin boxes (seção atual, numeração X/Y, selo "uso
autorizado"), cards de KPI e achados com cor por severidade, tabelas
com cabeçalho/zebra consistentes — paginação em A4 continua feita pelo
Paged.js no navegador (sem depender de Chromium no servidor).
- Vendoriza paged.polyfill.min.js (MIT) — antes era carregado de fora.
- tauri.conf.json: CSP libera frame-src pro preview do relatório embutido
(iframe) no app desktop.
- eviltwin.rs: clona um AP já visto na sessão (SSID aberto) numa segunda
interface, com portal cativo pedindo a senha de novo. A senha só é
aceita se bater de verdade contra o handshake real já capturado
(CrackTarget::verify) — não é um "aceita qualquer coisa", é um oráculo
criptográfico. Exige handshake quebrável já capturado desse BSSID e
autorização explícita, mesma trilha de auditoria dos outros ataques.
- eviltwin_enterprise.rs: variante pra redes WPA2/WPA3-Enterprise
(802.1X) — nelas a credencial viaja no próprio handshake EAP
(PEAP/TTLS-MSCHAPv2), então o cliente autentica sozinho em qualquer AP
que anuncie o SSID, sem portal nem ação humana. Orquestra hostapd-wpe
(não vendorizado — é um patch no build do hostapd); gera certificado
TLS autoassinado e eap_user genérico; parser best-effort do log de
credenciais capturadas. Limitação documentada: cliente que valida a
cadeia de certificado recusa a conexão.
- analysis.rs: achados de segurança (rede aberta, sem PMF, WPS ativo,
possível evil twin real por nome duplicado) e recomendação de canal por
banda com pontuação de interferência/sobreposição.
- crack.rs: dicionário padrão trocado pra wpa-full.txt.gz (rockyou +
Probable-Wordlists top204k mesclados/deduplicados, 9,7M senhas,
comprimido e embutido via LazyLock), PBKDF2 ~640x mais rápido
(paralelização por núcleo + HMAC reaproveitado em vez de reconstruído a
cada iteração), força bruta por máscara (rules.rs::Mask, sintaxe
?d?l?u?s?a) e regras de mutação tipo hashcat (maiúscula, sufixos
numéricos/símbolos, leet simples).
- hashcat.rs: exportação de handshake/PMKID em .hc22000 (individual ou em
lote), pro hashcat de verdade em vez de só o dicionário embutido.
- wps.rs: ataque WPS PIN via reaver (binário real do
reaver-wps-fork-t6x, GPL-2, extraído em tempo de execução) e bully
quando instalado no sistema.
- assets/wordlists/LICENSE.wpa-full documenta a atribuição (CC BY-SA 4.0
do Probable-Wordlists; rockyou.txt como dado de vazamento de uso livre
consolidado em pesquisa de segurança, mesmo padrão do Kali/SecLists).
- eapol.rs: key_info/replay_counter/key_data_len liam little-endian; são
big-endian (802.1X segue ordem de rede), então handshakes reais nunca
fechavam mesmo com deauth funcionando. testutil.rs e os geradores de
quadro de teste corrigidos junto, mais um teste contra bytes de wire
reais (não só contra o próprio encoder).
- inject.rs: deauth/disassoc agora grava Sequence Control crescente por
quadro — reenviar o mesmo quadro era descartado como duplicata pelo
driver/AP depois do primeiro envio.
- dot11.rs/scan.rs: parsing de AP/cliente bem mais completo (PMF
obrigatório, WPS detalhado, fabricante por OUI, país, largura de banda,
padrão PHY, privacidade) e histórico de sinal/eventos por cliente.
- handshake.rs/ccmp.rs: deriva a Temporal Key (CCMP) quando a senha é
quebrada, o suficiente pra decifrar o tráfego em claro do par
(BSSID, estação) cujo handshake foi capturado.
- CI (Windows/macOS): imports e `parse_mac` usados só no código Linux agora
são `#[cfg(target_os = "linux")]` (e `Duration`/`Instant` também em `test`),
eliminando os unused que viravam erro com `-D warnings` fora do Linux.
- Release (RPM): `productName` passa a "Sabia" (ASCII) — o bundler de rpm
recusa o acento; janela e interface seguem exibindo "Sabiá". Igual ao Guará.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Logo oficial (sabia.png) e conjunto de ícones do app desktop.
- Interface em português e inglês: tradutor por observação do DOM, seletor
de idioma e checagem de cobertura de tradução no CI.
- CI/CD com caches (rust-cache, .deb do Tauri em cache) e pipeline de release
multiplataforma (CLI em 5 alvos + app desktop via tauri-action), templates
de issue/PR.
- Suíte de testes de integração do sabia-core (scan e2e, handshake/crack
4-way e PMKID, pcap, trilha de auditoria) — 46 testes verdes.
- Documentação completa pt/en: README, ROADMAP, SECURITY, CONTRIBUTING,
CHANGELOG e docs/ (cli, interface, arquitetura), com enquadramento de uso
autorizado.
- Correções de clippy (-D warnings) e formatação em toda a árvore.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>