
Trova le credenziali negli screenshot, salvale nel tuo gestore di segreti e oscurale in modo irreversibile dall'immagine — locale, offline, basato su OCR.
Trova credenziali negli screenshot, estraile in un gestore di segreti e cancellale irreversibilmente dalle immagini — così i segreti non marciscano nelle note, negli screenshot e in ~/Desktop.
Locale. Offline. Silenzioso. Nessuna rete, nessuna telemetria per impostazione predefinita.
screenscrub collega due categorie di strumenti esistenti: i redattori GUI (Xnapper, Shhshot, macshot) offuscano manualmente i dati personali ma non sanno distinguere un segreto da un indirizzo né catturare ciò che nascondono; gli scanner di segreti (gitleaks, TruffleHog) trovano vere credenziali ma solo nel testo, mai in un PNG. screenscrub porta il rilevamento di livello gitleaks — più un pacchetto red-team e analisi di entropia — ai pixel, in modalità headless: cattura ogni segreto nel tuo gestore, cancella irreversibilmente l'immagine e ri-OCRizza il risultato per dimostrare che il segreto è sparito.
Una rete di sicurezza, non una garanzia — screenscrub non afferma mai che un'immagine sia "garantita pulita"; sia l'OCR che il rilevamento possono sbagliare, quindi dai sempre un'occhiata ai risultati. Leggi questo prima di fare affidamento su di esso.
screenscrub scan ~/Screenshots # prova a secco: rileva + segnala, non scrive
screenscrub clean ~/Screenshots --out ~/clean \ # estrai, oscura, verifica, metti in quarantena
--sink file://./secrets.age --yes
screenscrub verify ~/clean # dimostra che una cartella è pulita (exit≠0 se non lo è)
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
| Prima — valori segreti visibili | Dopo clean — cancellati irreversibilmente |
![]() |
![]() |
Lo stesso screenshot prima e dopo clean: ogni valore segreto viene decodificato in pixel, incorniciato e ricodificato in una nuova immagine (irreversibile) — etichette e struttura rimangono leggibili.
Richiede il binario OCR tesseract disponibile su PATH:
brew install tesseractwinget install UB-Mannheim.TesseractOCR (o l'installer UB Mannheim)apt-get install tesseract-ocrPoi costruisci:
go build -o screenscrub ./cmd/screenscrub
Compilazione incrociata per macOS (arm64/amd64) e Windows (amd64) — si appoggia a tesseract tramite shell anziché tramite cgo. Testato solo su macOS.
scan <dir|file> — prova a seccoRileva e segnala; non scrive nulla.
screenscrub scan ~/Screenshots --ignore 'node_modules/**' --ignore '*.thumb.png'
screenscrub scan shot.png --json # rapporto leggibile da macchina
screenscrub scan ~/Screenshots --preview ~/review # guarda cosa clean oscurerebbe
--preview <dir> scrive una copia non distruttiva di ogni immagine segnalata con ogni regione rilevata delineata (non riempita), così puoi confermare cosa clean cancellerebbe prima di procedere. ⚠️ Queste copie contengono ancora i segreti — la directory viene creata con permessi 0700 e non deve essere condivisa.
Il rapporto termina con un riepilogo: una suddivisione per tipo e un elenco esplicito "Richiede attenzione manuale" — file che hanno generato errori, fallito la verifica o prodotto nessun testo OCR su ciò che dovrebbe essere uno screenshot (una mancata lettura OCR silenziosa è identica a un'immagine pulita, quindi viene segnalata piuttosto che accettata come tale).
scan --fail-on-findings esce con codice diverso da zero quando viene rilevato qualcosa — un gate pre-commit/CI.
clean <dir|file> — estrai, oscura, metti in quarantenaSCREENSCRUB_PASSPHRASE=… screenscrub clean ~/Screenshots \
--out ~/Screenshots/clean \
--sink file://./secrets.age \
--yes
Per ogni immagine con risultati, clean:
<nome>.redacted.png in --out (o vicino all'originale),<out>/quarantine/ crittografato con age.I segreti vengono inviati al sink passato con --sink: file age (predefinito), 1Password (op://), KeePassXC (keepassxc://), Keychain di macOS (keychain://) o HashiCorp Vault (vault://) — o destinatari age basati su hardware (YubiKey, Touch ID). Vedi Sink di segreti.
Flag: