
Trouvez des identifiants dans des captures d'écran, enregistrez-les dans votre gestionnaire de secrets, et masquez-les de manière irréversible dans l'image — local, hors ligne, basé sur l'OCR.
Trouvez des identifiants dans les captures d'écran, extrayez-les vers un gestionnaire de secrets, et
masquez-les irréversiblement des images — pour que les secrets ne pourrissent pas dans vos
notes, captures d'écran et ~/Desktop.
Local. Hors ligne. Silencieux. Aucun réseau, aucune télémétrie par défaut.
screenscrub fait le pont entre deux catégories d'outils existants : les masqueurs d'interface graphique (Xnapper, Shhshot, macshot) floutent les données personnelles à la main mais ne peuvent pas distinguer un secret d'une adresse ni capturer ce qu'ils cachent ; les scanners de secrets (gitleaks, TruffleHog) trouvent de vrais identifiants mais uniquement dans du texte, jamais dans un PNG. screenscrub apporte une détection de qualité gitleaks — plus un pack d'équipe rouge et une analyse d'entropie — aux pixels, sans tête : il capture chaque secret dans votre gestionnaire, masque irréversiblement l'image, et ré-OCRel le résultat pour prouver que le secret a disparu.
Un filet de sécurité, pas une garantie — screenscrub ne prétend jamais qu'une image est "garantie propre" ; l'OCR et la détection peuvent tous deux manquer des choses, donc vérifiez toujours les résultats. Lisez ceci avant de vous y fier.
screenscrub scan ~/Screenshots # essai à blanc : détecte + rapporte, n'écrit rien
screenscrub clean ~/Screenshots --out ~/clean \ # extrait, masque, vérifie, met en quarantaine
--sink file://./secrets.age --yes
screenscrub verify ~/clean # prouve qu'un dossier est propre (exit≠0 si non)
screenscrub clean --keep-originals ./tmp
Nettoyage de 7 image(s) dans ./tmp (7 worker(s))…
[1/7] tmp/ssh.jpg — 6 région(s) → tmp/ssh.redacted.jpg ✓ vérifié
[2/7] tmp/key.jpg — 13 région(s) → tmp/key.redacted.jpg ✓ vérifié
[3/7] tmp/test2.jpg — 12 région(s) → tmp/test2.redacted.jpg ✓ vérifié
[4/7] tmp/test5.jpg — 13 région(s) → tmp/test5.redacted.jpg ✓ vérifié
[5/7] tmp/test3.jpg — erreur : échec de la vérification : 4 région(s) secrète(s) encore détectables dans tmp/test3.redacted.jpg ; original conservé
[6/7] tmp/test4.jpg — erreur : échec de la vérification : 9 région(s) secrète(s) encore détectables dans tmp/test4.redacted.jpg ; original conservé
[7/7] tmp/test6.jpg — erreur : échec de la vérification : 7 région(s) secrète(s) encore détectables dans tmp/test6.redacted.jpg ; original conservé
7/7 fichier(s) signalé(s), 382 région(s) au total, 3 fichier(s) en erreur/non vérifié(s).
Par type :
haute-entropie 343
mot-clé-secret 15
uri-connexion-bdd 10
github-pat 6
unix-crypt-hash 6
aws-access-key 1
stripe-key 1
Nécessite une attention manuelle (3) :
tmp/test3.jpg — erreur : échec de la vérification : 4 région(s) secrète(s) encore détectables dans tmp/test3.redacted.jpg ; original conservé
tmp/test4.jpg — erreur : échec de la vérification : 9 région(s) secrète(s) encore détectables dans tmp/test4.redacted.jpg ; original conservé
tmp/test6.jpg — erreur : échec de la vérification : 7 région(s) secrète(s) encore détectables dans tmp/test6.redacted.jpg ; original conservé
| Avant — valeurs secrètes visibles | Après clean — masqué irréversiblement |
![]() |
![]() |
La même capture d'écran avant et après clean : chaque valeur secrète est décodée en pixels, encadrée, et ré-encodée dans une nouvelle image (irréversible) — les étiquettes et la structure restent lisibles.
Nécessite le binaire OCR tesseract sur le PATH :
brew install tesseractwinget install UB-Mannheim.TesseractOCR (ou l'installateur UB Mannheim)apt-get install tesseract-ocrPuis construisez :
go build -o screenscrub ./cmd/screenscrub
Se compile en croisé pour macOS (arm64/amd64) et Windows (amd64) — il appelle tesseract via un sous-processus plutôt que d'utiliser cgo. Testé uniquement sur macOS.
scan <dossier|fichier> — essai à blancDétecte et rapporte ; n'écrit rien.
screenscrub scan ~/Screenshots --ignore 'node_modules/**' --ignore '*.thumb.png'
screenscrub scan shot.png --json # rapport lisible par machine
screenscrub scan ~/Screenshots --preview ~/review # visualisez ce que clean masquerait
--preview <dossier> écrit une copie non destructive de chaque image signalée avec chaque
région détectée délimitée (pas remplie), afin que vous puissiez confirmer ce que clean
masquerait avant de vous engager. ⚠️ Ces copies contiennent encore les secrets — le dossier
est créé avec les droits 0700 et ne doit pas être partagé.
Le rapport se termine par un récapitulatif : une répartition par type et une liste explicite "Nécessite une attention manuelle" — les fichiers en erreur, ayant échoué à la vérification, ou n'ayant produit aucun texte OCR sur ce qui devrait être une capture d'écran (un échec silencieux de l'OCR se lit comme une image propre, donc il est signalé plutôt que pris pour acquis).
scan --fail-on-findings se termine avec un code non nul si quelque chose est détecté — une
porte de pré-commit/CI.
clean <dossier|fichier> — extraire, masquer, mettre en quarantaineSCREENSCRUB_PASSPHRASE=… screenscrub clean ~/Screenshots \
--out ~/Screenshots/clean \
--sink file://./secrets.age \
--yes
Pour chaque image avec des résultats, clean :
<nom>.redacted.png dans --out (ou à côté de la source),<out>/quarantine/ chiffré avec age.Les secrets vont dans le puits que vous passez à --sink : fichier age (par défaut), 1Password
(op://), KeePassXC (keepassxc://), Trousseau macOS (keychain://), ou
HashiCorp Vault (vault://) — ou des destinataires age matériels (YubiKey,
Touch ID). Voir Puits de secrets.
Drapeaux :