# Arquitetura [English](../architecture.md) · **Português** Dois crates e um app: ``` crates/sabia-core toda a lógica (biblioteca) crates/sabia-cli binário `sabia` (CLI + servidor local da UI) apps/gui interface (ui/ = HTML/CSS/JS; src-tauri/ = app desktop) ``` A CLI e o app desktop são clientes finos: ambos chamam o `Engine` do núcleo. A UI do navegador (`sabia ui`) e a do Tauri carregam o mesmo `apps/gui/ui/`. ## `sabia-core` | Módulo | Papel | |---|---| | `engine.rs` | Orquestra tudo e expõe a API que CLI e GUI consomem. | | `iface.rs`, `netlink.rs` | Descobre interfaces e canais; liga/desliga modo monitor por netlink/`iw`. | | `radiotap.rs` | Parsing do cabeçalho radiotap; banda e canal. | | `dot11.rs` | Parsing de quadros 802.11 (gerenciamento: beacon, probe). | | `eapol.rs` | Parsing do EAPOL e dos campos do 4-way handshake. | | `handshake.rs` | Monta o handshake (ANonce, SNonce, MIC, PMKID) a partir dos quadros. | | `crack.rs` | Deriva PMK (PBKDF2-HMAC-SHA1) e PTK, confere MIC e PMKID. | | `scan.rs` | Percorre canais e agrega APs e clientes vistos. | | `capture.rs`, `inject.rs` | Captura crua por AF_PACKET; injeção de quadros (deauth). | | `pcapreader.rs`, `pcapwriter.rs` | Leitura e escrita de `.pcap`. | | `audit.rs` | Trilha de auditoria local encadeada por hash. | | `doctor.rs` | Diagnóstico de privilégios, ferramentas e interfaces. | | `update.rs` | Auto-atualização por releases do Gitea (curl + SHA-256). | | `error.rs`, `testutil.rs` | Tipo de erro compartilhado; ajudantes de teste. | ## Plataforma Captura e modo monitor são **Linux** (`AF_PACKET` + netlink). Parsing (`radiotap`, `dot11`, `eapol`, `handshake`), quebra (`crack`) e `.pcap` são multiplataforma, por serem offline — por isso os testes rodam em Linux no CI. ## Transporte da UI `sabia ui` sobe um servidor em `127.0.0.1` protegido por um token gerado na hora; serve `index.html`/`app.css`/`app.js`/`logo.png` embutidos no binário e uma API JSON. O app Tauri usa os mesmos arquivos, chamando o `Engine` direto por comandos Tauri em vez de HTTP.