
Encuentra credenciales en capturas de pantalla, guárdalas en tu gestor de secretos y redáctalas irreversiblemente de la imagen — local, sin conexión, basado en OCR.
Encuentra credenciales en capturas de pantalla, extráelas a un gestor de secretos y
redáctelas irreversiblemente de las imágenes — para que los secretos no se pudran en tus
notas, capturas de pantalla y ~/Desktop.
Local. Fuera de línea. Silencioso. Sin red, sin telemetría por defecto.
screenscrub une dos categorías de herramientas existentes: los redactores GUI (Xnapper, Shhshot, macshot) difuminan datos personales a mano pero no distinguen un secreto de una dirección ni capturan lo que ocultan; los escáneres de secretos (gitleaks, TruffleHog) encuentran credenciales reales pero solo en texto, nunca en un PNG. screenscrub trae detección de nivel gitleaks — más un pack de equipo rojo y análisis de entropía — a píxeles, sin interfaz gráfica: captura cada secreto en tu gestor, redacta la imagen irreversiblemente, y vuelve a aplicar OCR al resultado para demostrar que el secreto ha desaparecido.
Una red de seguridad, no una garantía — screenscrub nunca afirma que una imagen esté "garantizada como limpia"; tanto el OCR como la detección fallan en cosas, así que siempre revisa los resultados. Lee esto antes de confiar en él.
screenscrub scan ~/Screenshots # simulación: detecta + reporta, no escribe nada
screenscrub clean ~/Screenshots --out ~/clean \ # extrae, redacta, verifica, pone en cuarentena
--sink file://./secrets.age --yes
screenscrub verify ~/clean # demuestra que una carpeta está limpia (código de salida ≠0 si no lo está)
screenscrub clean --keep-originals ./tmp
Limpieza de 7 imagen(es) en ./tmp (7 trabajador(es))…
[1/7] tmp/ssh.jpg — 6 región(es) → tmp/ssh.redacted.jpg ✓ verificado
[2/7] tmp/key.jpg — 13 región(es) → tmp/key.redacted.jpg ✓ verificado
[3/7] tmp/test2.jpg — 12 región(es) → tmp/test2.redacted.jpg ✓ verificado
[4/7] tmp/test5.jpg — 13 región(es) → tmp/test5.redacted.jpg ✓ verificado
[5/7] tmp/test3.jpg — error: falló la verificación: 4 región(es) de secreto aún detectables en tmp/test3.redacted.jpg; original conservado
[6/7] tmp/test4.jpg — error: falló la verificación: 9 región(es) de secreto aún detectables en tmp/test4.redacted.jpg; original conservado
[7/7] tmp/test6.jpg — error: falló la verificación: 7 región(es) de secreto aún detectables en tmp/test6.redacted.jpg; original conservado
7/7 archivo(s) marcados, 382 región(es) en total, 3 archivo(s) con error/sin verificar.
Por tipo:
high-entropy 343
keyword-secret 15
db-connection-uri 10
github-pat 6
unix-crypt-hash 6
aws-access-key 1
stripe-key 1
Necesita atención manual (3):
tmp/test3.jpg — error: falló la verificación: 4 región(es) de secreto aún detectables en tmp/test3.redacted.jpg; original conservado
tmp/test4.jpg — error: falló la verificación: 9 región(es) de secreto aún detectables en tmp/test4.redacted.jpg; original conservado
tmp/test6.jpg — error: falló la verificación: 7 región(es) de secreto aún detectables en tmp/test6.redacted.jpg; original conservado
| Antes — valores secretos visibles | Después de clean — redactado irreversiblemente |
![]() |
![]() |
La misma captura de pantalla antes y después de clean: cada valor secreto se decodifica a píxeles, se encuadra y se recodifica a una nueva imagen (irreversible) — las etiquetas y la estructura siguen siendo legibles.
Requiere el binario de OCR tesseract en PATH:
brew install tesseractwinget install UB-Mannheim.TesseractOCR (o el instalador de UB Mannheim)apt-get install tesseract-ocrLuego construye:
go build -o screenscrub ./cmd/screenscrub
Se compila de forma cruzada para macOS (arm64/amd64) y Windows (amd64) — usa tesseract mediante subprocesos en lugar de cgo. Solo probado en macOS.
scan <directorio|archivo> — simulaciónDetecta y reporta; no escribe nada.
screenscrub scan ~/Screenshots --ignore 'node_modules/**' --ignore '*.thumb.png'
screenscrub scan shot.png --json # informe legible por máquina
screenscrub scan ~/Screenshots --preview ~/review # revisa visualmente lo que clean redactaría
--preview <directorio> escribe una copia no destructiva de cada imagen marcada con cada
región detectada delineada (no rellena), para que puedas confirmar lo que clean
redactaría antes de comprometerte. ⚠️ Estas copias aún contienen los secretos — el directorio
se crea con permisos 0700 y no debe compartirse.
El informe termina con un resumen: un desglose por tipo y una lista explícita de "Necesita atención manual" — archivos que dieron error, fallaron en la verificación o no produjeron ningún texto OCR en lo que debería ser una captura de pantalla (un fallo silencioso del OCR se lee igual que una imagen limpia, por lo que se muestra en lugar de confiar en ello).
scan --fail-on-findings sale con código distinto de cero cuando se detecta algo — una puerta de
pre-commit/CI.
clean <directorio|archivo> — extrae, redacta, pone en cuarentenaSCREENSCRUB_PASSPHRASE=… screenscrub clean ~/Screenshots \
--out ~/Screenshots/clean \
--sink file://./secrets.age \
--yes
Para cada imagen con hallazgos, clean:
<nombre>.redacted.png en --out (o junto al original),<out>/quarantine/ cifrado con age.Los secretos van al sumidero que pases con --sink: archivo age (por defecto), 1Password
(op://), KeePassXC (keepassxc://), Llavero de macOS (keychain://), o
HashiCorp Vault (vault://) — o destinatarios age respaldados por hardware (YubiKey,
Touch ID). Consulta Sumideros de secretos.
Banderas: