Merge pull request #10 from lucasrguerra/docs/english-primary
Docs: English as the main language, Portuguese in *.pt-BR.md
This commit is contained in:
16 files changed
+1192
-369
No files matched your search
+82
-80
@@ -1,118 +1,120 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
Formato baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/); versões seguem SemVer.
|
[English](CHANGELOG.md) · [Português](CHANGELOG.pt-BR.md)
|
||||||
|
|
||||||
|
Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow SemVer.
|
||||||
|
|
||||||
## [1.0.0] - 2026-10-19
|
## [1.0.0] - 2026-10-19
|
||||||
|
|
||||||
### Adicionado
|
### Added
|
||||||
- **Sistemas de arquivos com metadados:** ext4 (inodes apagados e cópias antigas no diário), HFS+ (sobras de nós e diário), Btrfs (versões antigas das árvores; extensões zlib, zstd e lzo), XFS (inodes liberados e nomes de entradas liberadas) e APFS (instantâneos e nós antigos). ReFS ainda é só detectado.
|
- **File systems with metadata:** ext4 (deleted inodes and old copies in the journal), HFS+ (node leftovers and journal), Btrfs (old versions of the trees; zlib, zstd and lzo extents), XFS (freed inodes and names of freed entries) and APFS (snapshots and old nodes). ReFS is still only detected.
|
||||||
- **Volumes cifrados:** BitLocker (senha, chave de recuperação, .BEK, chave limpa), LUKS1/LUKS2 e FileVault 2 (Core Storage) abrem com a senha ou a chave e são varridos por dentro. As senhas nunca vão para o arquivo de sessão.
|
- **Encrypted volumes:** BitLocker (password, recovery key, .BEK, clear key), LUKS1/LUKS2 and FileVault 2 (Core Storage) open with the password or key and are scanned inside. Passwords are never written to the session file.
|
||||||
- **RAID e LVM:** RAID 0, 1, 4, 5, 6, 10 e linear a partir de superblocos do mdadm, inclusive degradado; descoberta automática de nível, faixa, layout e ordem quando não há metadados; LVM2 (linear, em faixas, espelhado e RAID).
|
- **RAID and LVM:** RAID 0, 1, 4, 5, 6, 10 and linear from mdadm superblocks, including degraded; automatic discovery of level, stripe size, layout and order when there is no metadata; LVM2 (linear, striped, mirrored and RAID).
|
||||||
- **Imagens forenses:** leitura de E01/Ex01 e AFF4; gravação de E01 e AFF4; comando `guara verify`.
|
- **Forensic images:** reading of E01/Ex01 and AFF4; writing of E01 and AFF4; `guara verify` command.
|
||||||
- **Carving:** JPEG fragmentado remontado (até três fragmentos), reconstrução do índice de MP4/MOV sem moov (H.264/HEVC, com vídeo de referência) e 24 formatos reconhecidos pela estrutura.
|
- **Carving:** fragmented JPEG reassembled (up to three fragments), index reconstruction for MP4/MOV without moov (H.264/HEVC, with a reference video) and 24 formats recognized by structure.
|
||||||
- **Interface:** campos de senha, RAID, vídeo de referência e formato da imagem.
|
- **Interface:** fields for password, RAID, reference video and image format.
|
||||||
|
|
||||||
### Corrigido
|
### Fixed
|
||||||
- Abrir de novo uma sessão recente já aberta não cria mais cópias iguais na aba de sessões.
|
- Reopening a recent session that is already open no longer creates identical copies in the sessions tab.
|
||||||
|
|
||||||
### Limitações
|
### Limitations
|
||||||
- Storage Spaces e ReFS (metadados) não suportados; XFS e APFS testados com exclusões simuladas; áudio não é reconstruído em MP4 sem moov.
|
- Storage Spaces and ReFS (metadata) are not supported; XFS and APFS tested with simulated deletions; audio is not reconstructed in MP4 without moov.
|
||||||
|
|
||||||
## [0.6.0] - 2026-10-18
|
## [0.6.0] - 2026-10-18
|
||||||
|
|
||||||
### Adicionado
|
### Added
|
||||||
- **Saúde do disco no estilo do CrystalDiskInfo:** a tela do dispositivo mostra o estado (Bom, Atenção, Ruim) com a % de vida útil restante em SSD, temperatura, horas ligado, vezes ligado, total lido e total gravado. Também traz a ficha do dispositivo (modelo, firmware, nº de série, interface, modo de transferência, capacidade, rotação, formato e recursos como TRIM) e a tabela completa de atributos SMART, com ID, valor atual, pior, limite e bruto, e um indicador por atributo. Funciona com discos ATA/SATA e NVMe (nos NVMe, os campos do log de saúde viram a tabela).
|
- **CrystalDiskInfo-style disk health:** the device screen shows the status (Good, Caution, Bad) with the % of remaining life on SSDs, temperature, power-on hours, power cycles, total read and total written. It also shows the device sheet (model, firmware, serial number, interface, transfer mode, capacity, rotation, form factor and features such as TRIM) and the full table of SMART attributes, with ID, current value, worst, threshold and raw value, and an indicator per attribute. Works with ATA/SATA and NVMe disks (on NVMe, the health log fields become the table).
|
||||||
- **Partições:** ao abrir uma partição (`/dev/sda1`, `/dev/nvme0n1p2`, `/dev/disk2s1`), o SMART é lido do disco que a contém, e a tela avisa isso.
|
- **Partitions:** when opening a partition (`/dev/sda1`, `/dev/nvme0n1p2`, `/dev/disk2s1`), SMART is read from the disk that contains it, and the screen says so.
|
||||||
- **Comando `guara health`** no terminal, com saída legível ou `--json`.
|
- **`guara health` command** in the terminal, with readable output or `--json`.
|
||||||
|
|
||||||
### Alterado
|
### Changed
|
||||||
- Um atributo SMART com valor normalizado no limite de falha (ou abaixo dele) agora marca o disco como "Ruim", mesmo que a autoavaliação geral ainda passe.
|
- A SMART attribute with a normalized value at or below the failure threshold now marks the disk as "Bad", even if the overall self-assessment still passes.
|
||||||
- **Nova logo:** a cabeça do lobo-guará recortada das trilhas de um disco, inteiras de um lado (recuperado) e quebradas do outro (perdido), nas cores do app. Na interface ela acompanha o tema escolhido (claro ou escuro).
|
- **New logo:** the head of a maned wolf cut out of the tracks of a disk, whole on one side (recovered) and broken on the other (lost), in the app colors. In the interface it follows the chosen theme (light or dark).
|
||||||
|
|
||||||
## [0.5.0] - 2026-10-18
|
## [0.5.0] - 2026-10-18
|
||||||
|
|
||||||
### Adicionado
|
### Added
|
||||||
- **Visualizador de bancos de dados:** arquivos SQLite (`.db`, `.sqlite`, `.sqlite3`, `.db3`, `.sdb`, `.sqlitedb`, `.storedata`) abrem na pré-visualização com esquema, tabelas paginadas, blobs e datas reconhecidas. Leitor próprio, só leitura, tolerante a arquivos truncados ou corrompidos. Também **recupera linhas apagadas** a partir do espaço livre das páginas.
|
- **Database viewer:** SQLite files (`.db`, `.sqlite`, `.sqlite3`, `.db3`, `.sdb`, `.sqlitedb`, `.storedata`) open in the preview with schema, paginated tables, blobs and recognized dates. Own reader, read-only, tolerant of truncated or corrupted files. It also **recovers deleted rows** from the free space of pages.
|
||||||
- **Saúde do disco (SMART):** antes de varrer, o Guará consulta o `smartctl` (quando instalado) e o contador de erros do kernel. Se o disco parece com defeito, recomenda criar a imagem primeiro e pede confirmação antes da varredura profunda.
|
- **Disk health (SMART):** before scanning, Guará queries `smartctl` (when installed) and the kernel error counter. If the disk looks faulty, it recommends making the image first and asks for confirmation before the deep scan.
|
||||||
- **Notificação do sistema** quando uma varredura longa ou uma recuperação termina, ou pausa por desconexão.
|
- **System notification** when a long scan or a recovery finishes, or pauses because of a disconnection.
|
||||||
- **Retomar recuperação interrompida:** um diário na pasta de destino faz o Guará pular o que já foi copiado e conferido; o resultado mostra quantos foram pulados.
|
- **Resume an interrupted recovery:** a journal in the destination folder makes Guará skip what was already copied and checked; the result shows how many were skipped.
|
||||||
- **Mapa das fotos com GPS** no painel de detalhes (opcional, usa a internet) e botão para abrir no OpenStreetMap.
|
- **Map of photos with GPS** in the details panel (optional, uses the internet) and a button to open it in OpenStreetMap.
|
||||||
- **Interface em inglês**, com escolha de idioma (Auto, Português, English) na nova janela de Configurações, que também controla notificações e mapas online.
|
- **English interface**, with a language choice (Auto, Português, English) in the new Settings window, which also controls notifications and online maps.
|
||||||
- **Fechar a janela durante a varredura** pergunta se você quer pausar e sair, sair sem pausar ou continuar.
|
- **Closing the window during a scan** asks whether you want to pause and quit, quit without pausing, or continue.
|
||||||
|
|
||||||
### Notas
|
### Notes
|
||||||
- Mensagens de erro vindas do núcleo e o terminal continuam em português.
|
- Error messages coming from the core and the terminal are still in Portuguese.
|
||||||
|
|
||||||
## [0.4.0] - 2026-10-18
|
## [0.4.0] - 2026-10-18
|
||||||
|
|
||||||
### Adicionado
|
### Added
|
||||||
- **Reconexão do disco:** se o disco foi desconectado e voltou com outro nome (por exemplo `/dev/sda` virando `/dev/sdb`), o Guará o reconhece sozinho pelo tamanho e pela impressão digital do conteúdo (primeiro e último MiB) e religa a sessão. Se não conseguir, a tela mostra "Reconectar o disco" e "Escolher a origem…", com a lista dos discos conectados e o selo "mesmo disco". Uma origem com conteúdo diferente é recusada, a menos que você marque "usar mesmo assim" (útil para cópias).
|
- **Disk reconnection:** if the disk was disconnected and came back under another name (for example `/dev/sda` becoming `/dev/sdb`), Guará recognizes it by itself by its size and a fingerprint of the content (first and last MiB) and reattaches the session. If it cannot, the screen shows "Reconnect the disk" and "Choose the source...", with the list of connected disks and a "same disk" badge. A source with different content is refused, unless you tick "use anyway" (useful for copies).
|
||||||
- **Desconexão no meio da varredura:** se as leituras falharem várias vezes seguidas, a varredura pausa sozinha com o ponto exato salvo e avisa para reconectar e continuar, em vez de seguir pulando blocos e terminar com buracos.
|
- **Disconnection in the middle of a scan:** if reads fail several times in a row, the scan pauses by itself with the exact point saved and tells you to reconnect and continue, instead of skipping blocks and finishing with holes.
|
||||||
- **Sessões salvas automaticamente** de tempos em tempos durante a varredura e ao terminar ou pausar, na pasta de configuração do usuário, e listadas em "Recentes" na barra lateral (`guara sessions` no terminal). Gravação atômica, sem risco de corromper a sessão se o programa fechar no meio.
|
- **Sessions saved automatically** from time to time during the scan and when it finishes or pauses, in the user's configuration folder, and listed under "Recent" in the sidebar (`guara sessions` in the terminal). Atomic writes, with no risk of corrupting the session if the program closes midway.
|
||||||
- **Organização ao recuperar:** pastas originais, por tipo, por data (ano e mês) ou tudo na mesma pasta (`--organize` no terminal).
|
- **Organization when recovering:** original folders, by type, by date (year and month) or everything in the same folder (`--organize` in the terminal).
|
||||||
- **Verificação de espaço livre** no destino antes de copiar, com mensagem clara se não couber.
|
- **Free space check** at the destination before copying, with a clear message if it will not fit.
|
||||||
|
|
||||||
### Corrigido
|
### Fixed
|
||||||
- Em sessões pausadas não havia como escolher outra origem; só "Continuar", que falhava sem o disco.
|
- In paused sessions there was no way to choose another source; only "Continue", which failed without the disk.
|
||||||
|
|
||||||
## [0.3.2] - 2026-10-18
|
## [0.3.2] - 2026-10-18
|
||||||
|
|
||||||
### Corrigido
|
### Fixed
|
||||||
- **Travamento ao clicar em um vídeo no app para Linux.** O AppImage traz o WebKitGTK sem os plugins de mídia do GStreamer: ao criar um `<video>` ou `<audio>` o processo da página morria e a janela ficava congelada. Agora o app para Linux nunca cria esses elementos; vídeo e áudio têm o botão "Abrir no player do sistema", que copia o arquivo para uma pasta temporária do usuário e o abre no player padrão (inclusive quando o Guará roda como administrador). No navegador (`guara ui`) e nos demais sistemas o vídeo continua tocando dentro do app, mas só na tela grande, nunca no painel pequeno.
|
- **Freeze when clicking a video in the Linux app.** The AppImage ships WebKitGTK without the GStreamer media plugins: when a `<video>` or `<audio>` was created the page process died and the window froze. Now the Linux app never creates those elements; video and audio have an "Open in system player" button, which copies the file to a temporary folder of the user and opens it in the default player (even when Guará runs as administrator). In the browser (`guara ui`) and on other systems the video still plays inside the app, but only in the large view, never in the small panel.
|
||||||
|
|
||||||
### Alterado
|
### Changed
|
||||||
- Clicar na pré-visualização do painel de detalhes abre a visualização grande (imagem, PDF, documento e demais tipos), agora maior (até 98% da largura e 95% da altura da janela).
|
- Clicking the preview in the details panel opens the large view (image, PDF, document and other types), now larger (up to 98% of the window width and 95% of its height).
|
||||||
|
|
||||||
## [0.3.1] - 2026-10-18
|
## [0.3.1] - 2026-10-18
|
||||||
|
|
||||||
### Adicionado
|
### Added
|
||||||
- Filtros "Ocultar arquivos pequenos (menos de 30 KB)" e "Mais de 1 megapixel" no explorador, para separar fotos de ícones e miniaturas quando há milhares de imagens.
|
- "Hide small files (under 30 KB)" and "Over 1 megapixel" filters in the explorer, to separate photos from icons and thumbnails when there are thousands of images.
|
||||||
|
|
||||||
### Corrigido
|
### Fixed
|
||||||
- Abrir uma sessão salva falhava por inteiro quando a origem (por exemplo `/dev/sdb`) não estava acessível, e a mensagem de erro era vaga. Agora a sessão sempre abre: dá para navegar, exportar e gerar relatório, e o botão "Escolher a origem…" reconecta o disco ou uma imagem para voltar a pré-visualizar e recuperar.
|
- Opening a saved session failed entirely when the source (for example `/dev/sdb`) was not accessible, and the error message was vague. Now the session always opens: you can browse, export and generate a report, and the "Choose the source..." button reconnects the disk or an image to go back to previewing and recovering.
|
||||||
- Mensagens claras quando o arquivo de sessão não pode ser lido (por exemplo, criado como administrador em `/root`) ou não é uma sessão válida.
|
- Clear messages when the session file cannot be read (for example, created as administrator in `/root`) or is not a valid session.
|
||||||
- Teste automático garante que sessões gravadas pela v0.1.0 continuam abrindo.
|
- An automatic test ensures that sessions written by v0.1.0 still open.
|
||||||
- Carving de PNG: texto ASCII logo após um PNG truncado era lido como um bloco de ~1,9 GB e gerava "fotos" gigantes de confiança baixa. Agora o bloco precisa ser plausível (tipo válido, tamanho razoável, dentro do disco) e o arquivo termina no último bloco válido.
|
- PNG carving: ASCII text right after a truncated PNG was read as a block of about 1.9 GB and produced giant low-confidence "photos". Now the block must be plausible (valid type, reasonable size, inside the disk) and the file ends at the last valid block.
|
||||||
- Retomar uma varredura de sessão sem a origem disponível agora avisa na hora, em vez de falhar depois.
|
- Resuming a scan of a session without the source available now warns immediately, instead of failing later.
|
||||||
- Rodando como administrador (sudo/pkexec), as pastas sugeridas passam a ser as do usuário que abriu o Guará e tudo que ele grava (sessões, CSV, relatórios, imagens e arquivos recuperados, com as pastas criadas) fica com o dono e as permissões desse usuário, e não do root.
|
- When running as administrator (sudo/pkexec), the suggested folders are now those of the user who launched Guará, and everything it writes (sessions, CSV, reports, images and recovered files, with the folders created) keeps the owner and permissions of that user, not root.
|
||||||
|
|
||||||
## [0.3.0] - 2026-10-18
|
## [0.3.0] - 2026-10-18
|
||||||
|
|
||||||
### Adicionado
|
### Added
|
||||||
- **Explorador de arquivos:** grade de miniaturas e lista com rolagem virtual (milhares de itens), agrupamento por dia/mês, navegação lateral por tipo, data da foto, pasta, câmera e confiança, seleção com Ctrl/Shift/teclado, painel de detalhes e visualização rápida em tela cheia.
|
- **File explorer:** thumbnail grid and list with virtual scrolling (thousands of items), grouping by day/month, sidebar navigation by type, photo date, folder, camera and confidence, selection with Ctrl/Shift/keyboard, details panel and full-screen quick look.
|
||||||
- **Miniaturas rápidas** geradas no núcleo (JPEG com redução na decodificação, PNG, GIF, BMP, WebP), com orientação EXIF e uso da miniatura embutida quando a imagem está danificada.
|
- **Fast thumbnails** generated in the core (JPEG with downscaling during decoding, PNG, GIF, BMP, WebP), with EXIF orientation and use of the embedded thumbnail when the image is damaged.
|
||||||
- **Metadados:** EXIF (câmera, lente, datas, GPS), PDF, Office/OpenDocument e MP4/MOV; datas de criação, modificação e acesso do NTFS, FAT e exFAT.
|
- **Metadata:** EXIF (camera, lens, dates, GPS), PDF, Office/OpenDocument and MP4/MOV; creation, modification and access dates from NTFS, FAT and exFAT.
|
||||||
- **Perícia:** hashes MD5, SHA-1 e SHA-256, `guara hash`, `guara search` (texto no disco inteiro em UTF-8 e UTF-16), `guara export` (CSV), `guara report` (relatório HTML com cadeia de custódia) e detecção de duplicadas. Tudo também na interface gráfica.
|
- **Forensics:** MD5, SHA-1 and SHA-256 hashes, `guara hash`, `guara search` (text across the whole disk in UTF-8 and UTF-16), `guara export` (CSV), `guara report` (HTML report with chain of custody) and duplicate detection. All of it also in the graphical interface.
|
||||||
- Nova identidade visual: logo de pixels que se juntam num lobo-guará de silhueta lisa.
|
- New visual identity: a pixel logo that comes together into a maned wolf with a smooth silhouette.
|
||||||
|
|
||||||
### Alterado
|
### Changed
|
||||||
- A barra inferior e o painel de progresso não são mais recriados a cada atualização.
|
- The bottom bar and the progress panel are no longer recreated on every update.
|
||||||
- Textos sem travessões.
|
- Text without em dashes.
|
||||||
|
|
||||||
## [0.2.0] - 2026-10-18
|
## [0.2.0] - 2026-10-18
|
||||||
|
|
||||||
### Adicionado
|
### Added
|
||||||
- **Pré-visualização completa:** imagem (zoom), vídeo (MP4 e outros), áudio, PDF (pdf.js incluso, funciona offline), texto, Word/Excel/PowerPoint/OpenDocument, conteúdo de ZIP e hexadecimal; tela cheia com navegação por teclado (↑ ↓ ← → Espaço Esc). O conteúdo é lido sob demanda com suporte a Range, sem gravar em disco.
|
- **Full preview:** image (zoom), video (MP4 and others), audio, PDF (pdf.js included, works offline), text, Word/Excel/PowerPoint/OpenDocument, ZIP contents and hex; full screen with keyboard navigation (↑ ↓ ← → Space Esc). Content is read on demand with Range support, without writing to disk.
|
||||||
- Seletor de tema **Auto / Claro / Escuro**; a escolha é salva e vale também no app reiniciado como administrador.
|
- **Auto / Light / Dark** theme selector; the choice is saved and also applies to the app restarted as administrator.
|
||||||
- Nova identidade visual em verde-azulado, com logo de pixels que se juntam até formar um lobo-guará.
|
- New teal visual identity, with a pixel logo that comes together into a maned wolf.
|
||||||
|
|
||||||
### Corrigido
|
### Fixed
|
||||||
- Reiniciar como administrador no Linux: no AppImage o executável fica num ponto de montagem inacessível ao root; agora usa o próprio `.AppImage`, mostra o motivo se falhar e fecha o app antigo só quando o novo abre.
|
- Restarting as administrator on Linux: in the AppImage the executable sits on a mount point inaccessible to root; now it uses the `.AppImage` itself, shows the reason if it fails and closes the old app only when the new one opens.
|
||||||
- Barra de ações inferior piscava a cada atualização; agora é criada uma vez e só atualiza o texto. O painel de progresso também deixou de ser recriado a cada ciclo.
|
- The bottom action bar flickered on every update; now it is created once and only the text updates. The progress panel also stopped being recreated on every cycle.
|
||||||
- FAT32 em mídias pequenas (menos de 65 525 clusters) não era reconhecido.
|
- FAT32 on small media (fewer than 65,525 clusters) was not recognized.
|
||||||
- O tema não acompanhava a escolha ao abrir como root (o WebView do root usava outro tema do sistema).
|
- The theme did not follow the choice when opened as root (root's WebView used another system theme).
|
||||||
|
|
||||||
## [0.1.0] - 2026-10-18
|
## [0.1.0] - 2026-10-18
|
||||||
|
|
||||||
### Adicionado
|
### Added
|
||||||
- Núcleo em Rust, somente leitura na origem: acesso a dispositivos e imagens (Windows, Linux, macOS).
|
- Rust core, read-only on the source: access to devices and images (Windows, Linux, macOS).
|
||||||
- Leitura de MBR/GPT, detecção de partições perdidas e de espaço não particionado.
|
- Reading of MBR/GPT, detection of lost partitions and unpartitioned space.
|
||||||
- Metadados de NTFS, FAT12/16/32 e exFAT: arquivos apagados com nome, pasta e data.
|
- Metadata from NTFS, FAT12/16/32 and exFAT: deleted files with name, folder and date.
|
||||||
- Carving por estrutura de JPEG, PNG, GIF, BMP, PDF, ZIP e derivados (DOCX, XLSX, PPTX, ODF, EPUB, APK, JAR), MP4/MOV/HEIC, AVI/WAV/WebP, SQLite, 7z, OLE, MP3 e PE.
|
- Structure-aware carving of JPEG, PNG, GIF, BMP, PDF, ZIP and derivatives (DOCX, XLSX, PPTX, ODF, EPUB, APK, JAR), MP4/MOV/HEIC, AVI/WAV/WebP, SQLite, 7z, OLE, MP3 and PE.
|
||||||
- Mapa de blocos livres do ext2/3/4 para varrer apenas o espaço livre.
|
- Free block map of ext2/3/4 to scan only the free space.
|
||||||
- Fusão sem duplicatas e confiança (alta/média/baixa) por arquivo.
|
- Merging without duplicates and per-file confidence (high/medium/low).
|
||||||
- Detecção de volumes cifrados (BitLocker, LUKS) e aviso de TRIM em SSD.
|
- Detection of encrypted volumes (BitLocker, LUKS) and TRIM warning on SSDs.
|
||||||
- Imagem forense tolerante a setores ruins, pausar/retomar varredura e sessões salvas.
|
- Forensic image tolerant of bad sectors, pause/resume of scans and saved sessions.
|
||||||
- Recuperação com SHA-256 e manifesto; recusa de destino no disco de origem.
|
- Recovery with SHA-256 and manifest; refusal of a destination on the source disk.
|
||||||
- CLI `guara` e interface gráfica (Tauri) com tema claro/escuro e layout responsivo; modo `guara ui` no navegador.
|
- `guara` CLI and graphical interface (Tauri) with light/dark theme and responsive layout; `guara ui` mode in the browser.
|
||||||
- CI (Linux/Windows/macOS) e releases automáticas por tag.
|
- CI (Linux/Windows/macOS) and automatic releases by tag.
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
[English](CHANGELOG.md) · **Português**
|
||||||
|
|
||||||
|
Formato baseado em [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/); versões seguem SemVer.
|
||||||
|
|
||||||
|
## [1.0.0] - 2026-10-19
|
||||||
|
|
||||||
|
### Adicionado
|
||||||
|
- **Sistemas de arquivos com metadados:** ext4 (inodes apagados e cópias antigas no diário), HFS+ (sobras de nós e diário), Btrfs (versões antigas das árvores; extensões zlib, zstd e lzo), XFS (inodes liberados e nomes de entradas liberadas) e APFS (instantâneos e nós antigos). ReFS ainda é só detectado.
|
||||||
|
- **Volumes cifrados:** BitLocker (senha, chave de recuperação, .BEK, chave limpa), LUKS1/LUKS2 e FileVault 2 (Core Storage) abrem com a senha ou a chave e são varridos por dentro. As senhas nunca vão para o arquivo de sessão.
|
||||||
|
- **RAID e LVM:** RAID 0, 1, 4, 5, 6, 10 e linear a partir de superblocos do mdadm, inclusive degradado; descoberta automática de nível, faixa, layout e ordem quando não há metadados; LVM2 (linear, em faixas, espelhado e RAID).
|
||||||
|
- **Imagens forenses:** leitura de E01/Ex01 e AFF4; gravação de E01 e AFF4; comando `guara verify`.
|
||||||
|
- **Carving:** JPEG fragmentado remontado (até três fragmentos), reconstrução do índice de MP4/MOV sem moov (H.264/HEVC, com vídeo de referência) e 24 formatos reconhecidos pela estrutura.
|
||||||
|
- **Interface:** campos de senha, RAID, vídeo de referência e formato da imagem.
|
||||||
|
|
||||||
|
### Corrigido
|
||||||
|
- Abrir de novo uma sessão recente já aberta não cria mais cópias iguais na aba de sessões.
|
||||||
|
|
||||||
|
### Limitações
|
||||||
|
- Storage Spaces e ReFS (metadados) não suportados; XFS e APFS testados com exclusões simuladas; áudio não é reconstruído em MP4 sem moov.
|
||||||
|
|
||||||
|
## [0.6.0] - 2026-10-18
|
||||||
|
|
||||||
|
### Adicionado
|
||||||
|
- **Saúde do disco no estilo do CrystalDiskInfo:** a tela do dispositivo mostra o estado (Bom, Atenção, Ruim) com a % de vida útil restante em SSD, temperatura, horas ligado, vezes ligado, total lido e total gravado. Também traz a ficha do dispositivo (modelo, firmware, nº de série, interface, modo de transferência, capacidade, rotação, formato e recursos como TRIM) e a tabela completa de atributos SMART, com ID, valor atual, pior, limite e bruto, e um indicador por atributo. Funciona com discos ATA/SATA e NVMe (nos NVMe, os campos do log de saúde viram a tabela).
|
||||||
|
- **Partições:** ao abrir uma partição (`/dev/sda1`, `/dev/nvme0n1p2`, `/dev/disk2s1`), o SMART é lido do disco que a contém, e a tela avisa isso.
|
||||||
|
- **Comando `guara health`** no terminal, com saída legível ou `--json`.
|
||||||
|
|
||||||
|
### Alterado
|
||||||
|
- Um atributo SMART com valor normalizado no limite de falha (ou abaixo dele) agora marca o disco como "Ruim", mesmo que a autoavaliação geral ainda passe.
|
||||||
|
- **Nova logo:** a cabeça do lobo-guará recortada das trilhas de um disco, inteiras de um lado (recuperado) e quebradas do outro (perdido), nas cores do app. Na interface ela acompanha o tema escolhido (claro ou escuro).
|
||||||
|
|
||||||
|
## [0.5.0] - 2026-10-18
|
||||||
|
|
||||||
|
### Adicionado
|
||||||
|
- **Visualizador de bancos de dados:** arquivos SQLite (`.db`, `.sqlite`, `.sqlite3`, `.db3`, `.sdb`, `.sqlitedb`, `.storedata`) abrem na pré-visualização com esquema, tabelas paginadas, blobs e datas reconhecidas. Leitor próprio, só leitura, tolerante a arquivos truncados ou corrompidos. Também **recupera linhas apagadas** a partir do espaço livre das páginas.
|
||||||
|
- **Saúde do disco (SMART):** antes de varrer, o Guará consulta o `smartctl` (quando instalado) e o contador de erros do kernel. Se o disco parece com defeito, recomenda criar a imagem primeiro e pede confirmação antes da varredura profunda.
|
||||||
|
- **Notificação do sistema** quando uma varredura longa ou uma recuperação termina, ou pausa por desconexão.
|
||||||
|
- **Retomar recuperação interrompida:** um diário na pasta de destino faz o Guará pular o que já foi copiado e conferido; o resultado mostra quantos foram pulados.
|
||||||
|
- **Mapa das fotos com GPS** no painel de detalhes (opcional, usa a internet) e botão para abrir no OpenStreetMap.
|
||||||
|
- **Interface em inglês**, com escolha de idioma (Auto, Português, English) na nova janela de Configurações, que também controla notificações e mapas online.
|
||||||
|
- **Fechar a janela durante a varredura** pergunta se você quer pausar e sair, sair sem pausar ou continuar.
|
||||||
|
|
||||||
|
### Notas
|
||||||
|
- Mensagens de erro vindas do núcleo e o terminal continuam em português.
|
||||||
|
|
||||||
|
## [0.4.0] - 2026-10-18
|
||||||
|
|
||||||
|
### Adicionado
|
||||||
|
- **Reconexão do disco:** se o disco foi desconectado e voltou com outro nome (por exemplo `/dev/sda` virando `/dev/sdb`), o Guará o reconhece sozinho pelo tamanho e pela impressão digital do conteúdo (primeiro e último MiB) e religa a sessão. Se não conseguir, a tela mostra "Reconectar o disco" e "Escolher a origem…", com a lista dos discos conectados e o selo "mesmo disco". Uma origem com conteúdo diferente é recusada, a menos que você marque "usar mesmo assim" (útil para cópias).
|
||||||
|
- **Desconexão no meio da varredura:** se as leituras falharem várias vezes seguidas, a varredura pausa sozinha com o ponto exato salvo e avisa para reconectar e continuar, em vez de seguir pulando blocos e terminar com buracos.
|
||||||
|
- **Sessões salvas automaticamente** de tempos em tempos durante a varredura e ao terminar ou pausar, na pasta de configuração do usuário, e listadas em "Recentes" na barra lateral (`guara sessions` no terminal). Gravação atômica, sem risco de corromper a sessão se o programa fechar no meio.
|
||||||
|
- **Organização ao recuperar:** pastas originais, por tipo, por data (ano e mês) ou tudo na mesma pasta (`--organize` no terminal).
|
||||||
|
- **Verificação de espaço livre** no destino antes de copiar, com mensagem clara se não couber.
|
||||||
|
|
||||||
|
### Corrigido
|
||||||
|
- Em sessões pausadas não havia como escolher outra origem; só "Continuar", que falhava sem o disco.
|
||||||
|
|
||||||
|
## [0.3.2] - 2026-10-18
|
||||||
|
|
||||||
|
### Corrigido
|
||||||
|
- **Travamento ao clicar em um vídeo no app para Linux.** O AppImage traz o WebKitGTK sem os plugins de mídia do GStreamer: ao criar um `<video>` ou `<audio>` o processo da página morria e a janela ficava congelada. Agora o app para Linux nunca cria esses elementos; vídeo e áudio têm o botão "Abrir no player do sistema", que copia o arquivo para uma pasta temporária do usuário e o abre no player padrão (inclusive quando o Guará roda como administrador). No navegador (`guara ui`) e nos demais sistemas o vídeo continua tocando dentro do app, mas só na tela grande, nunca no painel pequeno.
|
||||||
|
|
||||||
|
### Alterado
|
||||||
|
- Clicar na pré-visualização do painel de detalhes abre a visualização grande (imagem, PDF, documento e demais tipos), agora maior (até 98% da largura e 95% da altura da janela).
|
||||||
|
|
||||||
|
## [0.3.1] - 2026-10-18
|
||||||
|
|
||||||
|
### Adicionado
|
||||||
|
- Filtros "Ocultar arquivos pequenos (menos de 30 KB)" e "Mais de 1 megapixel" no explorador, para separar fotos de ícones e miniaturas quando há milhares de imagens.
|
||||||
|
|
||||||
|
### Corrigido
|
||||||
|
- Abrir uma sessão salva falhava por inteiro quando a origem (por exemplo `/dev/sdb`) não estava acessível, e a mensagem de erro era vaga. Agora a sessão sempre abre: dá para navegar, exportar e gerar relatório, e o botão "Escolher a origem…" reconecta o disco ou uma imagem para voltar a pré-visualizar e recuperar.
|
||||||
|
- Mensagens claras quando o arquivo de sessão não pode ser lido (por exemplo, criado como administrador em `/root`) ou não é uma sessão válida.
|
||||||
|
- Teste automático garante que sessões gravadas pela v0.1.0 continuam abrindo.
|
||||||
|
- Carving de PNG: texto ASCII logo após um PNG truncado era lido como um bloco de ~1,9 GB e gerava "fotos" gigantes de confiança baixa. Agora o bloco precisa ser plausível (tipo válido, tamanho razoável, dentro do disco) e o arquivo termina no último bloco válido.
|
||||||
|
- Retomar uma varredura de sessão sem a origem disponível agora avisa na hora, em vez de falhar depois.
|
||||||
|
- Rodando como administrador (sudo/pkexec), as pastas sugeridas passam a ser as do usuário que abriu o Guará e tudo que ele grava (sessões, CSV, relatórios, imagens e arquivos recuperados, com as pastas criadas) fica com o dono e as permissões desse usuário, e não do root.
|
||||||
|
|
||||||
|
## [0.3.0] - 2026-10-18
|
||||||
|
|
||||||
|
### Adicionado
|
||||||
|
- **Explorador de arquivos:** grade de miniaturas e lista com rolagem virtual (milhares de itens), agrupamento por dia/mês, navegação lateral por tipo, data da foto, pasta, câmera e confiança, seleção com Ctrl/Shift/teclado, painel de detalhes e visualização rápida em tela cheia.
|
||||||
|
- **Miniaturas rápidas** geradas no núcleo (JPEG com redução na decodificação, PNG, GIF, BMP, WebP), com orientação EXIF e uso da miniatura embutida quando a imagem está danificada.
|
||||||
|
- **Metadados:** EXIF (câmera, lente, datas, GPS), PDF, Office/OpenDocument e MP4/MOV; datas de criação, modificação e acesso do NTFS, FAT e exFAT.
|
||||||
|
- **Perícia:** hashes MD5, SHA-1 e SHA-256, `guara hash`, `guara search` (texto no disco inteiro em UTF-8 e UTF-16), `guara export` (CSV), `guara report` (relatório HTML com cadeia de custódia) e detecção de duplicadas. Tudo também na interface gráfica.
|
||||||
|
- Nova identidade visual: logo de pixels que se juntam num lobo-guará de silhueta lisa.
|
||||||
|
|
||||||
|
### Alterado
|
||||||
|
- A barra inferior e o painel de progresso não são mais recriados a cada atualização.
|
||||||
|
- Textos sem travessões.
|
||||||
|
|
||||||
|
## [0.2.0] - 2026-10-18
|
||||||
|
|
||||||
|
### Adicionado
|
||||||
|
- **Pré-visualização completa:** imagem (zoom), vídeo (MP4 e outros), áudio, PDF (pdf.js incluso, funciona offline), texto, Word/Excel/PowerPoint/OpenDocument, conteúdo de ZIP e hexadecimal; tela cheia com navegação por teclado (↑ ↓ ← → Espaço Esc). O conteúdo é lido sob demanda com suporte a Range, sem gravar em disco.
|
||||||
|
- Seletor de tema **Auto / Claro / Escuro**; a escolha é salva e vale também no app reiniciado como administrador.
|
||||||
|
- Nova identidade visual em verde-azulado, com logo de pixels que se juntam até formar um lobo-guará.
|
||||||
|
|
||||||
|
### Corrigido
|
||||||
|
- Reiniciar como administrador no Linux: no AppImage o executável fica num ponto de montagem inacessível ao root; agora usa o próprio `.AppImage`, mostra o motivo se falhar e fecha o app antigo só quando o novo abre.
|
||||||
|
- Barra de ações inferior piscava a cada atualização; agora é criada uma vez e só atualiza o texto. O painel de progresso também deixou de ser recriado a cada ciclo.
|
||||||
|
- FAT32 em mídias pequenas (menos de 65 525 clusters) não era reconhecido.
|
||||||
|
- O tema não acompanhava a escolha ao abrir como root (o WebView do root usava outro tema do sistema).
|
||||||
|
|
||||||
|
## [0.1.0] - 2026-10-18
|
||||||
|
|
||||||
|
### Adicionado
|
||||||
|
- Núcleo em Rust, somente leitura na origem: acesso a dispositivos e imagens (Windows, Linux, macOS).
|
||||||
|
- Leitura de MBR/GPT, detecção de partições perdidas e de espaço não particionado.
|
||||||
|
- Metadados de NTFS, FAT12/16/32 e exFAT: arquivos apagados com nome, pasta e data.
|
||||||
|
- Carving por estrutura de JPEG, PNG, GIF, BMP, PDF, ZIP e derivados (DOCX, XLSX, PPTX, ODF, EPUB, APK, JAR), MP4/MOV/HEIC, AVI/WAV/WebP, SQLite, 7z, OLE, MP3 e PE.
|
||||||
|
- Mapa de blocos livres do ext2/3/4 para varrer apenas o espaço livre.
|
||||||
|
- Fusão sem duplicatas e confiança (alta/média/baixa) por arquivo.
|
||||||
|
- Detecção de volumes cifrados (BitLocker, LUKS) e aviso de TRIM em SSD.
|
||||||
|
- Imagem forense tolerante a setores ruins, pausar/retomar varredura e sessões salvas.
|
||||||
|
- Recuperação com SHA-256 e manifesto; recusa de destino no disco de origem.
|
||||||
|
- CLI `guara` e interface gráfica (Tauri) com tema claro/escuro e layout responsivo; modo `guara ui` no navegador.
|
||||||
|
- CI (Linux/Windows/macOS) e releases automáticas por tag.
|
||||||
+19
-17
@@ -1,12 +1,14 @@
|
|||||||
# Contribuindo com o Guará
|
# Contributing to Guará
|
||||||
|
|
||||||
Obrigado por ajudar! Regras de ouro:
|
[English](CONTRIBUTING.md) · [Português](CONTRIBUTING.pt-BR.md)
|
||||||
|
|
||||||
1. **Nunca escreva na origem.** Qualquer código que abra um dispositivo deve usar `source::open_path` (somente leitura). PRs que escrevem no disco de origem são recusados.
|
Thanks for helping! Golden rules:
|
||||||
2. **Teste com dados reais.** Novos detectores/leitores precisam de teste que recupera um arquivo conhecido bit a bit (veja `crates/guara-core/tests/` e `scripts/make-fixtures.sh`).
|
|
||||||
3. **Seja honesto sobre confiança.** Se o conteúdo não puder ser validado, a confiança é no máximo média.
|
|
||||||
|
|
||||||
## Fluxo
|
1. **Never write to the source.** Any code that opens a device must use `source::open_path` (read-only). PRs that write to the source disk are rejected.
|
||||||
|
2. **Test with real data.** New detectors/readers need a test that recovers a known file bit for bit (see `crates/guara-core/tests/` and `scripts/make-fixtures.sh`).
|
||||||
|
3. **Be honest about confidence.** If the content cannot be validated, confidence is at most medium.
|
||||||
|
|
||||||
|
## Workflow
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cargo fmt --all
|
cargo fmt --all
|
||||||
@@ -14,26 +16,26 @@ cargo clippy --workspace --all-targets
|
|||||||
cargo test --workspace
|
cargo test --workspace
|
||||||
```
|
```
|
||||||
|
|
||||||
No Linux os testes geram imagens com `mtools`, `ntfs-3g`, `e2fsprogs`, `exfatprogs`, `imagemagick`, `zip` e `python3`. Sem essas ferramentas os testes com imagem são ignorados (defina `GUARA_REQUIRE_FIXTURES=1` para falhar).
|
On Linux the tests build images with `mtools`, `ntfs-3g`, `e2fsprogs`, `exfatprogs`, `imagemagick`, `zip` and `python3`. Without these tools the image tests are skipped (set `GUARA_REQUIRE_FIXTURES=1` to make them fail).
|
||||||
|
|
||||||
Para as imagens de referência externas (BitLocker, FileVault 2, dfvfs, AFF4), rode `scripts/fetch-testdata.sh`; sem elas esses testes são pulados. O teste de BitLocker leva cerca de 75 s.
|
For the external reference images (BitLocker, FileVault 2, dfvfs, AFF4), run `scripts/fetch-testdata.sh`; without them those tests are skipped. The BitLocker test takes about 75 s.
|
||||||
|
|
||||||
## Onde mexer
|
## Where to make changes
|
||||||
|
|
||||||
Mapa dos módulos em [docs/arquitetura.md](docs/arquitetura.md). O que falta e o que é bem-vindo está no [ROADMAP](ROADMAP.md).
|
A map of the modules is in [docs/architecture.md](docs/architecture.md). What is missing and what is welcome is in the [ROADMAP](ROADMAP.md).
|
||||||
|
|
||||||
## Adicionando um formato de arquivo
|
## Adding a file format
|
||||||
|
|
||||||
Detectores simples ficam em `crates/guara-core/src/signatures.rs`; os mais novos, em `formats.rs`. Acrescente o detector em `detect`, o primeiro byte em `might_start`, a extensão em `category_for_ext`/`matches_ext` e um arquivo real ao `scripts/make-fixtures.sh` com teste de bit-exatidão.
|
Simple detectors live in `crates/guara-core/src/signatures.rs`; the newer ones in `formats.rs`. Add the detector to `detect`, the first byte to `might_start`, the extension to `category_for_ext`/`matches_ext` and a real file to `scripts/make-fixtures.sh` with a bit-exactness test.
|
||||||
|
|
||||||
## Adicionando um sistema de arquivos
|
## Adding a file system
|
||||||
|
|
||||||
Crie o leitor em `crates/guara-core/src/fs/`, registre-o em `fs/mod.rs` e traga um teste com imagem real ou de referência. **Não entregamos leitor sem validação**: é por isso que ReFS e Storage Spaces ainda não existem. Imagens pequenas e sem dados pessoais são o melhor presente que se pode dar ao projeto.
|
Create the reader in `crates/guara-core/src/fs/`, register it in `fs/mod.rs` and bring a test with a real or reference image. **We do not ship a reader without validation**: that is why ReFS and Storage Spaces do not exist yet. Small images without personal data are the best gift you can give the project.
|
||||||
|
|
||||||
## Documentação
|
## Documentation
|
||||||
|
|
||||||
Português, sem travessões. Ao mudar um recurso, atualize [docs/suporte.md](docs/suporte.md), o [CHANGELOG](CHANGELOG.md) e, se for o caso, o [ROADMAP](ROADMAP.md).
|
The main version is in English and every file has a Portuguese translation (`*.pt-BR.md`, `docs/pt-BR/`). No em dashes or en dashes. When you change a feature, update both versions (English and Portuguese) of [docs/support.md](docs/support.md), the [CHANGELOG](CHANGELOG.md) and, if applicable, the [ROADMAP](ROADMAP.md).
|
||||||
|
|
||||||
## Commits
|
## Commits
|
||||||
|
|
||||||
Mensagens curtas no imperativo (`corrige leitura de runs esparsos no NTFS`). Uma mudança lógica por PR.
|
Short messages in the imperative (`fix reading of sparse runs in NTFS`). One logical change per PR.
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# Contribuindo com o Guará
|
||||||
|
|
||||||
|
[English](CONTRIBUTING.md) · **Português**
|
||||||
|
|
||||||
|
Obrigado por ajudar! Regras de ouro:
|
||||||
|
|
||||||
|
1. **Nunca escreva na origem.** Qualquer código que abra um dispositivo deve usar `source::open_path` (somente leitura). PRs que escrevem no disco de origem são recusados.
|
||||||
|
2. **Teste com dados reais.** Novos detectores/leitores precisam de teste que recupera um arquivo conhecido bit a bit (veja `crates/guara-core/tests/` e `scripts/make-fixtures.sh`).
|
||||||
|
3. **Seja honesto sobre confiança.** Se o conteúdo não puder ser validado, a confiança é no máximo média.
|
||||||
|
|
||||||
|
## Fluxo
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo fmt --all
|
||||||
|
cargo clippy --workspace --all-targets
|
||||||
|
cargo test --workspace
|
||||||
|
```
|
||||||
|
|
||||||
|
No Linux os testes geram imagens com `mtools`, `ntfs-3g`, `e2fsprogs`, `exfatprogs`, `imagemagick`, `zip` e `python3`. Sem essas ferramentas os testes com imagem são ignorados (defina `GUARA_REQUIRE_FIXTURES=1` para falhar).
|
||||||
|
|
||||||
|
Para as imagens de referência externas (BitLocker, FileVault 2, dfvfs, AFF4), rode `scripts/fetch-testdata.sh`; sem elas esses testes são pulados. O teste de BitLocker leva cerca de 75 s.
|
||||||
|
|
||||||
|
## Onde mexer
|
||||||
|
|
||||||
|
Mapa dos módulos em [docs/pt-BR/arquitetura.md](docs/pt-BR/arquitetura.md). O que falta e o que é bem-vindo está no [ROADMAP](ROADMAP.pt-BR.md).
|
||||||
|
|
||||||
|
## Adicionando um formato de arquivo
|
||||||
|
|
||||||
|
Detectores simples ficam em `crates/guara-core/src/signatures.rs`; os mais novos, em `formats.rs`. Acrescente o detector em `detect`, o primeiro byte em `might_start`, a extensão em `category_for_ext`/`matches_ext` e um arquivo real ao `scripts/make-fixtures.sh` com teste de bit-exatidão.
|
||||||
|
|
||||||
|
## Adicionando um sistema de arquivos
|
||||||
|
|
||||||
|
Crie o leitor em `crates/guara-core/src/fs/`, registre-o em `fs/mod.rs` e traga um teste com imagem real ou de referência. **Não entregamos leitor sem validação**: é por isso que ReFS e Storage Spaces ainda não existem. Imagens pequenas e sem dados pessoais são o melhor presente que se pode dar ao projeto.
|
||||||
|
|
||||||
|
## Documentação
|
||||||
|
|
||||||
|
A versão principal é em inglês e cada arquivo tem uma tradução em português (`*.pt-BR.md`, `docs/pt-BR/`). Sem travessões. Ao mudar um recurso, atualize as duas versões (inglês e português) de [docs/support.md](docs/support.md), do [CHANGELOG](CHANGELOG.md) e, se for o caso, do [ROADMAP](ROADMAP.md).
|
||||||
|
|
||||||
|
## Commits
|
||||||
|
|
||||||
|
Mensagens curtas no imperativo (`corrige leitura de runs esparsos no NTFS`). Uma mudança lógica por PR.
|
||||||
@@ -1,132 +1,134 @@
|
|||||||
<p align="center"><img src="apps/gui/ui/guara-logo.svg" width="360" alt="Guará"></p>
|
<p align="center"><img src="apps/gui/ui/guara-logo.svg" width="360" alt="Guará"></p>
|
||||||
<h1 align="center">Guará</h1>
|
<h1 align="center">Guará</h1>
|
||||||
<p align="center">Recuperação de arquivos livre e gratuita para HD, SSD e pendrive.<br>Terminal e interface gráfica · Windows, Linux e macOS · somente leitura na origem.</p>
|
<p align="center">Free file recovery for hard drives, SSDs and USB sticks.<br>Terminal and graphical interface · Windows, Linux and macOS · read-only on the source.</p>
|
||||||
|
|
||||||
<p align="center"><a href="docs/suporte.md">O que suporta</a> · <a href="docs/cli.md">Terminal</a> · <a href="docs/arquitetura.md">Arquitetura</a> · <a href="ROADMAP.md">Roadmap</a> · <a href="CHANGELOG.md">Changelog</a></p>
|
<p align="center"><a href="docs/support.md">What it supports</a> · <a href="docs/cli.md">Terminal</a> · <a href="docs/architecture.md">Architecture</a> · <a href="ROADMAP.md">Roadmap</a> · <a href="CHANGELOG.md">Changelog</a></p>
|
||||||
|
|
||||||
|
<p align="center"><b>English</b> · <a href="README.pt-BR.md">Português</a></p>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
O Guará junta, numa única varredura, o que ferramentas como Recuva, PhotoRec, TestDisk e Disk Drill fazem separadamente:
|
In a single scan, Guará does what tools like Recuva, PhotoRec, TestDisk and Disk Drill do separately:
|
||||||
|
|
||||||
- **Metadados do sistema de arquivos:** acha arquivos apagados **com nome, pasta e data** em NTFS, FAT12/16/32, exFAT, ext2/3/4, HFS+, Btrfs, XFS e APFS.
|
- **File system metadata:** finds deleted files **with name, folder and date** on NTFS, FAT12/16/32, exFAT, ext2/3/4, HFS+, Btrfs, XFS and APFS.
|
||||||
- **Carving por estrutura** no espaço livre, em partições danificadas e no espaço não particionado. Os detectores leem a estrutura real de dezenas de formatos para saber o **tamanho exato** e a **confiança**.
|
- **Structure-aware carving** in free space, damaged partitions and unpartitioned space. The detectors read the real structure of dozens of formats to learn the **exact size** and a **confidence** level.
|
||||||
- **Volumes cifrados:** abre BitLocker, LUKS e FileVault 2 com a sua senha ou chave e varre por dentro.
|
- **Encrypted volumes:** opens BitLocker, LUKS and FileVault 2 with your password or key and scans inside.
|
||||||
- **RAID e LVM:** remonta arrays a partir de discos soltos (RAID 0, 1, 4, 5, 6, 10, LVM2), descobrindo nível, faixa e ordem sozinho quando não há metadados.
|
- **RAID and LVM:** reassembles arrays from loose disks (RAID 0, 1, 4, 5, 6, 10, LVM2), working out level, stripe size and order by itself when there is no metadata.
|
||||||
- **Arquivos fragmentados:** remonta JPEG em pedaços e refaz o índice de vídeos MP4/MOV sem `moov`.
|
- **Fragmented files:** reassembles JPEGs stored in pieces and rebuilds the index of MP4/MOV videos that lost their `moov`.
|
||||||
- **Imagens forenses:** lê e grava imagem bruta, **E01/Ex01** e **AFF4**.
|
- **Forensic images:** reads and writes raw images, **E01/Ex01** and **AFF4**.
|
||||||
- **Partições perdidas:** lê MBR/GPT e procura volumes por assinatura onde a tabela falhou.
|
- **Lost partitions:** reads MBR/GPT and searches for volumes by signature where the table failed.
|
||||||
- **Fusão sem duplicatas:** um arquivo achado por mais de um método aparece uma vez, com a melhor evidência.
|
- **Merge without duplicates:** a file found by more than one method appears once, with the best evidence.
|
||||||
- **Confiança por arquivo** (alta, média, baixa): estrutura íntegra, clusters reutilizados, conteúdo zerado (TRIM) ou que não confere com a extensão.
|
- **Per-file confidence** (high, medium, low): intact structure, reused clusters, zeroed content (TRIM) or content that does not match the extension.
|
||||||
|
|
||||||
Matriz completa, com limites de cada item, em [docs/suporte.md](docs/suporte.md).
|
The full matrix, with the limits of each item, is in [docs/support.md](docs/support.md).
|
||||||
|
|
||||||
## Segurança dos dados
|
## Data safety
|
||||||
|
|
||||||
- A origem é aberta **somente para leitura**. Nada no núcleo escreve no dispositivo recuperado.
|
- The source is opened **read-only**. Nothing in the core writes to the device being recovered.
|
||||||
- A recuperação **recusa destinos no mesmo disco** da origem (Linux e macOS).
|
- Recovery **refuses destinations on the same disk** as the source (Linux and macOS).
|
||||||
- **Imagem forense** tolerante a setores ruins, com mapa de erros e hash: trabalhe sempre na cópia de um disco com defeito.
|
- **Forensic imaging** tolerates bad sectors, with an error map and hash: always work on the copy of a failing disk.
|
||||||
- Cada recuperação grava `guara-manifesto.json` com **MD5, SHA-1 e SHA-256** de todos os arquivos.
|
- Every recovery writes `guara-manifesto.json` with the **MD5, SHA-1 and SHA-256** of every file.
|
||||||
- **Senhas nunca vão para o arquivo de sessão.**
|
- **Passwords are never written to the session file.**
|
||||||
|
|
||||||
## Instalação
|
## Installation
|
||||||
|
|
||||||
Baixe o pacote do seu sistema em **[Releases](../../releases)**:
|
Download the package for your system from **[Releases](../../releases)**:
|
||||||
|
|
||||||
| | CLI | App gráfico |
|
| | CLI | Graphical app |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Windows | `guara-*-windows-x86_64.zip` | instalador `.msi` / `.exe` |
|
| Windows | `guara-*-windows-x86_64.zip` | `.msi` / `.exe` installer |
|
||||||
| macOS | `guara-*-macos-{aarch64,x86_64}.tar.gz` | `.dmg` |
|
| macOS | `guara-*-macos-{aarch64,x86_64}.tar.gz` | `.dmg` |
|
||||||
| Linux | `guara-*-linux-{x86_64,aarch64}.tar.gz` | `.AppImage` / `.deb` |
|
| Linux | `guara-*-linux-{x86_64,aarch64}.tar.gz` | `.AppImage` / `.deb` |
|
||||||
|
|
||||||
Cada arquivo tem um `.sha256` ao lado. Compilar do código: `cargo build --release -p guara-cli` (Rust 1.80+).
|
Every file has a `.sha256` next to it. To build from source: `cargo build --release -p guara-cli` (Rust 1.80+).
|
||||||
|
|
||||||
> Os binários ainda **não são assinados**: o Windows SmartScreen e o Gatekeeper do macOS vão avisar. Confira o SHA-256.
|
> The binaries are **not signed yet**: Windows SmartScreen and macOS Gatekeeper will warn you. Check the SHA-256.
|
||||||
|
|
||||||
Ler discos brutos exige privilégios: **administrador** (Windows), `sudo` (Linux e macOS). Mesmo como root, o Guará grava sessões, relatórios e arquivos recuperados com o dono e as permissões do usuário que o abriu.
|
Reading raw disks requires privileges: **administrator** (Windows), `sudo` (Linux and macOS). Even as root, Guará writes sessions, reports and recovered files with the owner and permissions of the user who launched it.
|
||||||
|
|
||||||
## Começando
|
## Getting started
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo guara devices # que discos existem
|
sudo guara devices # which disks exist
|
||||||
sudo guara scan /dev/sdb --session s.json --list # varredura profunda
|
sudo guara scan /dev/sdb --session s.json --list # deep scan
|
||||||
guara recover s.json /mnt/outro-disco/Recuperados # recupera, em OUTRO disco
|
guara recover s.json /mnt/other-disk/Recovered # recover, onto ANOTHER disk
|
||||||
```
|
```
|
||||||
|
|
||||||
Disco com defeito? Faça a imagem primeiro e trabalhe na cópia:
|
Failing disk? Make the image first and work on the copy:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo guara image /dev/sdb /mnt/outro-disco/sdb.img
|
sudo guara image /dev/sdb /mnt/other-disk/sdb.img
|
||||||
guara scan /mnt/outro-disco/sdb.img --session s.json
|
guara scan /mnt/other-disk/sdb.img --session s.json
|
||||||
```
|
```
|
||||||
|
|
||||||
Outros comandos (`inspect`, `health`, `hash`, `search`, `export`, `report`, `verify`, `ui`, volumes cifrados, RAID) estão em **[docs/cli.md](docs/cli.md)**.
|
Other commands (`inspect`, `health`, `hash`, `search`, `export`, `report`, `verify`, `ui`, encrypted volumes, RAID) are in **[docs/cli.md](docs/cli.md)**.
|
||||||
|
|
||||||
## Interface gráfica
|
## Graphical interface
|
||||||
|
|
||||||
App desktop (Tauri) no estilo de um gerenciador de arquivos, pensado para quando o Guará acha milhares de itens. O mesmo front-end roda no navegador com `guara ui`.
|
A desktop app (Tauri) in the style of a file manager, designed for when Guará finds thousands of items. The same front end runs in the browser with `guara ui`.
|
||||||
|
|
||||||
- **Grade de miniaturas** ou **lista**, agrupamento por dia ou mês e rolagem virtual para dezenas de milhares de arquivos.
|
- **Thumbnail grid** or **list**, grouping by day or month and virtual scrolling for tens of thousands of files.
|
||||||
- **Navegação lateral** por tipo, data real da foto (EXIF), pasta, câmera, confiança e GPS, com opção de ocultar duplicadas.
|
- **Sidebar navigation** by type, real photo date (EXIF), folder, camera, confidence and GPS, with an option to hide duplicates.
|
||||||
- **Seleção como no Finder ou Explorer** e **visualização rápida** em tela cheia (Espaço, Enter ou duplo clique).
|
- **Finder or Explorer style selection** and full-screen **quick look** (Space, Enter or double click).
|
||||||
- **Painel de detalhes** com pré-visualização, datas e metadados.
|
- **Details panel** with preview, dates and metadata.
|
||||||
- Campos para senha, RAID, vídeo de referência e formato da imagem; saúde do disco (SMART); pausar e continuar; temas Auto, Claro e Escuro; interface em português e inglês.
|
- Fields for password, RAID, reference video and image format; disk health (SMART); pause and resume; Auto, Light and Dark themes; interface in English and Portuguese, chosen in Settings.
|
||||||
|
|
||||||
**Pré-visualização antes de recuperar**, lida direto do disco sem gravar nada: imagens, vídeo, áudio, PDF, texto, Word/Excel/PowerPoint/OpenDocument, conteúdo de ZIP, **bancos SQLite** (com linhas apagadas) e hexadecimal. No Linux, a reprodução de vídeo depende dos plugins `gstreamer1.0-libav` e `gstreamer1.0-plugins-good`; sem eles, o botão "Abrir no player do sistema" cobre o caso.
|
**Preview before recovering**, read straight from the disk without writing anything: images, video, audio, PDF, text, Word/Excel/PowerPoint/OpenDocument, ZIP contents, **SQLite databases** (with deleted rows) and hex. On Linux, video playback depends on the `gstreamer1.0-libav` and `gstreamer1.0-plugins-good` plugins; without them, the "Open in system player" button covers the case.
|
||||||
|
|
||||||
## Recursos periciais
|
## Forensic features
|
||||||
|
|
||||||
- **Hashes** MD5, SHA-1 e SHA-256 de cada arquivo recuperado, da imagem e do dispositivo.
|
- **Hashes** MD5, SHA-1 and SHA-256 of every recovered file, of the image and of the device.
|
||||||
- **Metadados:** EXIF (câmera, lente, número de série, GPS), PDF, Office e OpenDocument, MP4/MOV.
|
- **Metadata:** EXIF (camera, lens, serial number, GPS), PDF, Office and OpenDocument, MP4/MOV.
|
||||||
- **Linha do tempo:** datas de criação, modificação e acesso do NTFS, FAT e exFAT.
|
- **Timeline:** creation, modification and access dates from NTFS, FAT and exFAT.
|
||||||
- **Busca de texto no disco inteiro**, inclusive espaço livre, em UTF-8 e UTF-16.
|
- **Text search across the whole disk**, including free space, in UTF-8 and UTF-16.
|
||||||
- **CSV** (abre no Excel) e **relatório HTML** imprimível com caso, examinador, origem, partições, resumo e hashes.
|
- **CSV** (opens in Excel) and a printable **HTML report** with case, examiner, source, partitions, summary and hashes.
|
||||||
- **Sessões automáticas** e reconexão: o Guará reconhece o mesmo disco que volta com outro nome.
|
- **Automatic sessions** and reconnection: Guará recognizes the same disk coming back under another name.
|
||||||
- **Detecção de duplicadas** por assinatura de conteúdo.
|
- **Duplicate detection** by content signature.
|
||||||
|
|
||||||
> **Atenção:** o Guará ainda **não foi validado externamente** (por exemplo, nos testes do NIST CFTT) e não tem registro de auditoria nem relatório assinado. Serve bem para recuperação e triagem; para uso em juízo, confira os resultados por outro meio. O caminho para isso está no [ROADMAP](ROADMAP.md).
|
> **Warning:** Guará has **not been externally validated** yet (for example, in the NIST CFTT tests) and has no audit log or signed report. It is well suited to recovery and triage; for use in court, check the results by other means. The path to get there is in the [ROADMAP](ROADMAP.md).
|
||||||
|
|
||||||
## Limites conhecidos
|
## Known limits
|
||||||
|
|
||||||
- **Dados sobrescritos não voltam.** Em SSD com TRIM o disco pode zerar blocos apagados; o Guará avisa, mas não faz milagre.
|
- **Overwritten data does not come back.** On an SSD with TRIM the disk may zero deleted blocks; Guará warns you, but it cannot work miracles.
|
||||||
- **Fragmentos:** só JPEG (até três pedaços) e MP4 sem índice são remontados. Os demais formatos, se fragmentados, saem truncados com confiança baixa.
|
- **Fragments:** only JPEG (up to three pieces) and MP4 without an index are reassembled. Other formats, if fragmented, come out truncated with low confidence.
|
||||||
- **ReFS e Storage Spaces** não são suportados (ReFS só é detectado).
|
- **ReFS and Storage Spaces** are not supported (ReFS is only detected).
|
||||||
- **APFS:** sem mapa de espaço livre. **XFS e APFS:** recuperação de exclusão testada só em simulação.
|
- **APFS:** no free-space map. **XFS and APFS:** deletion recovery tested only in simulation.
|
||||||
- **NTFS:** arquivos comprimidos, EFS e registros muito fragmentados são ignorados ou marcados como incompletos.
|
- **NTFS:** compressed files, EFS and heavily fragmented records are skipped or marked as incomplete.
|
||||||
- **exFAT:** validado com imagem sintética; faltam mídias reais.
|
- **exFAT:** validated with a synthetic image; real media are still missing.
|
||||||
- **Celulares:** o Guará trabalha com mídias de armazenamento e **não** desbloqueia aparelhos nem contorna senhas.
|
- **Phones:** Guará works with storage media and does **not** unlock devices or bypass passwords.
|
||||||
- **Windows e macOS:** o código compila e é testado em CI, mas os testes com imagens reais rodam só no Linux. Relatos de mídias reais são muito bem-vindos.
|
- **Windows and macOS:** the code builds and is tested in CI, but the tests with real images run only on Linux. Reports from real media are very welcome.
|
||||||
- **GUI:** no Linux e macOS o app reinicia inteiro como administrador (`pkexec` ou `osascript`) em vez de usar um processo auxiliar.
|
- **GUI:** on Linux and macOS the app restarts entirely as administrator (`pkexec` or `osascript`) instead of using a helper process.
|
||||||
|
|
||||||
## Para onde vai
|
## Where it is going
|
||||||
|
|
||||||
Resumo do [ROADMAP](ROADMAP.md):
|
Summary of the [ROADMAP](ROADMAP.md):
|
||||||
|
|
||||||
| | |
|
| | |
|
||||||
|---|---|
|
|---|---|
|
||||||
| **Feito** | Metadados de 8 sistemas de arquivos, BitLocker, LUKS, FileVault 2, RAID, LVM, E01, Ex01, AFF4, JPEG fragmentado, MP4 sem índice, leitor de SQLite, SMART |
|
| **Done** | Metadata from 8 file systems, BitLocker, LUKS, FileVault 2, RAID, LVM, E01, Ex01, AFF4, fragmented JPEG, MP4 without an index, SQLite reader, SMART |
|
||||||
| **Próximo** | Registro de auditoria, relatório assinado e em PDF, mapa livre do APFS, testes em Windows e macOS |
|
| **Next** | Audit log, signed and PDF report, APFS free map, tests on Windows and macOS |
|
||||||
| **Depois** | NSRL e listas de hashes, busca em conteúdo, linha do tempo unificada, interpretação de navegadores, registro do Windows e apps de mensagem, ataque de dicionário e força bruta a volumes cifrados |
|
| **Later** | NSRL and hash lists, content search, unified timeline, browser interpretation, Windows registry and messaging apps, dictionary and brute-force attacks on encrypted volumes |
|
||||||
| **Sem imagem de referência** | ReFS e Storage Spaces: só entram com validação |
|
| **No reference image** | ReFS and Storage Spaces: they only land with validation |
|
||||||
| **Longo prazo** | Backups de iOS e Android (iTunes, ADB), OCR, validação NIST CFTT, acesso físico a celulares por exploit de bootloader/chip |
|
| **Long term** | iOS and Android backups (iTunes, ADB), OCR, NIST CFTT validation, physical phone access through bootloader/chip exploits |
|
||||||
|
|
||||||
## Desenvolvimento
|
## Development
|
||||||
|
|
||||||
```
|
```
|
||||||
crates/guara-core núcleo: leitura, partições, sistemas de arquivos, cifra, RAID, carving, recuperação
|
crates/guara-core core: reading, partitions, file systems, encryption, RAID, carving, recovery
|
||||||
crates/guara-cli binário `guara` (CLI + servidor local da UI)
|
crates/guara-cli `guara` binary (CLI + local UI server)
|
||||||
apps/gui interface (ui/ = HTML, CSS e JS; src-tauri/ = app desktop)
|
apps/gui interface (ui/ = HTML, CSS and JS; src-tauri/ = desktop app)
|
||||||
scripts/ imagens de teste e dados de referência
|
scripts/ test images and reference data
|
||||||
docs/ suporte, terminal e arquitetura
|
docs/ support, terminal and architecture
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cargo test --workspace # no Linux gera imagens reais com mtools, ntfs-3g, e2fsprogs
|
cargo test --workspace # on Linux this builds real images with mtools, ntfs-3g, e2fsprogs
|
||||||
scripts/fetch-testdata.sh # opcional: imagens de referência (BitLocker, FileVault 2, dfvfs, AFF4)
|
scripts/fetch-testdata.sh # optional: reference images (BitLocker, FileVault 2, dfvfs, AFF4)
|
||||||
cargo clippy --workspace --all-targets
|
cargo clippy --workspace --all-targets
|
||||||
```
|
```
|
||||||
|
|
||||||
Veja [CONTRIBUTING.md](CONTRIBUTING.md) e [docs/arquitetura.md](docs/arquitetura.md). Versões seguem [SemVer](https://semver.org/lang/pt-BR/); mudanças em [CHANGELOG.md](CHANGELOG.md). Para publicar: `git tag vX.Y.Z && git push --tags` (o workflow `release` compila e publica tudo). Vulnerabilidades: [SECURITY.md](SECURITY.md).
|
See [CONTRIBUTING.md](CONTRIBUTING.md) and [docs/architecture.md](docs/architecture.md). Versions follow [SemVer](https://semver.org/); changes are in [CHANGELOG.md](CHANGELOG.md). To publish: `git tag vX.Y.Z && git push --tags` (the `release` workflow builds and publishes everything). Vulnerabilities: [SECURITY.md](SECURITY.md).
|
||||||
|
|
||||||
## Licença
|
## License
|
||||||
|
|
||||||
[MIT](LICENSE-MIT) ou [Apache-2.0](LICENSE-APACHE), à sua escolha.
|
[MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your option.
|
||||||
+134
@@ -0,0 +1,134 @@
|
|||||||
|
<p align="center"><img src="apps/gui/ui/guara-logo.svg" width="360" alt="Guará"></p>
|
||||||
|
<h1 align="center">Guará</h1>
|
||||||
|
<p align="center">Recuperação de arquivos livre e gratuita para HD, SSD e pendrive.<br>Terminal e interface gráfica · Windows, Linux e macOS · somente leitura na origem.</p>
|
||||||
|
|
||||||
|
<p align="center"><a href="docs/pt-BR/suporte.md">O que suporta</a> · <a href="docs/pt-BR/cli.md">Terminal</a> · <a href="docs/pt-BR/arquitetura.md">Arquitetura</a> · <a href="ROADMAP.pt-BR.md">Roadmap</a> · <a href="CHANGELOG.pt-BR.md">Changelog</a></p>
|
||||||
|
|
||||||
|
<p align="center"><a href="README.md">English</a> · <b>Português</b></p>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
O Guará junta, numa única varredura, o que ferramentas como Recuva, PhotoRec, TestDisk e Disk Drill fazem separadamente:
|
||||||
|
|
||||||
|
- **Metadados do sistema de arquivos:** acha arquivos apagados **com nome, pasta e data** em NTFS, FAT12/16/32, exFAT, ext2/3/4, HFS+, Btrfs, XFS e APFS.
|
||||||
|
- **Carving por estrutura** no espaço livre, em partições danificadas e no espaço não particionado. Os detectores leem a estrutura real de dezenas de formatos para saber o **tamanho exato** e a **confiança**.
|
||||||
|
- **Volumes cifrados:** abre BitLocker, LUKS e FileVault 2 com a sua senha ou chave e varre por dentro.
|
||||||
|
- **RAID e LVM:** remonta arrays a partir de discos soltos (RAID 0, 1, 4, 5, 6, 10, LVM2), descobrindo nível, faixa e ordem sozinho quando não há metadados.
|
||||||
|
- **Arquivos fragmentados:** remonta JPEG em pedaços e refaz o índice de vídeos MP4/MOV sem `moov`.
|
||||||
|
- **Imagens forenses:** lê e grava imagem bruta, **E01/Ex01** e **AFF4**.
|
||||||
|
- **Partições perdidas:** lê MBR/GPT e procura volumes por assinatura onde a tabela falhou.
|
||||||
|
- **Fusão sem duplicatas:** um arquivo achado por mais de um método aparece uma vez, com a melhor evidência.
|
||||||
|
- **Confiança por arquivo** (alta, média, baixa): estrutura íntegra, clusters reutilizados, conteúdo zerado (TRIM) ou que não confere com a extensão.
|
||||||
|
|
||||||
|
Matriz completa, com limites de cada item, em [docs/pt-BR/suporte.md](docs/pt-BR/suporte.md).
|
||||||
|
|
||||||
|
## Segurança dos dados
|
||||||
|
|
||||||
|
- A origem é aberta **somente para leitura**. Nada no núcleo escreve no dispositivo recuperado.
|
||||||
|
- A recuperação **recusa destinos no mesmo disco** da origem (Linux e macOS).
|
||||||
|
- **Imagem forense** tolerante a setores ruins, com mapa de erros e hash: trabalhe sempre na cópia de um disco com defeito.
|
||||||
|
- Cada recuperação grava `guara-manifesto.json` com **MD5, SHA-1 e SHA-256** de todos os arquivos.
|
||||||
|
- **Senhas nunca vão para o arquivo de sessão.**
|
||||||
|
|
||||||
|
## Instalação
|
||||||
|
|
||||||
|
Baixe o pacote do seu sistema em **[Releases](../../releases)**:
|
||||||
|
|
||||||
|
| | CLI | App gráfico |
|
||||||
|
|---|---|---|
|
||||||
|
| Windows | `guara-*-windows-x86_64.zip` | instalador `.msi` / `.exe` |
|
||||||
|
| macOS | `guara-*-macos-{aarch64,x86_64}.tar.gz` | `.dmg` |
|
||||||
|
| Linux | `guara-*-linux-{x86_64,aarch64}.tar.gz` | `.AppImage` / `.deb` |
|
||||||
|
|
||||||
|
Cada arquivo tem um `.sha256` ao lado. Compilar do código: `cargo build --release -p guara-cli` (Rust 1.80+).
|
||||||
|
|
||||||
|
> Os binários ainda **não são assinados**: o Windows SmartScreen e o Gatekeeper do macOS vão avisar. Confira o SHA-256.
|
||||||
|
|
||||||
|
Ler discos brutos exige privilégios: **administrador** (Windows), `sudo` (Linux e macOS). Mesmo como root, o Guará grava sessões, relatórios e arquivos recuperados com o dono e as permissões do usuário que o abriu.
|
||||||
|
|
||||||
|
## Começando
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo guara devices # que discos existem
|
||||||
|
sudo guara scan /dev/sdb --session s.json --list # varredura profunda
|
||||||
|
guara recover s.json /mnt/outro-disco/Recuperados # recupera, em OUTRO disco
|
||||||
|
```
|
||||||
|
|
||||||
|
Disco com defeito? Faça a imagem primeiro e trabalhe na cópia:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo guara image /dev/sdb /mnt/outro-disco/sdb.img
|
||||||
|
guara scan /mnt/outro-disco/sdb.img --session s.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Outros comandos (`inspect`, `health`, `hash`, `search`, `export`, `report`, `verify`, `ui`, volumes cifrados, RAID) estão em **[docs/pt-BR/cli.md](docs/pt-BR/cli.md)**.
|
||||||
|
|
||||||
|
## Interface gráfica
|
||||||
|
|
||||||
|
App desktop (Tauri) no estilo de um gerenciador de arquivos, pensado para quando o Guará acha milhares de itens. O mesmo front-end roda no navegador com `guara ui`.
|
||||||
|
|
||||||
|
- **Grade de miniaturas** ou **lista**, agrupamento por dia ou mês e rolagem virtual para dezenas de milhares de arquivos.
|
||||||
|
- **Navegação lateral** por tipo, data real da foto (EXIF), pasta, câmera, confiança e GPS, com opção de ocultar duplicadas.
|
||||||
|
- **Seleção como no Finder ou Explorer** e **visualização rápida** em tela cheia (Espaço, Enter ou duplo clique).
|
||||||
|
- **Painel de detalhes** com pré-visualização, datas e metadados.
|
||||||
|
- Campos para senha, RAID, vídeo de referência e formato da imagem; saúde do disco (SMART); pausar e continuar; temas Auto, Claro e Escuro; interface em português e inglês.
|
||||||
|
|
||||||
|
**Pré-visualização antes de recuperar**, lida direto do disco sem gravar nada: imagens, vídeo, áudio, PDF, texto, Word/Excel/PowerPoint/OpenDocument, conteúdo de ZIP, **bancos SQLite** (com linhas apagadas) e hexadecimal. No Linux, a reprodução de vídeo depende dos plugins `gstreamer1.0-libav` e `gstreamer1.0-plugins-good`; sem eles, o botão "Abrir no player do sistema" cobre o caso.
|
||||||
|
|
||||||
|
## Recursos periciais
|
||||||
|
|
||||||
|
- **Hashes** MD5, SHA-1 e SHA-256 de cada arquivo recuperado, da imagem e do dispositivo.
|
||||||
|
- **Metadados:** EXIF (câmera, lente, número de série, GPS), PDF, Office e OpenDocument, MP4/MOV.
|
||||||
|
- **Linha do tempo:** datas de criação, modificação e acesso do NTFS, FAT e exFAT.
|
||||||
|
- **Busca de texto no disco inteiro**, inclusive espaço livre, em UTF-8 e UTF-16.
|
||||||
|
- **CSV** (abre no Excel) e **relatório HTML** imprimível com caso, examinador, origem, partições, resumo e hashes.
|
||||||
|
- **Sessões automáticas** e reconexão: o Guará reconhece o mesmo disco que volta com outro nome.
|
||||||
|
- **Detecção de duplicadas** por assinatura de conteúdo.
|
||||||
|
|
||||||
|
> **Atenção:** o Guará ainda **não foi validado externamente** (por exemplo, nos testes do NIST CFTT) e não tem registro de auditoria nem relatório assinado. Serve bem para recuperação e triagem; para uso em juízo, confira os resultados por outro meio. O caminho para isso está no [ROADMAP](ROADMAP.pt-BR.md).
|
||||||
|
|
||||||
|
## Limites conhecidos
|
||||||
|
|
||||||
|
- **Dados sobrescritos não voltam.** Em SSD com TRIM o disco pode zerar blocos apagados; o Guará avisa, mas não faz milagre.
|
||||||
|
- **Fragmentos:** só JPEG (até três pedaços) e MP4 sem índice são remontados. Os demais formatos, se fragmentados, saem truncados com confiança baixa.
|
||||||
|
- **ReFS e Storage Spaces** não são suportados (ReFS só é detectado).
|
||||||
|
- **APFS:** sem mapa de espaço livre. **XFS e APFS:** recuperação de exclusão testada só em simulação.
|
||||||
|
- **NTFS:** arquivos comprimidos, EFS e registros muito fragmentados são ignorados ou marcados como incompletos.
|
||||||
|
- **exFAT:** validado com imagem sintética; faltam mídias reais.
|
||||||
|
- **Celulares:** o Guará trabalha com mídias de armazenamento e **não** desbloqueia aparelhos nem contorna senhas.
|
||||||
|
- **Windows e macOS:** o código compila e é testado em CI, mas os testes com imagens reais rodam só no Linux. Relatos de mídias reais são muito bem-vindos.
|
||||||
|
- **GUI:** no Linux e macOS o app reinicia inteiro como administrador (`pkexec` ou `osascript`) em vez de usar um processo auxiliar.
|
||||||
|
|
||||||
|
## Para onde vai
|
||||||
|
|
||||||
|
Resumo do [ROADMAP](ROADMAP.pt-BR.md):
|
||||||
|
|
||||||
|
| | |
|
||||||
|
|---|---|
|
||||||
|
| **Feito** | Metadados de 8 sistemas de arquivos, BitLocker, LUKS, FileVault 2, RAID, LVM, E01, Ex01, AFF4, JPEG fragmentado, MP4 sem índice, leitor de SQLite, SMART |
|
||||||
|
| **Próximo** | Registro de auditoria, relatório assinado e em PDF, mapa livre do APFS, testes em Windows e macOS |
|
||||||
|
| **Depois** | NSRL e listas de hashes, busca em conteúdo, linha do tempo unificada, interpretação de navegadores, registro do Windows e apps de mensagem, ataque de dicionário e força bruta a volumes cifrados |
|
||||||
|
| **Sem imagem de referência** | ReFS e Storage Spaces: só entram com validação |
|
||||||
|
| **Longo prazo** | Backups de iOS e Android (iTunes, ADB), OCR, validação NIST CFTT, acesso físico a celulares por exploit de bootloader/chip |
|
||||||
|
|
||||||
|
## Desenvolvimento
|
||||||
|
|
||||||
|
```
|
||||||
|
crates/guara-core núcleo: leitura, partições, sistemas de arquivos, cifra, RAID, carving, recuperação
|
||||||
|
crates/guara-cli binário `guara` (CLI + servidor local da UI)
|
||||||
|
apps/gui interface (ui/ = HTML, CSS e JS; src-tauri/ = app desktop)
|
||||||
|
scripts/ imagens de teste e dados de referência
|
||||||
|
docs/ suporte, terminal e arquitetura
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo test --workspace # no Linux gera imagens reais com mtools, ntfs-3g, e2fsprogs
|
||||||
|
scripts/fetch-testdata.sh # opcional: imagens de referência (BitLocker, FileVault 2, dfvfs, AFF4)
|
||||||
|
cargo clippy --workspace --all-targets
|
||||||
|
```
|
||||||
|
|
||||||
|
Veja [CONTRIBUTING.md](CONTRIBUTING.pt-BR.md) e [docs/pt-BR/arquitetura.md](docs/pt-BR/arquitetura.md). Versões seguem [SemVer](https://semver.org/lang/pt-BR/); mudanças em [CHANGELOG.md](CHANGELOG.pt-BR.md). Para publicar: `git tag vX.Y.Z && git push --tags` (o workflow `release` compila e publica tudo). Vulnerabilidades: [SECURITY.md](SECURITY.pt-BR.md).
|
||||||
|
|
||||||
|
## Licença
|
||||||
|
|
||||||
|
[MIT](LICENSE-MIT) ou [Apache-2.0](LICENSE-APACHE), à sua escolha.
|
||||||
+123
-121
@@ -1,178 +1,180 @@
|
|||||||
# Roadmap
|
# Roadmap
|
||||||
|
|
||||||
Onde o Guará esteve, onde está e para onde vai. O que está marcado como feito existe no código e tem teste; o que está planejado é intenção, não promessa, e não tem data.
|
[English](ROADMAP.md) · [Português](ROADMAP.pt-BR.md)
|
||||||
|
|
||||||
Legenda: ✅ feito · 🟡 parcial · 🔜 planejado · 🔭 ideia a longo prazo · ⛔ fora do escopo
|
Where Guará has been, where it is and where it is going. What is marked as done exists in the code and has a test; what is planned is intent, not a promise, and has no date.
|
||||||
|
|
||||||
## Princípios que não mudam
|
Legend: ✅ done · 🟡 partial · 🔜 planned · 🔭 long-term idea · ⛔ out of scope
|
||||||
|
|
||||||
1. **A origem é somente leitura.** Nada no núcleo escreve no dispositivo recuperado.
|
## Principles that do not change
|
||||||
2. **Não entregar sem validar.** Um recurso só entra com teste contra imagem real ou de referência. Por isso ReFS e Storage Spaces ainda não existem: não há imagem de referência para conferir.
|
|
||||||
3. **Confiança honesta.** Se o conteúdo não pôde ser conferido, a confiança é baixa ou média, nunca alta.
|
|
||||||
4. **Livre e auditável.** Código aberto (MIT ou Apache-2.0), sem telemetria, e cada resultado pode ser reproduzido.
|
|
||||||
|
|
||||||
## Histórico
|
1. **The source is read-only.** Nothing in the core writes to the device being recovered.
|
||||||
|
2. **Do not ship without validating.** A feature only lands with a test against a real or reference image. That is why ReFS and Storage Spaces do not exist yet: there is no reference image to check against.
|
||||||
|
3. **Honest confidence.** If the content could not be checked, confidence is low or medium, never high.
|
||||||
|
4. **Free and auditable.** Open source (MIT or Apache-2.0), no telemetry, and every result can be reproduced.
|
||||||
|
|
||||||
| Versão | Data | Marco |
|
## History
|
||||||
|
|
||||||
|
| Version | Date | Milestone |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| 0.1.0 | 2026-10-18 | Núcleo somente leitura, MBR/GPT, NTFS, FAT, exFAT, carving por estrutura, imagem forense, sessões, CLI e interface |
|
| 0.1.0 | 2026-10-18 | Read-only core, MBR/GPT, NTFS, FAT, exFAT, structure-aware carving, forensic image, sessions, CLI and interface |
|
||||||
| 0.2.0 | 2026-10-18 | Pré-visualização completa (imagem, vídeo, áudio, PDF, Office, ZIP, hexadecimal) e temas |
|
| 0.2.0 | 2026-10-18 | Full preview (image, video, audio, PDF, Office, ZIP, hex) and themes |
|
||||||
| 0.3.0 | 2026-10-18 | Explorador com miniaturas, metadados (EXIF, GPS), hashes, busca no disco, CSV, relatório HTML e duplicadas |
|
| 0.3.0 | 2026-10-18 | Explorer with thumbnails, metadata (EXIF, GPS), hashes, disk search, CSV, HTML report and duplicates |
|
||||||
| 0.4.0 | 2026-10-18 | Reconexão de disco, sessões automáticas, organização ao recuperar |
|
| 0.4.0 | 2026-10-18 | Disk reconnection, automatic sessions, organization when recovering |
|
||||||
| 0.5.0 | 2026-10-18 | Visualizador de SQLite com linhas apagadas, SMART, interface em inglês, retomada de recuperação |
|
| 0.5.0 | 2026-10-18 | SQLite viewer with deleted rows, SMART, English interface, recovery resume |
|
||||||
| 0.6.0 | 2026-10-18 | Saúde do disco completa (SMART ATA e NVMe), `guara health`, nova logo |
|
| 0.6.0 | 2026-10-18 | Full disk health (ATA and NVMe SMART), `guara health`, new logo |
|
||||||
| 1.0.0 | 2026-10-19 | ext4, HFS+, Btrfs, XFS, APFS; BitLocker, LUKS, FileVault 2; RAID e LVM; E01, Ex01, AFF4; JPEG fragmentado; MP4 sem moov |
|
| 1.0.0 | 2026-10-19 | ext4, HFS+, Btrfs, XFS, APFS; BitLocker, LUKS, FileVault 2; RAID and LVM; E01, Ex01, AFF4; fragmented JPEG; MP4 without moov |
|
||||||
|
|
||||||
Detalhes de cada versão no [CHANGELOG](CHANGELOG.md).
|
Details of each version in the [CHANGELOG](CHANGELOG.md).
|
||||||
|
|
||||||
## Situação atual (1.0.0) contra o que se espera de uma suíte forense
|
## Current status (1.0.0) against what is expected from a forensic suite
|
||||||
|
|
||||||
### 1. Sistemas de arquivos com metadados
|
### 1. File systems with metadata
|
||||||
|
|
||||||
| Item | Estado | Observação |
|
| Item | Status | Note |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| NTFS, FAT12/16/32, exFAT | ✅ | Desde a 0.1.0. NTFS ignora arquivos comprimidos e EFS |
|
| NTFS, FAT12/16/32, exFAT | ✅ | Since 0.1.0. NTFS skips compressed and EFS files |
|
||||||
| ext2/3/4 | ✅ | Inodes apagados e cópias antigas no diário |
|
| ext2/3/4 | ✅ | Deleted inodes and old copies in the journal |
|
||||||
| HFS+ | ✅ | Sobras de nós da árvore e diário |
|
| HFS+ | ✅ | Tree node leftovers and journal |
|
||||||
| Btrfs | ✅ | Versões antigas das árvores; extensões zlib, zstd e lzo |
|
| Btrfs | ✅ | Old versions of the trees; zlib, zstd and lzo extents |
|
||||||
| XFS | ✅ | Inodes liberados e nomes de entradas liberadas. Testado só com exclusão simulada |
|
| XFS | ✅ | Freed inodes and names of freed entries. Tested only with simulated deletion |
|
||||||
| APFS | 🟡 | Contêiner, mapa de objetos, instantâneos e nós antigos. **Falta o mapa de espaço livre**; exclusão testada só em simulação |
|
| APFS | 🟡 | Container, object map, snapshots and old nodes. **Free-space map is missing**; deletion tested only in simulation |
|
||||||
| ReFS | 🔜 | Hoje só é detectado; a recuperação depende do carving. Falta imagem de referência |
|
| ReFS | 🔜 | Only detected today; recovery depends on carving. Reference image missing |
|
||||||
| Storage Spaces | 🔜 | Não feito. Falta imagem de referência |
|
| Storage Spaces | 🔜 | Not done. Reference image missing |
|
||||||
| NTFS: atributos comprimidos, EFS, lista de atributos | 🔜 | Hoje marcados como incompletos |
|
| NTFS: compressed attributes, EFS, attribute list | 🔜 | Marked as incomplete today |
|
||||||
| Validação de XFS e APFS com exclusão real | 🔜 | Trocar a simulação por imagens de dispositivos reais |
|
| XFS and APFS validation with real deletion | 🔜 | Replace the simulation with images from real devices |
|
||||||
|
|
||||||
### 2. Volumes cifrados
|
### 2. Encrypted volumes
|
||||||
|
|
||||||
| Item | Estado |
|
| Item | Status |
|
||||||
|---|---|
|
|---|---|
|
||||||
| BitLocker (senha, chave de recuperação, .BEK, chave limpa) | ✅ |
|
| BitLocker (password, recovery key, .BEK, clear key) | ✅ |
|
||||||
| LUKS1 e LUKS2 | ✅ |
|
| LUKS1 and LUKS2 | ✅ |
|
||||||
| FileVault 2 (Core Storage) | ✅ |
|
| FileVault 2 (Core Storage) | ✅ |
|
||||||
| FileVault 2 em APFS com volume cifrado | 🔜 |
|
| FileVault 2 on APFS with an encrypted volume | 🔜 |
|
||||||
| Chave a partir de memória (hibernação, despejo de RAM) | 🔭 |
|
| Key from memory (hibernation, RAM dump) | 🔭 |
|
||||||
| Ataque de dicionário e força bruta (BitLocker, LUKS, FileVault, RAR, ZIP e demais volumes/arquivos cifrados) | 🔜 |
|
| Dictionary and brute-force attacks (BitLocker, LUKS, FileVault, RAR, ZIP and other encrypted volumes/files) | 🔜 |
|
||||||
|
|
||||||
Hoje o Guará abre volumes quando você **já tem** a senha ou a chave. Recuperação de senha por dicionário e força bruta (com GPU, como Hashcat) é um recurso planejado, central no uso pericial.
|
Today Guará opens volumes when you **already have** the password or key. Password recovery by dictionary and brute force (with a GPU, like Hashcat) is a planned feature, central to forensic use.
|
||||||
|
|
||||||
### 3. Imagens forenses
|
### 3. Forensic images
|
||||||
|
|
||||||
| Item | Estado |
|
| Item | Status |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Imagem bruta (dd) tolerante a setores ruins, com mapa de erros | ✅ |
|
| Raw image (dd) tolerant of bad sectors, with an error map | ✅ |
|
||||||
| E01 e Ex01: leitura, gravação e `guara verify` | ✅ |
|
| E01 and Ex01: read, write and `guara verify` | ✅ |
|
||||||
| AFF4: leitura e gravação | ✅ |
|
| AFF4: read and write | ✅ |
|
||||||
| Outros contêineres (VMDK, VHD/VHDX, QCOW2, DMG) | 🔜 |
|
| Other containers (VMDK, VHD/VHDX, QCOW2, DMG) | 🔜 |
|
||||||
| Imagem de dispositivo móvel (ver item 7) | 🔭 |
|
| Mobile device image (see item 7) | 🔭 |
|
||||||
|
|
||||||
### 4. Montagem de discos soltos
|
### 4. Assembling loose disks
|
||||||
|
|
||||||
| Item | Estado |
|
| Item | Status |
|
||||||
|---|---|
|
|---|---|
|
||||||
| RAID 0, 1, 4, 5, 6, 10 e linear (mdadm), inclusive degradado | ✅ |
|
| RAID 0, 1, 4, 5, 6, 10 and linear (mdadm), including degraded | ✅ |
|
||||||
| Descoberta automática de nível, faixa, layout e ordem sem metadados | ✅ |
|
| Automatic discovery of level, stripe size, layout and order without metadata | ✅ |
|
||||||
| LVM2 (linear, em faixas, espelhado e RAID) | ✅ |
|
| LVM2 (linear, striped, mirrored and RAID) | ✅ |
|
||||||
| Storage Spaces | 🔜 |
|
| Storage Spaces | 🔜 |
|
||||||
| Btrfs e ZFS multidisco (RAID do próprio sistema de arquivos) | 🔭 |
|
| Multi-disk Btrfs and ZFS (the file system's own RAID) | 🔭 |
|
||||||
| RAID de controladoras proprietárias (Dell PERC, HP Smart Array) | 🔭 |
|
| Proprietary controller RAID (Dell PERC, HP Smart Array) | 🔭 |
|
||||||
|
|
||||||
### 5. Carving
|
### 5. Carving
|
||||||
|
|
||||||
| Item | Estado |
|
| Item | Status |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Detecção pela estrutura real, com tamanho exato e confiança | ✅ Desde a 0.1.0 (JPEG, PNG, GIF, BMP, PDF, ZIP e derivados, MP4/MOV/HEIC, AVI/WAV/WebP, SQLite, 7z, OLE, MP3, PE) e, na 1.0.0, mais 24 (gzip, zstd, Matroska/WebM, Ogg, MPEG-TS, FLV, ASF, MIDI, RAR, ar, SWF, ELF, TIFF, ICO, registro do Windows, EVTX, PST, RTF, pcap e outros) |
|
| Detection by real structure, with exact size and confidence | ✅ Since 0.1.0 (JPEG, PNG, GIF, BMP, PDF, ZIP and derivatives, MP4/MOV/HEIC, AVI/WAV/WebP, SQLite, 7z, OLE, MP3, PE) and, in 1.0.0, 24 more (gzip, zstd, Matroska/WebM, Ogg, MPEG-TS, FLV, ASF, MIDI, RAR, ar, SWF, ELF, TIFF, ICO, Windows registry, EVTX, PST, RTF, pcap and others) |
|
||||||
| JPEG fragmentado remontado (até três fragmentos) | ✅ |
|
| Fragmented JPEG reassembled (up to three fragments) | ✅ |
|
||||||
| MP4/MOV sem `moov` reconstruído (H.264 e HEVC) a partir de um vídeo de referência | ✅ |
|
| MP4/MOV without `moov` rebuilt (H.264 and HEVC) from a reference video | ✅ |
|
||||||
| Fragmentos: mais de três, e formatos além de JPEG (PNG, DOC, ZIP, SQLite) | 🔜 |
|
| Fragments: more than three, and formats beyond JPEG (PNG, DOC, ZIP, SQLite) | 🔜 |
|
||||||
| Reconstrução de vídeo sem referência, áudio em MP4 sem `moov`, vídeos de drone e câmeras de ação em outros contêineres | 🔜 |
|
| Video reconstruction without a reference, audio in MP4 without `moov`, drone and action camera videos in other containers | 🔜 |
|
||||||
| Mais formatos validados por estrutura | 🔜 contínuo |
|
| More formats validated by structure | 🔜 ongoing |
|
||||||
|
|
||||||
### 6. Interpretação de artefatos
|
### 6. Artifact interpretation
|
||||||
|
|
||||||
O Guará **identifica e recupera** esses arquivos, mas só interpreta alguns.
|
Guará **identifies and recovers** these files, but only interprets some of them.
|
||||||
|
|
||||||
| Item | Estado |
|
| Item | Status |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Banco SQLite: esquema, tabelas, blobs, datas e linhas apagadas | ✅ |
|
| SQLite database: schema, tables, blobs, dates and deleted rows | ✅ |
|
||||||
| Metadados: EXIF e GPS, PDF, Office e OpenDocument, MP4/MOV | ✅ |
|
| Metadata: EXIF and GPS, PDF, Office and OpenDocument, MP4/MOV | ✅ |
|
||||||
| Carving de registro do Windows (`regf`), EVTX, PST, pcap | 🟡 só reconhece e recupera, não interpreta |
|
| Carving of Windows registry (`regf`), EVTX, PST, pcap | 🟡 only recognizes and recovers, does not interpret |
|
||||||
| Interpretar o registro do Windows (usuários, programas, USB, histórico de execução) | 🔜 |
|
| Interpret the Windows registry (users, programs, USB, execution history) | 🔜 |
|
||||||
| Histórico, cookies e downloads de navegadores (Chrome, Firefox, Safari) | 🔜 base no leitor de SQLite |
|
| Browser history, cookies and downloads (Chrome, Firefox, Safari) | 🔜 built on the SQLite reader |
|
||||||
| Mensagens, contatos e localização de apps (WhatsApp, Telegram, Signal e outros) | 🔜 base no leitor de SQLite |
|
| Messages, contacts and location from apps (WhatsApp, Telegram, Signal and others) | 🔜 built on the SQLite reader |
|
||||||
| Logs do sistema e eventos do Windows (EVTX) | 🔜 |
|
| System logs and Windows events (EVTX) | 🔜 |
|
||||||
| **Linha do tempo unificada** de todos os artefatos | 🔜 |
|
| **Unified timeline** of all artifacts | 🔜 |
|
||||||
|
|
||||||
### 7. Extração de dispositivos móveis
|
### 7. Mobile device extraction
|
||||||
|
|
||||||
Aqui o salto é de natureza, não de recurso. Hoje o Guará trabalha com **mídias de armazenamento**.
|
Here the leap is one of kind, not of feature. Today Guará works with **storage media**.
|
||||||
|
|
||||||
| Item | Estado |
|
| Item | Status |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Android por ADB e backups | 🔭 |
|
| Android through ADB and backups | 🔭 |
|
||||||
| iOS por backups do iTunes ou Finder (inclusive cifrados com senha) | 🔭 |
|
| iOS through iTunes or Finder backups (including password-encrypted ones) | 🔭 |
|
||||||
| Acesso físico por exploits de bootloader e de chip | 🔭 |
|
| Physical access through bootloader and chip exploits | 🔭 |
|
||||||
|
|
||||||
O acesso físico é o diferencial de ferramentas comerciais como a Cellebrite. Depende de equipes de pesquisa de vulnerabilidades em tempo integral e muitas dessas técnicas não são publicáveis em código aberto, o que torna esse item o mais distante do roadmap. A direção mais próxima é ler o que o usuário ou o perito consegue exportar de forma legítima (backups e ADB) e interpretar esses dados com o item 6; o acesso físico por exploit fica como ideia de longo prazo, a perseguir conforme o projeto crescer.
|
Physical access is the differentiator of commercial tools like Cellebrite. It depends on full-time vulnerability research teams, and many of those techniques cannot be published as open source, which makes this the most distant item on the roadmap. The closest direction is to read what the user or examiner can legitimately export (backups and ADB) and interpret that data with item 6; physical access by exploit stays as a long-term idea, to pursue as the project grows.
|
||||||
|
|
||||||
### 8. Cadeia de custódia e validade em tribunal
|
### 8. Chain of custody and validity in court
|
||||||
|
|
||||||
| Item | Estado |
|
| Item | Status |
|
||||||
|---|---|
|
|---|---|
|
||||||
| MD5, SHA-1 e SHA-256 de cada arquivo, da imagem e do dispositivo | ✅ |
|
| MD5, SHA-1 and SHA-256 of every file, of the image and of the device | ✅ |
|
||||||
| Manifesto `guara-manifesto.json` em toda recuperação | ✅ |
|
| `guara-manifesto.json` manifest in every recovery | ✅ |
|
||||||
| Relatório HTML com caso, examinador, origem, partições, resumo e hashes | ✅ |
|
| HTML report with case, examiner, source, partitions, summary and hashes | ✅ |
|
||||||
| Verificação de imagem E01/Ex01 contra o hash gravado | ✅ |
|
| Verification of an E01/Ex01 image against the stored hash | ✅ |
|
||||||
| **Registro de auditoria** de cada ação do perito (quem, quando, o quê) | 🔜 |
|
| **Audit log** of every examiner action (who, when, what) | 🔜 |
|
||||||
| **Relatórios assinados** digitalmente e manifesto com carimbo de tempo | 🔜 |
|
| **Digitally signed reports** and a timestamped manifest | 🔜 |
|
||||||
| **Reprodutibilidade:** repetir o procedimento gravado e obter o mesmo resultado | 🔜 |
|
| **Reproducibility:** replay the recorded procedure and get the same result | 🔜 |
|
||||||
| Relatório em PDF | 🔜 |
|
| PDF report | 🔜 |
|
||||||
| **Validação externa:** testes do NIST CFTT (Computer Forensic Tool Testing) e publicação dos resultados | 🔭 |
|
| **External validation:** NIST CFTT (Computer Forensic Tool Testing) tests and publication of the results | 🔭 |
|
||||||
| Binários assinados (Windows e macOS) | 🔜 |
|
| Signed binaries (Windows and macOS) | 🔜 |
|
||||||
|
|
||||||
A validação externa é o que faz um laudo ser aceito. Sem ela, o Guará serve para triagem, recuperação e apoio, e o perito deve conferir os resultados por outro meio.
|
External validation is what makes a report accepted. Without it, Guará is good for triage, recovery and support, and the examiner must check the results by other means.
|
||||||
|
|
||||||
### 9. Análise
|
### 9. Analysis
|
||||||
|
|
||||||
| Item | Estado |
|
| Item | Status |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Busca por texto em todo o disco, UTF-8 e UTF-16, inclusive espaço livre | ✅ `guara search` |
|
| Text search across the whole disk, UTF-8 and UTF-16, including free space | ✅ `guara search` |
|
||||||
| Detecção de duplicadas | ✅ |
|
| Duplicate detection | ✅ |
|
||||||
| Busca por expressão regular e por palavra-chave em **conteúdo de arquivos** (Office, PDF, e-mail) | 🔜 |
|
| Regular expression and keyword search in **file content** (Office, PDF, e-mail) | 🔜 |
|
||||||
| Hashes conhecidos: **NSRL** para ignorar arquivos de sistema | 🔜 |
|
| Known hashes: **NSRL** to ignore system files | 🔜 |
|
||||||
| Listas de hashes de material ilícito (importadas pelo perito) | 🔜 |
|
| Hash lists of illicit material (imported by the examiner) | 🔜 |
|
||||||
| Detecção de imagens por conteúdo (similaridade, classificação) | 🔭 |
|
| Image detection by content (similarity, classification) | 🔭 |
|
||||||
| **OCR** em imagens e PDF digitalizados | 🔭 |
|
| **OCR** on scanned images and PDFs | 🔭 |
|
||||||
|
|
||||||
### 10. Plataforma e distribuição
|
### 10. Platform and distribution
|
||||||
|
|
||||||
| Item | Estado |
|
| Item | Status |
|
||||||
|---|---|
|
|---|---|
|
||||||
| CLI e interface para Windows, Linux e macOS | ✅ |
|
| CLI and interface for Windows, Linux and macOS | ✅ |
|
||||||
| CI em três sistemas, release automática por tag | ✅ |
|
| CI on three systems, automatic release by tag | ✅ |
|
||||||
| Testes com imagens reais em Windows e macOS (hoje só Linux) | 🔜 |
|
| Tests with real images on Windows and macOS (Linux only today) | 🔜 |
|
||||||
| GUI: processo auxiliar privilegiado em vez de reiniciar o app inteiro como administrador | 🔜 |
|
| GUI: privileged helper process instead of restarting the whole app as administrator | 🔜 |
|
||||||
| Binários assinados e notarizados | 🔜 |
|
| Signed and notarized binaries | 🔜 |
|
||||||
| Pacotes em gerenciadores (winget, Homebrew, Flatpak) | 🔭 |
|
| Packages in package managers (winget, Homebrew, Flatpak) | 🔭 |
|
||||||
|
|
||||||
## Próximos marcos sugeridos
|
## Suggested next milestones
|
||||||
|
|
||||||
Sem datas, na ordem em que fazem mais sentido.
|
No dates, in the order that makes the most sense.
|
||||||
|
|
||||||
**1.1: confiança e custódia**
|
**1.1: trust and custody**
|
||||||
Registro de auditoria, relatório em PDF, manifesto assinado, mapa de espaço livre do APFS, validação de XFS e APFS com exclusões reais, testes com imagens reais no Windows e macOS.
|
Audit log, PDF report, signed manifest, APFS free-space map, XFS and APFS validation with real deletions, tests with real images on Windows and macOS.
|
||||||
|
|
||||||
**1.2: análise**
|
**1.2: analysis**
|
||||||
NSRL e listas de hashes, busca em conteúdo de arquivos, linha do tempo unificada.
|
NSRL and hash lists, search in file content, unified timeline.
|
||||||
|
|
||||||
**1.3: artefatos**
|
**1.3: artifacts**
|
||||||
Registro do Windows, navegadores, EVTX e os apps de mensagem mais comuns, apoiados no leitor de SQLite.
|
Windows registry, browsers, EVTX and the most common messaging apps, built on the SQLite reader.
|
||||||
|
|
||||||
**1.4: mais estrutura**
|
**1.4: more structure**
|
||||||
ReFS e Storage Spaces (quando houver imagem de referência), outros contêineres de imagem (VMDK, VHD, QCOW2), carving fragmentado ampliado.
|
ReFS and Storage Spaces (once there is a reference image), other image containers (VMDK, VHD, QCOW2), expanded fragmented carving.
|
||||||
|
|
||||||
**2.0: dispositivos móveis e validação**
|
**2.0: mobile devices and validation**
|
||||||
Backups do iTunes, ADB e backups do Android; submissão aos testes do NIST CFTT.
|
iTunes backups, ADB and Android backups; submission to the NIST CFTT tests.
|
||||||
|
|
||||||
## Como ajudar
|
## How to help
|
||||||
|
|
||||||
O gargalo mais comum é **imagem de referência**: um volume ReFS, um pool de Storage Spaces ou um XFS com exclusão real, de preferência pequeno e sem dados pessoais. Se você tem um, abra uma issue. Veja também o [CONTRIBUTING](CONTRIBUTING.md).
|
The most common bottleneck is a **reference image**: a ReFS volume, a Storage Spaces pool or an XFS with real deletion, preferably small and without personal data. If you have one, open an issue. See also [CONTRIBUTING](CONTRIBUTING.md).
|
||||||
@@ -0,0 +1,180 @@
|
|||||||
|
# Roadmap
|
||||||
|
|
||||||
|
[English](ROADMAP.md) · **Português**
|
||||||
|
|
||||||
|
Onde o Guará esteve, onde está e para onde vai. O que está marcado como feito existe no código e tem teste; o que está planejado é intenção, não promessa, e não tem data.
|
||||||
|
|
||||||
|
Legenda: ✅ feito · 🟡 parcial · 🔜 planejado · 🔭 ideia a longo prazo · ⛔ fora do escopo
|
||||||
|
|
||||||
|
## Princípios que não mudam
|
||||||
|
|
||||||
|
1. **A origem é somente leitura.** Nada no núcleo escreve no dispositivo recuperado.
|
||||||
|
2. **Não entregar sem validar.** Um recurso só entra com teste contra imagem real ou de referência. Por isso ReFS e Storage Spaces ainda não existem: não há imagem de referência para conferir.
|
||||||
|
3. **Confiança honesta.** Se o conteúdo não pôde ser conferido, a confiança é baixa ou média, nunca alta.
|
||||||
|
4. **Livre e auditável.** Código aberto (MIT ou Apache-2.0), sem telemetria, e cada resultado pode ser reproduzido.
|
||||||
|
|
||||||
|
## Histórico
|
||||||
|
|
||||||
|
| Versão | Data | Marco |
|
||||||
|
|---|---|---|
|
||||||
|
| 0.1.0 | 2026-10-18 | Núcleo somente leitura, MBR/GPT, NTFS, FAT, exFAT, carving por estrutura, imagem forense, sessões, CLI e interface |
|
||||||
|
| 0.2.0 | 2026-10-18 | Pré-visualização completa (imagem, vídeo, áudio, PDF, Office, ZIP, hexadecimal) e temas |
|
||||||
|
| 0.3.0 | 2026-10-18 | Explorador com miniaturas, metadados (EXIF, GPS), hashes, busca no disco, CSV, relatório HTML e duplicadas |
|
||||||
|
| 0.4.0 | 2026-10-18 | Reconexão de disco, sessões automáticas, organização ao recuperar |
|
||||||
|
| 0.5.0 | 2026-10-18 | Visualizador de SQLite com linhas apagadas, SMART, interface em inglês, retomada de recuperação |
|
||||||
|
| 0.6.0 | 2026-10-18 | Saúde do disco completa (SMART ATA e NVMe), `guara health`, nova logo |
|
||||||
|
| 1.0.0 | 2026-10-19 | ext4, HFS+, Btrfs, XFS, APFS; BitLocker, LUKS, FileVault 2; RAID e LVM; E01, Ex01, AFF4; JPEG fragmentado; MP4 sem moov |
|
||||||
|
|
||||||
|
Detalhes de cada versão no [CHANGELOG](CHANGELOG.pt-BR.md).
|
||||||
|
|
||||||
|
## Situação atual (1.0.0) contra o que se espera de uma suíte forense
|
||||||
|
|
||||||
|
### 1. Sistemas de arquivos com metadados
|
||||||
|
|
||||||
|
| Item | Estado | Observação |
|
||||||
|
|---|---|---|
|
||||||
|
| NTFS, FAT12/16/32, exFAT | ✅ | Desde a 0.1.0. NTFS ignora arquivos comprimidos e EFS |
|
||||||
|
| ext2/3/4 | ✅ | Inodes apagados e cópias antigas no diário |
|
||||||
|
| HFS+ | ✅ | Sobras de nós da árvore e diário |
|
||||||
|
| Btrfs | ✅ | Versões antigas das árvores; extensões zlib, zstd e lzo |
|
||||||
|
| XFS | ✅ | Inodes liberados e nomes de entradas liberadas. Testado só com exclusão simulada |
|
||||||
|
| APFS | 🟡 | Contêiner, mapa de objetos, instantâneos e nós antigos. **Falta o mapa de espaço livre**; exclusão testada só em simulação |
|
||||||
|
| ReFS | 🔜 | Hoje só é detectado; a recuperação depende do carving. Falta imagem de referência |
|
||||||
|
| Storage Spaces | 🔜 | Não feito. Falta imagem de referência |
|
||||||
|
| NTFS: atributos comprimidos, EFS, lista de atributos | 🔜 | Hoje marcados como incompletos |
|
||||||
|
| Validação de XFS e APFS com exclusão real | 🔜 | Trocar a simulação por imagens de dispositivos reais |
|
||||||
|
|
||||||
|
### 2. Volumes cifrados
|
||||||
|
|
||||||
|
| Item | Estado |
|
||||||
|
|---|---|
|
||||||
|
| BitLocker (senha, chave de recuperação, .BEK, chave limpa) | ✅ |
|
||||||
|
| LUKS1 e LUKS2 | ✅ |
|
||||||
|
| FileVault 2 (Core Storage) | ✅ |
|
||||||
|
| FileVault 2 em APFS com volume cifrado | 🔜 |
|
||||||
|
| Chave a partir de memória (hibernação, despejo de RAM) | 🔭 |
|
||||||
|
| Ataque de dicionário e força bruta (BitLocker, LUKS, FileVault, RAR, ZIP e demais volumes/arquivos cifrados) | 🔜 |
|
||||||
|
|
||||||
|
Hoje o Guará abre volumes quando você **já tem** a senha ou a chave. Recuperação de senha por dicionário e força bruta (com GPU, como Hashcat) é um recurso planejado, central no uso pericial.
|
||||||
|
|
||||||
|
### 3. Imagens forenses
|
||||||
|
|
||||||
|
| Item | Estado |
|
||||||
|
|---|---|
|
||||||
|
| Imagem bruta (dd) tolerante a setores ruins, com mapa de erros | ✅ |
|
||||||
|
| E01 e Ex01: leitura, gravação e `guara verify` | ✅ |
|
||||||
|
| AFF4: leitura e gravação | ✅ |
|
||||||
|
| Outros contêineres (VMDK, VHD/VHDX, QCOW2, DMG) | 🔜 |
|
||||||
|
| Imagem de dispositivo móvel (ver item 7) | 🔭 |
|
||||||
|
|
||||||
|
### 4. Montagem de discos soltos
|
||||||
|
|
||||||
|
| Item | Estado |
|
||||||
|
|---|---|
|
||||||
|
| RAID 0, 1, 4, 5, 6, 10 e linear (mdadm), inclusive degradado | ✅ |
|
||||||
|
| Descoberta automática de nível, faixa, layout e ordem sem metadados | ✅ |
|
||||||
|
| LVM2 (linear, em faixas, espelhado e RAID) | ✅ |
|
||||||
|
| Storage Spaces | 🔜 |
|
||||||
|
| Btrfs e ZFS multidisco (RAID do próprio sistema de arquivos) | 🔭 |
|
||||||
|
| RAID de controladoras proprietárias (Dell PERC, HP Smart Array) | 🔭 |
|
||||||
|
|
||||||
|
### 5. Carving
|
||||||
|
|
||||||
|
| Item | Estado |
|
||||||
|
|---|---|
|
||||||
|
| Detecção pela estrutura real, com tamanho exato e confiança | ✅ Desde a 0.1.0 (JPEG, PNG, GIF, BMP, PDF, ZIP e derivados, MP4/MOV/HEIC, AVI/WAV/WebP, SQLite, 7z, OLE, MP3, PE) e, na 1.0.0, mais 24 (gzip, zstd, Matroska/WebM, Ogg, MPEG-TS, FLV, ASF, MIDI, RAR, ar, SWF, ELF, TIFF, ICO, registro do Windows, EVTX, PST, RTF, pcap e outros) |
|
||||||
|
| JPEG fragmentado remontado (até três fragmentos) | ✅ |
|
||||||
|
| MP4/MOV sem `moov` reconstruído (H.264 e HEVC) a partir de um vídeo de referência | ✅ |
|
||||||
|
| Fragmentos: mais de três, e formatos além de JPEG (PNG, DOC, ZIP, SQLite) | 🔜 |
|
||||||
|
| Reconstrução de vídeo sem referência, áudio em MP4 sem `moov`, vídeos de drone e câmeras de ação em outros contêineres | 🔜 |
|
||||||
|
| Mais formatos validados por estrutura | 🔜 contínuo |
|
||||||
|
|
||||||
|
### 6. Interpretação de artefatos
|
||||||
|
|
||||||
|
O Guará **identifica e recupera** esses arquivos, mas só interpreta alguns.
|
||||||
|
|
||||||
|
| Item | Estado |
|
||||||
|
|---|---|
|
||||||
|
| Banco SQLite: esquema, tabelas, blobs, datas e linhas apagadas | ✅ |
|
||||||
|
| Metadados: EXIF e GPS, PDF, Office e OpenDocument, MP4/MOV | ✅ |
|
||||||
|
| Carving de registro do Windows (`regf`), EVTX, PST, pcap | 🟡 só reconhece e recupera, não interpreta |
|
||||||
|
| Interpretar o registro do Windows (usuários, programas, USB, histórico de execução) | 🔜 |
|
||||||
|
| Histórico, cookies e downloads de navegadores (Chrome, Firefox, Safari) | 🔜 base no leitor de SQLite |
|
||||||
|
| Mensagens, contatos e localização de apps (WhatsApp, Telegram, Signal e outros) | 🔜 base no leitor de SQLite |
|
||||||
|
| Logs do sistema e eventos do Windows (EVTX) | 🔜 |
|
||||||
|
| **Linha do tempo unificada** de todos os artefatos | 🔜 |
|
||||||
|
|
||||||
|
### 7. Extração de dispositivos móveis
|
||||||
|
|
||||||
|
Aqui o salto é de natureza, não de recurso. Hoje o Guará trabalha com **mídias de armazenamento**.
|
||||||
|
|
||||||
|
| Item | Estado |
|
||||||
|
|---|---|
|
||||||
|
| Android por ADB e backups | 🔭 |
|
||||||
|
| iOS por backups do iTunes ou Finder (inclusive cifrados com senha) | 🔭 |
|
||||||
|
| Acesso físico por exploits de bootloader e de chip | 🔭 |
|
||||||
|
|
||||||
|
O acesso físico é o diferencial de ferramentas comerciais como a Cellebrite. Depende de equipes de pesquisa de vulnerabilidades em tempo integral e muitas dessas técnicas não são publicáveis em código aberto, o que torna esse item o mais distante do roadmap. A direção mais próxima é ler o que o usuário ou o perito consegue exportar de forma legítima (backups e ADB) e interpretar esses dados com o item 6; o acesso físico por exploit fica como ideia de longo prazo, a perseguir conforme o projeto crescer.
|
||||||
|
|
||||||
|
### 8. Cadeia de custódia e validade em tribunal
|
||||||
|
|
||||||
|
| Item | Estado |
|
||||||
|
|---|---|
|
||||||
|
| MD5, SHA-1 e SHA-256 de cada arquivo, da imagem e do dispositivo | ✅ |
|
||||||
|
| Manifesto `guara-manifesto.json` em toda recuperação | ✅ |
|
||||||
|
| Relatório HTML com caso, examinador, origem, partições, resumo e hashes | ✅ |
|
||||||
|
| Verificação de imagem E01/Ex01 contra o hash gravado | ✅ |
|
||||||
|
| **Registro de auditoria** de cada ação do perito (quem, quando, o quê) | 🔜 |
|
||||||
|
| **Relatórios assinados** digitalmente e manifesto com carimbo de tempo | 🔜 |
|
||||||
|
| **Reprodutibilidade:** repetir o procedimento gravado e obter o mesmo resultado | 🔜 |
|
||||||
|
| Relatório em PDF | 🔜 |
|
||||||
|
| **Validação externa:** testes do NIST CFTT (Computer Forensic Tool Testing) e publicação dos resultados | 🔭 |
|
||||||
|
| Binários assinados (Windows e macOS) | 🔜 |
|
||||||
|
|
||||||
|
A validação externa é o que faz um laudo ser aceito. Sem ela, o Guará serve para triagem, recuperação e apoio, e o perito deve conferir os resultados por outro meio.
|
||||||
|
|
||||||
|
### 9. Análise
|
||||||
|
|
||||||
|
| Item | Estado |
|
||||||
|
|---|---|
|
||||||
|
| Busca por texto em todo o disco, UTF-8 e UTF-16, inclusive espaço livre | ✅ `guara search` |
|
||||||
|
| Detecção de duplicadas | ✅ |
|
||||||
|
| Busca por expressão regular e por palavra-chave em **conteúdo de arquivos** (Office, PDF, e-mail) | 🔜 |
|
||||||
|
| Hashes conhecidos: **NSRL** para ignorar arquivos de sistema | 🔜 |
|
||||||
|
| Listas de hashes de material ilícito (importadas pelo perito) | 🔜 |
|
||||||
|
| Detecção de imagens por conteúdo (similaridade, classificação) | 🔭 |
|
||||||
|
| **OCR** em imagens e PDF digitalizados | 🔭 |
|
||||||
|
|
||||||
|
### 10. Plataforma e distribuição
|
||||||
|
|
||||||
|
| Item | Estado |
|
||||||
|
|---|---|
|
||||||
|
| CLI e interface para Windows, Linux e macOS | ✅ |
|
||||||
|
| CI em três sistemas, release automática por tag | ✅ |
|
||||||
|
| Testes com imagens reais em Windows e macOS (hoje só Linux) | 🔜 |
|
||||||
|
| GUI: processo auxiliar privilegiado em vez de reiniciar o app inteiro como administrador | 🔜 |
|
||||||
|
| Binários assinados e notarizados | 🔜 |
|
||||||
|
| Pacotes em gerenciadores (winget, Homebrew, Flatpak) | 🔭 |
|
||||||
|
|
||||||
|
## Próximos marcos sugeridos
|
||||||
|
|
||||||
|
Sem datas, na ordem em que fazem mais sentido.
|
||||||
|
|
||||||
|
**1.1: confiança e custódia**
|
||||||
|
Registro de auditoria, relatório em PDF, manifesto assinado, mapa de espaço livre do APFS, validação de XFS e APFS com exclusões reais, testes com imagens reais no Windows e macOS.
|
||||||
|
|
||||||
|
**1.2: análise**
|
||||||
|
NSRL e listas de hashes, busca em conteúdo de arquivos, linha do tempo unificada.
|
||||||
|
|
||||||
|
**1.3: artefatos**
|
||||||
|
Registro do Windows, navegadores, EVTX e os apps de mensagem mais comuns, apoiados no leitor de SQLite.
|
||||||
|
|
||||||
|
**1.4: mais estrutura**
|
||||||
|
ReFS e Storage Spaces (quando houver imagem de referência), outros contêineres de imagem (VMDK, VHD, QCOW2), carving fragmentado ampliado.
|
||||||
|
|
||||||
|
**2.0: dispositivos móveis e validação**
|
||||||
|
Backups do iTunes, ADB e backups do Android; submissão aos testes do NIST CFTT.
|
||||||
|
|
||||||
|
## Como ajudar
|
||||||
|
|
||||||
|
O gargalo mais comum é **imagem de referência**: um volume ReFS, um pool de Storage Spaces ou um XFS com exclusão real, de preferência pequeno e sem dados pessoais. Se você tem um, abra uma issue. Veja também o [CONTRIBUTING](CONTRIBUTING.pt-BR.md).
|
||||||
+4
-2
@@ -1,3 +1,5 @@
|
|||||||
# Segurança
|
# Security
|
||||||
|
|
||||||
Guará abre dispositivos em modo somente leitura e processa dados potencialmente corrompidos ou maliciosos (sistemas de arquivos e arquivos forjados). Vulnerabilidades (corrupção de memória em parsers, escrita indevida na origem, escape de caminho na recuperação) devem ser reportadas em privado pela aba **Security → Report a vulnerability** do repositório no GitHub. Não abra issue pública antes da correção.
|
[English](SECURITY.md) · [Português](SECURITY.pt-BR.md)
|
||||||
|
|
||||||
|
Guará opens devices in read-only mode and processes potentially corrupted or malicious data (forged file systems and files). Vulnerabilities (memory corruption in parsers, improper writes to the source, path escape during recovery) must be reported privately through the **Security → Report a vulnerability** tab of the repository on GitHub. Do not open a public issue before the fix.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# Segurança
|
||||||
|
|
||||||
|
[English](SECURITY.md) · **Português**
|
||||||
|
|
||||||
|
Guará abre dispositivos em modo somente leitura e processa dados potencialmente corrompidos ou maliciosos (sistemas de arquivos e arquivos forjados). Vulnerabilidades (corrupção de memória em parsers, escrita indevida na origem, escape de caminho na recuperação) devem ser reportadas em privado pela aba **Security → Report a vulnerability** do repositório no GitHub. Não abra issue pública antes da correção.
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
# Architecture
|
||||||
|
|
||||||
|
[English](architecture.md) · [Português](pt-BR/arquitetura.md)
|
||||||
|
|
||||||
|
Guará is a Rust workspace with three parts: a core (`guara-core`), a terminal binary (`guara-cli`) and an interface (`apps/gui`) that is the same web page served in two ways.
|
||||||
|
|
||||||
|
```
|
||||||
|
crates/guara-core library: everything that reads, interprets and recovers
|
||||||
|
crates/guara-cli `guara` binary: commands and the local interface server
|
||||||
|
apps/gui/ui HTML, CSS and JS of the interface
|
||||||
|
apps/gui/src-tauri desktop shell (Tauri) that loads the same interface
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flow of a scan
|
||||||
|
|
||||||
|
```
|
||||||
|
source (device or image)
|
||||||
|
│ source / device read-only access, bad sectors tolerated
|
||||||
|
▼
|
||||||
|
virtual disk (optional)
|
||||||
|
│ assemble joins E01/AFF4 images, RAID, LVM and encrypted volumes
|
||||||
|
▼
|
||||||
|
partitions and volumes
|
||||||
|
│ partition, volume MBR, GPT, volumes lost and found by signature
|
||||||
|
▼
|
||||||
|
two searches in parallel
|
||||||
|
├─ fs/* metadata: NTFS, FAT, exFAT, ext, HFS+, Btrfs, XFS, APFS
|
||||||
|
└─ carve + signatures file structure in free space and outside partitions
|
||||||
|
+ formats, jpegscan, defrag, mp4rebuild
|
||||||
|
▼
|
||||||
|
scan merges without duplicates and assigns confidence
|
||||||
|
▼
|
||||||
|
saved session resume, export, report
|
||||||
|
▼
|
||||||
|
recover copies with MD5, SHA-1 and SHA-256 and writes the manifest
|
||||||
|
```
|
||||||
|
|
||||||
|
## Core modules
|
||||||
|
|
||||||
|
### Access and assembly
|
||||||
|
| Module | Role |
|
||||||
|
|---|---|
|
||||||
|
| `source`, `device` | Open devices and images read-only; list disks |
|
||||||
|
| `image` | Raw image tolerant of bad sectors, with an error map |
|
||||||
|
| `ewf`, `aff4` | Read and write E01/Ex01 and AFF4 |
|
||||||
|
| `assemble` | Builds the virtual disk: image, RAID, LVM and encrypted volume |
|
||||||
|
| `raid`, `raid_detect`, `lvm` | RAID reassembly (with automatic parameter discovery) and LVM2 |
|
||||||
|
| `crypt/` | BitLocker, LUKS and FileVault 2 |
|
||||||
|
| `reconnect` | Recognize the same disk that came back under another name |
|
||||||
|
|
||||||
|
### Interpretation
|
||||||
|
| Module | Role |
|
||||||
|
|---|---|
|
||||||
|
| `partition`, `volume` | Partition tables and volume detection |
|
||||||
|
| `fs/` | One reader per file system |
|
||||||
|
| `signatures`, `formats` | Format detectors based on structure |
|
||||||
|
| `carve`, `scan` | Signature scan and merging with the metadata |
|
||||||
|
| `jpegscan`, `defrag`, `mp4rebuild` | Fragmented JPEG and MP4 without `moov` |
|
||||||
|
| `meta`, `sqlite`, `thumb` | Metadata, SQLite reader, thumbnails |
|
||||||
|
|
||||||
|
### Results and forensics
|
||||||
|
| Module | Role |
|
||||||
|
|---|---|
|
||||||
|
| `recover` | Copies the files, checks the hashes, writes the manifest, resumes recovery |
|
||||||
|
| `hashing`, `search` | Hashes and text search across the whole disk |
|
||||||
|
| `report`, `explorer` | HTML report, CSV, explorer filters and groupings |
|
||||||
|
| `health`, `external` | SMART and external tools (`smartctl`) |
|
||||||
|
|
||||||
|
### Service
|
||||||
|
`service`, `http`, `settings`, `notify`, `owner`: the layer the interface uses (local API, settings, notifications, and writing with the right owner when running as administrator).
|
||||||
|
|
||||||
|
## Interface
|
||||||
|
|
||||||
|
The interface is a single page (`apps/gui/ui`). There are two ways to run it:
|
||||||
|
|
||||||
|
- **Desktop app (Tauri):** the window loads the page and talks to the core directly.
|
||||||
|
- **`guara ui`:** the binary starts a token-protected server on `127.0.0.1` and opens the browser.
|
||||||
|
|
||||||
|
Because the front end is the same, everything that exists in one exists in the other.
|
||||||
|
|
||||||
|
## Design decisions
|
||||||
|
|
||||||
|
- **Read-only on the source, by construction.** All device access goes through `source::open_path`. Code review rejects any write to the source.
|
||||||
|
- **Refusing a destination on the same disk** as the source (Linux and macOS), to avoid overwriting what you want to recover.
|
||||||
|
- **Confidence per file.** Each detector declares how much it managed to verify; merging keeps the best evidence.
|
||||||
|
- **Own readers.** File systems, ciphers, SQLite and image containers are implemented in the core, to tolerate corrupted structures, which is exactly the use case.
|
||||||
|
- **Secrets out of the session.** Passwords are never written; at most the volume key, and only with `--remember-keys`.
|
||||||
|
- **Privileges.** Reading a raw disk requires administrator, but everything Guará writes (sessions, reports, recovered files) keeps the owner and permissions of the user who launched it.
|
||||||
|
|
||||||
|
## Tests
|
||||||
|
|
||||||
|
About a hundred tests, in `crates/guara-core/tests/` (one file per area: `ext4`, `xfs`, `apfs`, `bitlocker`, `raid`, `ewf`, `jpegscan`, `mp4rebuild`, `sqlite` and others).
|
||||||
|
|
||||||
|
- **Images generated on the fly** with `mtools`, `ntfs-3g`, `e2fsprogs` and the like (`scripts/make-fixtures.sh`).
|
||||||
|
- **Reference images** from external projects (cryptsetup, dfvfs, AFF4) downloaded by `scripts/fetch-testdata.sh` into `target/testdata`. Without them, the corresponding tests are skipped.
|
||||||
|
- The BitLocker tests take about 75 s because of key derivation.
|
||||||
|
- In CI the tests with real images run only on Linux.
|
||||||
+70
-68
@@ -1,124 +1,126 @@
|
|||||||
# Referência do terminal
|
# Terminal reference
|
||||||
|
|
||||||
Ler disco bruto exige privilégios: administrador no Windows, `sudo` no Linux e no macOS. Use `guara <comando> --help` para a lista completa de opções.
|
[English](cli.md) · [Português](pt-BR/cli.md)
|
||||||
|
|
||||||
## Comandos
|
Reading a raw disk requires privileges: administrator on Windows, `sudo` on Linux and macOS. Use `guara <command> --help` for the full list of options.
|
||||||
|
|
||||||
| Comando | Para que serve |
|
## Commands
|
||||||
|
|
||||||
|
| Command | What it does |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `devices` | Lista discos e pendrives, avisa TRIM e volumes montados |
|
| `devices` | Lists disks and USB sticks, warns about TRIM and mounted volumes |
|
||||||
| `inspect <origem>` | Partições, espaço não particionado, cifragem |
|
| `inspect <source>` | Partitions, unpartitioned space, encryption |
|
||||||
| `health <origem>` | Saúde do disco (SMART); requer `smartmontools` |
|
| `health <source>` | Disk health (SMART); requires `smartmontools` |
|
||||||
| `scan <origem>` | Varredura de arquivos apagados e perdidos |
|
| `scan <source>` | Scan for deleted and lost files |
|
||||||
| `resume <sessão>` | Continua uma varredura pausada |
|
| `resume <session>` | Continues a paused scan |
|
||||||
| `recover <sessão> <destino>` | Recupera os arquivos de uma sessão |
|
| `recover <session> <destination>` | Recovers the files of a session |
|
||||||
| `image <origem> <destino>` | Imagem forense (bruta, E01 ou AFF4) |
|
| `image <source> <destination>` | Forensic image (raw, E01 or AFF4) |
|
||||||
| `verify <imagem>` | Confere uma imagem E01 ou Ex01 contra o hash gravado |
|
| `verify <image>` | Checks an E01 or Ex01 image against the stored hash |
|
||||||
| `hash <origem>` | MD5, SHA-1 e SHA-256 do dispositivo |
|
| `hash <source>` | MD5, SHA-1 and SHA-256 of the device |
|
||||||
| `search <origem> <termos...>` | Texto no disco inteiro, UTF-8 e UTF-16 |
|
| `search <source> <terms...>` | Text across the whole disk, UTF-8 and UTF-16 |
|
||||||
| `export <sessão> <csv>` | Planilha dos achados |
|
| `export <session> <csv>` | Spreadsheet of the findings |
|
||||||
| `report <sessão> <html>` | Relatório HTML imprimível |
|
| `report <session> <html>` | Printable HTML report |
|
||||||
| `sessions` | Sessões salvas automaticamente |
|
| `sessions` | Automatically saved sessions |
|
||||||
| `ui` | Interface no navegador (127.0.0.1, com token) |
|
| `ui` | Interface in the browser (127.0.0.1, with token) |
|
||||||
|
|
||||||
`--json` existe em `devices`, `inspect`, `health` e `scan`.
|
`--json` exists on `devices`, `inspect`, `health` and `scan`.
|
||||||
|
|
||||||
## Varredura
|
## Scanning
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo guara scan /dev/sdb --session s.json --list # profunda, com lista
|
sudo guara scan /dev/sdb --session s.json --list # deep, with listing
|
||||||
sudo guara scan /dev/sdb --quick # só metadados, em segundos
|
sudo guara scan /dev/sdb --quick # metadata only, in seconds
|
||||||
guara scan disco.img --category image,document --min-confidence medium
|
guara scan disk.img --category image,document --min-confidence medium
|
||||||
guara scan disco.img --recover /mnt/outro-disco/Recuperados
|
guara scan disk.img --recover /mnt/other-disk/Recovered
|
||||||
```
|
```
|
||||||
|
|
||||||
Filtros (valem em `scan`, `recover`, `export` e `report`):
|
Filters (valid on `scan`, `recover`, `export` and `report`):
|
||||||
|
|
||||||
| Opção | Efeito |
|
| Option | Effect |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `--category` | `image`, `document`, `video`, `audio`, `archive`, `database`, `other` (separe por vírgula) |
|
| `--category` | `image`, `document`, `video`, `audio`, `archive`, `database`, `other` (comma separated) |
|
||||||
| `--min-confidence` | `low`, `medium` ou `high` |
|
| `--min-confidence` | `low`, `medium` or `high` |
|
||||||
| `--name` | só nomes e caminhos que contenham o texto |
|
| `--name` | only names and paths that contain the text |
|
||||||
| `--organize` | como gravar: `folders` (pastas originais), `type`, `date` ou `flat` |
|
| `--organize` | how to write: `folders` (original folders), `type`, `date` or `flat` |
|
||||||
|
|
||||||
## Recuperação
|
## Recovery
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
guara recover s.json /mnt/outro-disco/Recuperados --category image
|
guara recover s.json /mnt/other-disk/Recovered --category image
|
||||||
guara resume s.json
|
guara resume s.json
|
||||||
```
|
```
|
||||||
|
|
||||||
O destino precisa estar em **outro disco**. Cada recuperação grava `guara-manifesto.json` com MD5, SHA-1 e SHA-256 de todos os arquivos. Se a recuperação for interrompida, repetir o comando pula o que já foi copiado e conferido.
|
The destination must be on **another disk**. Every recovery writes `guara-manifesto.json` with the MD5, SHA-1 and SHA-256 of every file. If the recovery is interrupted, repeating the command skips what was already copied and checked.
|
||||||
|
|
||||||
## Volumes cifrados
|
## Encrypted volumes
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo guara scan /dev/sdb1 --ask-password
|
sudo guara scan /dev/sdb1 --ask-password
|
||||||
sudo guara scan /dev/sdb1 --recovery-key 111111-222222-333333-444444-555555-666666-777777-888888
|
sudo guara scan /dev/sdb1 --recovery-key 111111-222222-333333-444444-555555-666666-777777-888888
|
||||||
sudo guara scan /dev/sdb1 --key-file chave.BEK
|
sudo guara scan /dev/sdb1 --key-file key.BEK
|
||||||
sudo guara scan /dev/sdb1 --volume-key 4f2a...
|
sudo guara scan /dev/sdb1 --volume-key 4f2a...
|
||||||
```
|
```
|
||||||
|
|
||||||
| Opção | Uso |
|
| Option | Use |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `--ask-password` | Pergunta no terminal, sem mostrar. **Preferida** |
|
| `--ask-password` | Asks in the terminal, without echo. **Preferred** |
|
||||||
| `GUARA_PASSWORD` | Variável de ambiente com a senha |
|
| `GUARA_PASSWORD` | Environment variable with the password |
|
||||||
| `--password` | Senha na linha de comando (fica no histórico do shell) |
|
| `--password` | Password on the command line (stays in the shell history) |
|
||||||
| `--recovery-key` | Chave numérica do BitLocker |
|
| `--recovery-key` | BitLocker numeric key |
|
||||||
| `--key-file` | `.BEK` do BitLocker ou keyfile do LUKS |
|
| `--key-file` | BitLocker `.BEK` or LUKS keyfile |
|
||||||
| `--volume-key` | Chave do volume em hexadecimal (a que o Guará mostra ao abrir um volume) |
|
| `--volume-key` | Volume key in hexadecimal (the one Guará shows when it opens a volume) |
|
||||||
| `--remember-keys` | Guarda na sessão as chaves dos volumes abertos (nunca a senha) |
|
| `--remember-keys` | Stores the keys of opened volumes in the session (never the password) |
|
||||||
|
|
||||||
## RAID e LVM
|
## RAID and LVM
|
||||||
|
|
||||||
Passe o disco principal e os outros membros com `--member`, repetido. Use `-` para um disco ausente.
|
Pass the main disk and the other members with `--member`, repeated. Use `-` for a missing disk.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Com metadados do mdadm ou do LVM: o Guará lê tudo sozinho
|
# With mdadm or LVM metadata: Guará reads everything by itself
|
||||||
guara inspect disco1.img --member disco2.img --member disco3.img
|
guara inspect disk1.img --member disk2.img --member disk3.img
|
||||||
|
|
||||||
# Sem metadados: descobre nível, faixa, layout e ordem
|
# Without metadata: discovers level, stripe size, layout and order
|
||||||
guara scan disco1.img --member disco2.img --member disco3.img --raid
|
guara scan disk1.img --member disk2.img --member disk3.img --raid
|
||||||
|
|
||||||
# Fixando o que você já sabe
|
# Fixing what you already know
|
||||||
guara scan disco1.img --member disco2.img --member - --raid \
|
guara scan disk1.img --member disk2.img --member - --raid \
|
||||||
--raid-level 5 --raid-chunk-kb 64 --raid-layout left-symmetric --raid-order 0,1,2
|
--raid-level 5 --raid-chunk-kb 64 --raid-layout left-symmetric --raid-order 0,1,2
|
||||||
```
|
```
|
||||||
|
|
||||||
## Imagem forense
|
## Forensic image
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo guara image /dev/sdb /mnt/outro-disco/sdb.img # bruta, com mapa de erros
|
sudo guara image /dev/sdb /mnt/other-disk/sdb.img # raw, with error map
|
||||||
sudo guara image /dev/sdb /mnt/outro-disco/sdb --format e01 \
|
sudo guara image /dev/sdb /mnt/other-disk/sdb --format e01 \
|
||||||
--case 2026-001 --examiner "Nome" --evidence E1 --description "HD do notebook"
|
--case 2026-001 --examiner "Name" --evidence E1 --description "Laptop HDD"
|
||||||
sudo guara image /dev/sdb /mnt/outro-disco/sdb --format aff4
|
sudo guara image /dev/sdb /mnt/other-disk/sdb --format aff4
|
||||||
guara verify /mnt/outro-disco/sdb.E01
|
guara verify /mnt/other-disk/sdb.E01
|
||||||
```
|
```
|
||||||
|
|
||||||
Para E01: `--segment-mib` (tamanho de cada segmento, padrão 1500, 0 para um arquivo só) e `--compression` (0 a 9, padrão 1).
|
For E01: `--segment-mib` (size of each segment, default 1500, 0 for a single file) and `--compression` (0 to 9, default 1).
|
||||||
|
|
||||||
## Vídeo sem índice (MP4 sem moov)
|
## Video without an index (MP4 without moov)
|
||||||
|
|
||||||
Passe um vídeo **íntegro da mesma câmera ou drone** para o Guará refazer o índice:
|
Pass an **intact video from the same camera or drone** so Guará can rebuild the index:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
guara scan cartao.img --reference VIDEO_BOM.MP4 --category video
|
guara scan card.img --reference GOOD_VIDEO.MP4 --category video
|
||||||
```
|
```
|
||||||
|
|
||||||
`--reference` pode ser repetido. O áudio não é reconstruído.
|
`--reference` can be repeated. Audio is not reconstructed.
|
||||||
|
|
||||||
## Busca de texto
|
## Text search
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo guara search /dev/sdb "contrato" "cpf" --case-sensitive --max 500
|
sudo guara search /dev/sdb "contract" "ssn" --case-sensitive --max 500
|
||||||
```
|
```
|
||||||
|
|
||||||
Procura em UTF-8 e UTF-16 (`--no-utf16` desliga), inclusive no espaço livre e fora de partições. Mostra posição, partição e contexto. `--max` limita os resultados (padrão 200).
|
Searches in UTF-8 and UTF-16 (`--no-utf16` turns it off), including free space and areas outside partitions. Shows position, partition and context. `--max` limits the results (default 200).
|
||||||
|
|
||||||
## Relatório
|
## Report
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
guara report s.json relatorio.html --case 2026-001 --examiner "Nome" --hash-source
|
guara report s.json report.html --case 2026-001 --examiner "Name" --hash-source
|
||||||
```
|
```
|
||||||
|
|
||||||
Traz identificação do caso, origem, partições, resumo, hashes e a lista dos arquivos. `--hash-source` inclui o hash da origem inteira.
|
Includes case identification, source, partitions, summary, hashes and the list of files. `--hash-source` adds the hash of the whole source.
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
# Arquitetura
|
# Arquitetura
|
||||||
|
|
||||||
|
[English](../architecture.md) · **Português**
|
||||||
|
|
||||||
O Guará é um workspace Rust com três partes: um núcleo (`guara-core`), um binário de terminal (`guara-cli`) e uma interface (`apps/gui`) que é a mesma página web servida de duas formas.
|
O Guará é um workspace Rust com três partes: um núcleo (`guara-core`), um binário de terminal (`guara-cli`) e uma interface (`apps/gui`) que é a mesma página web servida de duas formas.
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -0,0 +1,126 @@
|
|||||||
|
# Referência do terminal
|
||||||
|
|
||||||
|
[English](../cli.md) · **Português**
|
||||||
|
|
||||||
|
Ler disco bruto exige privilégios: administrador no Windows, `sudo` no Linux e no macOS. Use `guara <comando> --help` para a lista completa de opções.
|
||||||
|
|
||||||
|
## Comandos
|
||||||
|
|
||||||
|
| Comando | Para que serve |
|
||||||
|
|---|---|
|
||||||
|
| `devices` | Lista discos e pendrives, avisa TRIM e volumes montados |
|
||||||
|
| `inspect <origem>` | Partições, espaço não particionado, cifragem |
|
||||||
|
| `health <origem>` | Saúde do disco (SMART); requer `smartmontools` |
|
||||||
|
| `scan <origem>` | Varredura de arquivos apagados e perdidos |
|
||||||
|
| `resume <sessão>` | Continua uma varredura pausada |
|
||||||
|
| `recover <sessão> <destino>` | Recupera os arquivos de uma sessão |
|
||||||
|
| `image <origem> <destino>` | Imagem forense (bruta, E01 ou AFF4) |
|
||||||
|
| `verify <imagem>` | Confere uma imagem E01 ou Ex01 contra o hash gravado |
|
||||||
|
| `hash <origem>` | MD5, SHA-1 e SHA-256 do dispositivo |
|
||||||
|
| `search <origem> <termos...>` | Texto no disco inteiro, UTF-8 e UTF-16 |
|
||||||
|
| `export <sessão> <csv>` | Planilha dos achados |
|
||||||
|
| `report <sessão> <html>` | Relatório HTML imprimível |
|
||||||
|
| `sessions` | Sessões salvas automaticamente |
|
||||||
|
| `ui` | Interface no navegador (127.0.0.1, com token) |
|
||||||
|
|
||||||
|
`--json` existe em `devices`, `inspect`, `health` e `scan`.
|
||||||
|
|
||||||
|
## Varredura
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo guara scan /dev/sdb --session s.json --list # profunda, com lista
|
||||||
|
sudo guara scan /dev/sdb --quick # só metadados, em segundos
|
||||||
|
guara scan disco.img --category image,document --min-confidence medium
|
||||||
|
guara scan disco.img --recover /mnt/outro-disco/Recuperados
|
||||||
|
```
|
||||||
|
|
||||||
|
Filtros (valem em `scan`, `recover`, `export` e `report`):
|
||||||
|
|
||||||
|
| Opção | Efeito |
|
||||||
|
|---|---|
|
||||||
|
| `--category` | `image`, `document`, `video`, `audio`, `archive`, `database`, `other` (separe por vírgula) |
|
||||||
|
| `--min-confidence` | `low`, `medium` ou `high` |
|
||||||
|
| `--name` | só nomes e caminhos que contenham o texto |
|
||||||
|
| `--organize` | como gravar: `folders` (pastas originais), `type`, `date` ou `flat` |
|
||||||
|
|
||||||
|
## Recuperação
|
||||||
|
|
||||||
|
```bash
|
||||||
|
guara recover s.json /mnt/outro-disco/Recuperados --category image
|
||||||
|
guara resume s.json
|
||||||
|
```
|
||||||
|
|
||||||
|
O destino precisa estar em **outro disco**. Cada recuperação grava `guara-manifesto.json` com MD5, SHA-1 e SHA-256 de todos os arquivos. Se a recuperação for interrompida, repetir o comando pula o que já foi copiado e conferido.
|
||||||
|
|
||||||
|
## Volumes cifrados
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo guara scan /dev/sdb1 --ask-password
|
||||||
|
sudo guara scan /dev/sdb1 --recovery-key 111111-222222-333333-444444-555555-666666-777777-888888
|
||||||
|
sudo guara scan /dev/sdb1 --key-file chave.BEK
|
||||||
|
sudo guara scan /dev/sdb1 --volume-key 4f2a...
|
||||||
|
```
|
||||||
|
|
||||||
|
| Opção | Uso |
|
||||||
|
|---|---|
|
||||||
|
| `--ask-password` | Pergunta no terminal, sem mostrar. **Preferida** |
|
||||||
|
| `GUARA_PASSWORD` | Variável de ambiente com a senha |
|
||||||
|
| `--password` | Senha na linha de comando (fica no histórico do shell) |
|
||||||
|
| `--recovery-key` | Chave numérica do BitLocker |
|
||||||
|
| `--key-file` | `.BEK` do BitLocker ou keyfile do LUKS |
|
||||||
|
| `--volume-key` | Chave do volume em hexadecimal (a que o Guará mostra ao abrir um volume) |
|
||||||
|
| `--remember-keys` | Guarda na sessão as chaves dos volumes abertos (nunca a senha) |
|
||||||
|
|
||||||
|
## RAID e LVM
|
||||||
|
|
||||||
|
Passe o disco principal e os outros membros com `--member`, repetido. Use `-` para um disco ausente.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Com metadados do mdadm ou do LVM: o Guará lê tudo sozinho
|
||||||
|
guara inspect disco1.img --member disco2.img --member disco3.img
|
||||||
|
|
||||||
|
# Sem metadados: descobre nível, faixa, layout e ordem
|
||||||
|
guara scan disco1.img --member disco2.img --member disco3.img --raid
|
||||||
|
|
||||||
|
# Fixando o que você já sabe
|
||||||
|
guara scan disco1.img --member disco2.img --member - --raid \
|
||||||
|
--raid-level 5 --raid-chunk-kb 64 --raid-layout left-symmetric --raid-order 0,1,2
|
||||||
|
```
|
||||||
|
|
||||||
|
## Imagem forense
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo guara image /dev/sdb /mnt/outro-disco/sdb.img # bruta, com mapa de erros
|
||||||
|
sudo guara image /dev/sdb /mnt/outro-disco/sdb --format e01 \
|
||||||
|
--case 2026-001 --examiner "Nome" --evidence E1 --description "HD do notebook"
|
||||||
|
sudo guara image /dev/sdb /mnt/outro-disco/sdb --format aff4
|
||||||
|
guara verify /mnt/outro-disco/sdb.E01
|
||||||
|
```
|
||||||
|
|
||||||
|
Para E01: `--segment-mib` (tamanho de cada segmento, padrão 1500, 0 para um arquivo só) e `--compression` (0 a 9, padrão 1).
|
||||||
|
|
||||||
|
## Vídeo sem índice (MP4 sem moov)
|
||||||
|
|
||||||
|
Passe um vídeo **íntegro da mesma câmera ou drone** para o Guará refazer o índice:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
guara scan cartao.img --reference VIDEO_BOM.MP4 --category video
|
||||||
|
```
|
||||||
|
|
||||||
|
`--reference` pode ser repetido. O áudio não é reconstruído.
|
||||||
|
|
||||||
|
## Busca de texto
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo guara search /dev/sdb "contrato" "cpf" --case-sensitive --max 500
|
||||||
|
```
|
||||||
|
|
||||||
|
Procura em UTF-8 e UTF-16 (`--no-utf16` desliga), inclusive no espaço livre e fora de partições. Mostra posição, partição e contexto. `--max` limita os resultados (padrão 200).
|
||||||
|
|
||||||
|
## Relatório
|
||||||
|
|
||||||
|
```bash
|
||||||
|
guara report s.json relatorio.html --case 2026-001 --examiner "Nome" --hash-source
|
||||||
|
```
|
||||||
|
|
||||||
|
Traz identificação do caso, origem, partições, resumo, hashes e a lista dos arquivos. `--hash-source` inclui o hash da origem inteira.
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
# O que o Guará suporta
|
# O que o Guará suporta
|
||||||
|
|
||||||
Matriz do que existe hoje (versão 1.0.0). Para o que vem a seguir, veja o [ROADMAP](../ROADMAP.md).
|
[English](../support.md) · **Português**
|
||||||
|
|
||||||
|
Matriz do que existe hoje (versão 1.0.0). Para o que vem a seguir, veja o [ROADMAP](../../ROADMAP.pt-BR.md).
|
||||||
|
|
||||||
## Tabelas de partição
|
## Tabelas de partição
|
||||||
|
|
||||||
@@ -99,4 +101,4 @@ A pré-visualização é lida direto do disco, sem gravar nada: imagem, vídeo,
|
|||||||
- Recuperar dados **sobrescritos**. Em SSD com TRIM o próprio disco pode zerar blocos apagados.
|
- Recuperar dados **sobrescritos**. Em SSD com TRIM o próprio disco pode zerar blocos apagados.
|
||||||
- Desbloquear celulares ou contornar senhas e travas de segurança.
|
- Desbloquear celulares ou contornar senhas e travas de segurança.
|
||||||
- Substituir uma ferramenta de extração de dispositivos móveis.
|
- Substituir uma ferramenta de extração de dispositivos móveis.
|
||||||
- Produzir laudo com validade pericial por si só: ainda não passou por validação externa (NIST CFTT). Veja o [ROADMAP](../ROADMAP.md).
|
- Produzir laudo com validade pericial por si só: ainda não passou por validação externa (NIST CFTT). Veja o [ROADMAP](../../ROADMAP.pt-BR.md).
|
||||||
+104
@@ -0,0 +1,104 @@
|
|||||||
|
# What Guará supports
|
||||||
|
|
||||||
|
[English](support.md) · [Português](pt-BR/suporte.md)
|
||||||
|
|
||||||
|
Matrix of what exists today (version 1.0.0). For what comes next, see the [ROADMAP](../ROADMAP.md).
|
||||||
|
|
||||||
|
## Partition tables
|
||||||
|
|
||||||
|
MBR and GPT. When the table fails, Guará searches for volumes by signature (NTFS, FAT, exFAT, ext, APFS, HFS+, BitLocker, LUKS) and also examines the **unpartitioned space**.
|
||||||
|
|
||||||
|
## File systems
|
||||||
|
|
||||||
|
"Metadata" means Guará reads the file system structure and returns **name, folder and dates**. Without it, recovery depends only on carving, which returns the content without a name.
|
||||||
|
|
||||||
|
| File system | Metadata | What is used | Limits |
|
||||||
|
|---|---|---|---|
|
||||||
|
| NTFS | ✅ | MFT, deleted records, creation, modification and access dates | Compressed and EFS files are skipped or marked as incomplete; attribute list handled partially |
|
||||||
|
| FAT12/16/32 | ✅ | Deleted entries, long names, dates | |
|
||||||
|
| exFAT | ✅ | Deleted entries, dates | Covered by a synthetic image; needs validation on more real media |
|
||||||
|
| ext2/3/4 | ✅ | Deleted inodes, old copies in the journal (ext4), free block map | |
|
||||||
|
| HFS+ | ✅ | Leftovers of catalog tree nodes, journal | |
|
||||||
|
| Btrfs | ✅ | Old versions of the trees; zlib, zstd and lzo extents | |
|
||||||
|
| XFS | ✅ | Freed inodes, names of freed entries, free space per group | Deletion tested only in simulation |
|
||||||
|
| APFS | 🟡 | Container, object map, file tree, snapshots, old nodes | No free-space map; deletion tested only in simulation |
|
||||||
|
| ReFS | ❌ | Only detected | Recovery through carving |
|
||||||
|
| Storage Spaces | ❌ | Not supported | |
|
||||||
|
|
||||||
|
In every case carving keeps running on the free space and the result is merged without duplicates.
|
||||||
|
|
||||||
|
## Encrypted volumes
|
||||||
|
|
||||||
|
Guará opens the volume with the **password or key you provide**, mounts a virtual disk and scans inside it. It does not crack passwords.
|
||||||
|
|
||||||
|
| Format | Accepted credentials |
|
||||||
|
|---|---|
|
||||||
|
| BitLocker | Password, recovery key (8 groups of 6 digits), `.BEK` file, clear key |
|
||||||
|
| LUKS1 and LUKS2 | Password, key file, volume key |
|
||||||
|
| FileVault 2 (Core Storage) | Password, recovery key, volume key |
|
||||||
|
|
||||||
|
Passwords are **never** written to the session file. With `--remember-keys` the session stores the already derived volume key, not the password. In the terminal, prefer `--ask-password` or the `GUARA_PASSWORD` variable over `--password`, which stays in the shell history.
|
||||||
|
|
||||||
|
## RAID and LVM
|
||||||
|
|
||||||
|
| Item | Support |
|
||||||
|
|---|---|
|
||||||
|
| RAID 0, 1, 4, 5, 6, 10 and linear from mdadm superblocks | ✅ including degraded (use `-` in `--member` for a missing disk) |
|
||||||
|
| RAID without metadata | ✅ `--raid` discovers level, stripe size, layout and order; `--raid-level`, `--raid-chunk-kb`, `--raid-layout` and `--raid-order` fix what you already know |
|
||||||
|
| LVM2 | ✅ linear, striped, mirrored and RAID |
|
||||||
|
| Storage Spaces | ❌ |
|
||||||
|
|
||||||
|
## Forensic images
|
||||||
|
|
||||||
|
| Format | Read | Write |
|
||||||
|
|---|---|---|
|
||||||
|
| Raw (dd, `.img`) | ✅ | ✅ with a bad sector error map |
|
||||||
|
| E01 and Ex01 (Expert Witness) | ✅ | ✅ with case metadata and segmentation |
|
||||||
|
| AFF4 | ✅ | ✅ |
|
||||||
|
|
||||||
|
`guara verify` recomputes the MD5 of an E01 or Ex01 image and compares it with the one stored in it.
|
||||||
|
|
||||||
|
## Carving: formats recognized by structure
|
||||||
|
|
||||||
|
The detectors read headers, blocks and internal sizes to return the **exact size** and a **confidence**, instead of cutting at a fixed number of bytes.
|
||||||
|
|
||||||
|
| Family | Formats |
|
||||||
|
|---|---|
|
||||||
|
| Image | JPEG, PNG, GIF, BMP, TIFF, ICO, HEIC, WebP |
|
||||||
|
| Document | PDF, DOC/XLS/PPT (OLE), DOCX/XLSX/PPTX/ODF/EPUB (ZIP), RTF |
|
||||||
|
| Video and audio | MP4/MOV, AVI, WAV, MP3, Matroska/WebM, Ogg, MPEG-TS, FLV, ASF/WMV, MIDI |
|
||||||
|
| Compressed | ZIP, 7z, RAR, gzip, zstd, ar |
|
||||||
|
| Database and system | SQLite, Windows registry (regf), EVTX, PST, pcap/pcapng, EXE/DLL (PE), ELF, SWF |
|
||||||
|
|
||||||
|
### Fragmented files
|
||||||
|
|
||||||
|
- **JPEG:** reassembled from up to three fragments (`jpegscan.rs`, `defrag.rs`).
|
||||||
|
- **MP4/MOV without an index (`moov`):** the index is rebuilt from an intact video from the **same camera or drone**, passed with `--reference`. Works with H.264 and HEVC. Audio is not reconstructed.
|
||||||
|
- Other formats only come out whole if they are contiguous; otherwise they come out truncated with low confidence.
|
||||||
|
|
||||||
|
## Metadata and preview
|
||||||
|
|
||||||
|
| Type | What is read |
|
||||||
|
|---|---|
|
||||||
|
| Photos | EXIF: camera, lens, serial number, date, GPS |
|
||||||
|
| PDF | Author, program, dates |
|
||||||
|
| Office and OpenDocument | Author, last modified by, company |
|
||||||
|
| MP4/MOV | Recording date, duration, resolution |
|
||||||
|
| SQLite | Schema, tables, blobs, dates, deleted rows from the free space of pages |
|
||||||
|
|
||||||
|
The preview is read straight from the disk, without writing anything: image, video, audio, PDF, text, Office, ZIP and hex.
|
||||||
|
|
||||||
|
## Platforms
|
||||||
|
|
||||||
|
| | CLI | Interface | Tests with real images |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Linux | ✅ | ✅ AppImage and deb | ✅ |
|
||||||
|
| Windows | ✅ | ✅ msi and exe | build and synthetic tests only |
|
||||||
|
| macOS | ✅ | ✅ dmg | build and synthetic tests only |
|
||||||
|
|
||||||
|
## What Guará does not do
|
||||||
|
|
||||||
|
- Recover **overwritten** data. On an SSD with TRIM the disk itself may zero deleted blocks.
|
||||||
|
- Unlock phones or bypass passwords and security locks.
|
||||||
|
- Replace a mobile device extraction tool.
|
||||||
|
- Produce a report with forensic validity by itself: it has not been through external validation (NIST CFTT) yet. See the [ROADMAP](../ROADMAP.md).
|
||||||
Reference in new issue
Block a user