Files
Lucas RayanandClaude Sonnet 5 76e4466652 feat(update): unify the updater with Sabiá's Gitea-based mechanism
Replaces the signed tauri-plugin-updater (latest.json manifest, minisign
key pair) with the same simple mechanism Sabiá already uses: query the
Gitea Releases API directly, download the matching platform archive,
verify its SHA-256 checksum, and swap the binary in place. The CI job
that built the old latest.json manifest is removed in the next commit,
alongside an unrelated runner-routing change to the same workflow file.

- New guara-core::update module (check/apply), ported from
  sabia-core::update and adapted to Guará's own release asset naming
  (guara-<tag>-<platform>.tar.gz, matching scripts/package-cli.sh).
- New Engine::update_check / Engine::update_apply, wired into the RPC
  service for the browser UI.
- New CLI subcommand: "guara update" (check) and "guara update --apply"
  (download, verify, replace), mirroring "sabia update".
- GUI: replaced the Tauri plugin-updater flow (download_and_install,
  update-progress events, in-app restart) with a call to the new
  update_check/update_apply commands. The desktop app can no longer
  self-install in one click — it now points the user to the Releases
  page, same as Sabiá's desktop app already does.
- Removed tauri-plugin-updater, createUpdaterArtifacts and the
  updater.pubkey config, the signing-key loading in build-gui.sh, the
  CI step testing the old latest.json generator, and the now-unused
  make-latest-json.py/test_make_latest_json.py scripts.
- Documented the break for existing installs in CHANGELOG.md /
  CHANGELOG.pt-BR.md: versions up to 1.3.2 won't find this release
  automatically and need one manual download.

Trade-off accepted knowingly: SHA-256 verifies integrity against
Gitea's own API but, unlike the retired signed mechanism, does not
protect against a compromised Gitea server independently of it. This
is Lucas's own self-hosted instance, not a third-party mirror.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VAyr8d7HuAdUGB6aA5xmDD
2026-10-30 22:03:28 -03:00

7.6 KiB

Referência do terminal

English · 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> <arquivo> Relatório imprimível, HTML ou PDF (pela extensão do arquivo)
sign keygen|file|verify|recovery Assinaturas Ed25519 de manifestos, relatórios e arquivos; confere uma pasta de recuperação inteira
audit Trilha de auditoria de cada ação (quem, quando, o quê); --verify confere o encadeamento por hash
sessions Sessões salvas automaticamente
ui Interface no navegador (127.0.0.1, com token)

--json existe em devices, inspect, health e scan.

Varredura

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

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

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.

# 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

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).

Assinatura digital

guara sign keygen                                # cria o par de chaves (nunca sobrescreve uma existente)
guara sign file relatorio.pdf                    # grava relatorio.pdf.assinatura.json
guara sign verify relatorio.pdf --trust 1a2b:3c4d:5e6f:7a8b:9c0d
guara sign recovery /mnt/outro-disco/Recuperados # assinatura do manifesto e o hash de cada arquivo

Com uma chave configurada, recover e report assinam sozinhos o manifesto e o relatório. A assinatura cobre o SHA-256, o tamanho, o nome, a hora e o assinante; qualquer pessoa confere com o Guará ou com o openssl (é Ed25519 comum sobre a mensagem documentada em crates/guara-core/src/sign.rs). Uma assinatura válida prova que o arquivo não mudou desde que foi assinado por quem tem a chave; para saber de quem é a chave, compare a impressão digital com a que o perito publicou fora da máquina (--trust). A chave privada fica em assinatura.key na pasta de configuração (ou onde GUARA_SIGNING_KEY apontar), com permissão 0600; guarde uma cópia e considere mantê-la num volume cifrado. A hora é a do relógio da máquina que assinou, não um carimbo de tempo de terceiros.

Trilha de auditoria

Toda ação que mexe na evidência é acrescentada a auditoria.jsonl na pasta de configuração (ou ao arquivo indicado em GUARA_AUDIT_LOG): abrir uma origem (inspect, scan), recover, image, hash, search, verify, exportações e sessões. Cada linha traz a hora (UTC), o usuário do sistema (o que está por trás do sudo), a máquina, a versão do Guará e os detalhes; defina GUARA_EXAMINER para registrar também o nome do perito. Senhas e chaves nunca são gravadas.

guara audit                  # lista as entradas
guara audit --tail 20 --json
guara audit --verify         # confere a cadeia; sai com erro se estiver quebrada

As linhas são encadeadas: cada uma leva o SHA-256 do hash anterior mais o próprio conteúdo, então editar, remover ou reordenar uma entrada é detectado e o --verify diz qual. Cortar o fim do arquivo não é detectável só pelo arquivo: guarde o hash que o --verify imprime em outro lugar (por exemplo nas notas do caso).

Vídeo sem índice (MP4 sem moov)

Passe um vídeo íntegro da mesma câmera ou drone para o Guará refazer o índice:

guara scan cartao.img --reference VIDEO_BOM.MP4 --category video

--reference pode ser repetido. O áudio não é reconstruído.

Busca de texto

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

guara report s.json relatorio.html --case 2026-001 --examiner "Nome" --hash-source

Traz identificação do caso, origem, partições, resumo, hashes, a situação da trilha de auditoria e a lista dos arquivos. --hash-source inclui o hash da origem inteira. O formato segue a extensão: relatorio.pdf gera um PDF A4 (fontes padrão, nada externo); qualquer outra gera HTML.

update — atualizações

guara update           # verifica se há versão nova
guara update --apply   # baixa, confere o SHA-256 e troca o executável