
Encontre credenciais em capturas de tela, salve-as no seu gerenciador de segredos e remova-as irreversivelmente da imagem — local, offline, baseado em OCR.
Encontre credenciais em capturas de tela, extraia-as para um gerenciador de segredos e redija-as irreversivelmente das imagens — para que segredos não apodreçam em suas notas, capturas de tela e ~/Desktop.
Local. Offline. Silencioso. Sem rede, sem telemetria por padrão.
screenscrub faz a ponte entre duas categorias de ferramentas existentes: redatores GUI (Xnapper, Shhshot, macshot) desfocam PII manualmente, mas não conseguem distinguir um segredo de um endereço nem capturar o que ocultam; scanners de segredos (gitleaks, TruffleHog) encontram credenciais reais, mas apenas em texto, nunca em um PNG. screenscrub traz detecção de nível gitleaks — além de um pacote de red team e análise de entropia — para pixels, de forma headless: ele captura cada segredo para seu gerenciador, redige irreversivelmente a imagem e re-OCR o resultado para provar que o segredo desapareceu.
Uma rede de segurança, não uma garantia — screenscrub nunca afirma que uma imagem está "garantidamente limpa"; tanto OCR quanto detecção erram coisas, então sempre confira os resultados. Leia isto antes de confiar nele.
screenscrub scan ~/Screenshots # dry run: detect + report, no writes
screenscrub clean ~/Screenshots --out ~/clean \ # extract, redact, verify, quarantine
--sink file://./secrets.age --yes
screenscrub verify ~/clean # prove a folder is clean (exit≠0 if not)
screenscrub clean --keep-originals ./tmp
Cleaning 7 image(s) in ./tmp (7 worker(s))…
[1/7] tmp/ssh.jpg — 6 region(s) → tmp/ssh.redacted.jpg ✓ verified
[2/7] tmp/key.jpg — 13 region(s) → tmp/key.redacted.jpg ✓ verified
[3/7] tmp/test2.jpg — 12 region(s) → tmp/test2.redacted.jpg ✓ verified
[4/7] tmp/test5.jpg — 13 region(s) → tmp/test5.redacted.jpg ✓ verified
[5/7] tmp/test3.jpg — error: verification failed: 4 secret region(s) still detectable in tmp/test3.redacted.jpg; original preserved
[6/7] tmp/test4.jpg — error: verification failed: 9 secret region(s) still detectable in tmp/test4.redacted.jpg; original preserved
[7/7] tmp/test6.jpg — error: verification failed: 7 secret region(s) still detectable in tmp/test6.redacted.jpg; original preserved
7/7 file(s) flagged, 382 region(s) total, 3 file(s) errored/unverified.
By kind:
high-entropy 343
keyword-secret 15
db-connection-uri 10
github-pat 6
unix-crypt-hash 6
aws-access-key 1
stripe-key 1
Needs manual attention (3):
tmp/test3.jpg — error: verification failed: 4 secret region(s) still detectable in tmp/test3.redacted.jpg; original preserved
tmp/test4.jpg — error: verification failed: 9 secret region(s) still detectable in tmp/test4.redacted.jpg; original preserved
tmp/test6.jpg — error: verification failed: 7 secret region(s) still detectable in tmp/test6.redacted.jpg; original preserved
| Antes — valores de segredo visíveis | Após clean — irreversivelmente redigido |
![]() |
![]() |
A mesma captura de tela antes e depois de clean: cada valor de segredo é decodificado em pixels, encapsulado e recodificado em uma nova imagem (irreversível) — rótulos e estrutura permanecem legíveis.
Requer o binário tesseract OCR no PATH:
brew install tesseractwinget install UB-Mannheim.TesseractOCR (ou o instalador UB Mannheim)apt-get install tesseract-ocrEntão compile:
go build -o screenscrub ./cmd/screenscrub
Compila de forma cruzada para macOS (arm64/amd64) e Windows (amd64) — ele utiliza o tesseract externamente em vez de usar cgo. Apenas testado no macOS.
scan <dir|file> — execução simuladaDetecta e relata; não escreve nada.
screenscrub scan ~/Screenshots --ignore 'node_modules/**' --ignore '*.thumb.png'
screenscrub scan shot.png --json # machine-readable report
screenscrub scan ~/Screenshots --preview ~/review # eyeball what clean would redact
--preview <dir> escreve uma cópia não destrutiva de cada imagem sinalizada com cada região detectada delineada (não preenchida), para que você possa confirmar o que clean redigiria antes de confirmar. ⚠️ Essas cópias ainda contêm os segredos — o diretório é criado com 0700 e não deve ser compartilhado.
O relatório termina com um resumo: uma discriminação por tipo e uma lista explícita "Precisa de atenção manual" — arquivos que apresentaram erro, falharam na verificação ou produziram nenhum texto OCR no que deveria ser uma captura de tela (uma falha silenciosa de OCR é lida de forma idêntica a uma imagem limpa, por isso é exibida em vez de ser confiada).
scan --fail-on-findings sai com código não zero quando algo é detectado — uma porta de pre-commit/CI.
clean <dir|file> — extrair, redigir, colocar em quarentenaSCREENSCRUB_PASSPHRASE=… screenscrub clean ~/Screenshots \
--out ~/Screenshots/clean \
--sink file://./secrets.age \
--yes
Para cada imagem com descobertas, clean:
<name>.redacted.png em --out (ou ao lado da fonte),<out>/quarantine/ criptografado com age.Os segredos vão para o destino que você passar em --sink: arquivo age (padrão), 1Password (op://), KeePassXC (keepassxc://), macOS Keychain (keychain://) ou HashiCorp Vault (vault://) — ou destinatários age com suporte de hardware (YubiKey, Touch ID). Veja Destinos de segredos.
Flags: