Aggirare un CAPTCHA per divertimento e divulgazione – Parte 2

Questo è il secondo articolo della serie sui CAPTCHA – meglio tornare al primo se non l’hai già letto.

Anatomia di un CAPTCHA: osservare per capire

Nell’immagine seguente trovate un insieme di esempi di sei CAPTCHA presi dal sito vodafone.it.

Tanto per iniziare, osserviamo che:

  • il CAPTCHA è sempre formato da cinque caratteri, numeri o lettere. Per evitare ambiguità, alcuni caratteri come lo zero o la “O” non compaiono mai;
  • le lettere sono distorte, in particolare sono “stirate” verticalmente o orizzontalmente;
  • c’è del rumore di fondo dietro ogni immagine (apparentemente casuale).

Proprio l’ultimo punto rappresenta il punto di partenza ideale per il riconoscimento del CAPTCHA: se fosse possibile rimuovere il rumore, almeno in buona parte, si semplificherebbe parecchio il  riconoscimento. Come si può fare?

Come rimuovere il rumore di fondo

Esistono parecchie tecniche, dette senza troppa fantasia di riduzione del rumore, che potrebbero essere applicate in linea di principio in questo caso. In realtà non mi tufferò a spiegarle qui perchè esiste un modo particolarmente semplice di risolvere il problema senza neanche scomodarle!
Il sistema si basa su un piccolo difetto nella procedura di generazione di queste immagini, che i più attenti avranno probabilmente già notato. Guardando bene le immagini, infatti, ci si accorge che il rumore di fondo non è casuale, ma identico in ogni CAPTCHA!

Sovrapponendo le immagini si vede a colpo d’occhio:

Animazione che mostra la sovrapposizione di CAPTCHA

A questo punto, ragionando per differenza su più di CAPTCHA, è possibile ricostruire una traccia quasi perfetta dello sfondo originario. Io ho usato un programmino ad hoc che confronta un centinaio di immagini, con il risultato che si vede sulla destra qui sotto, anche se con un po’ di pazienza si potrebbe fare anche manualmente.

Illustrazione dell'estrazione dello sfondo da più CAPTCHA

Dettagli tecnici per gli appassionati: l’algoritmo, per ogni pixel, calcola la moda della sfumatura di grigio sull’insieme di immagini in esame. Il concetto è che il valore che si ripete più frequentemente sarà probabilmente quello dello sfondo; c’è poi una piccola correzione per escludere i valori troppo vicini al nero, che con ogni probabilità appartengono alle lettere.

Una volta nota l’immagine con il fondo del rumore, basta una “sottrazione per immagini” per ottenere un’immagine “pulita”, come nell’esempio seguente:

Sottrazione dello sfondo da un CAPTCHA

Altro dettaglio tecnico: la sottrazione non viene effettuata per i pixel molto vicini al nero nell’immagine da ripulire, in quanto con ogni probabilità appartengono alle lettere.

Prossimi passi

Arrivati a questo punto abbiamo un’immagine abbastanza buona. Il prossimo problema sarà quello di dividere i caratteri l’uno dall’altro (per leggerli individualmente, proprio come fanno le persone), e sarà affrontato nella terza parte di questa serie.

Tutto chiaro finora? Aspetto i vostri commenti!

5 Comments

  • Eccellente 🙂

  • Complimenti veramente interessante,
    una curiosità, cosa utilizzi per manipolare
    le immagini ?

  • Le immagini di questo sito sono state create tutte con GIMP, che tra parentesi consiglio a chiunque abbia voglia di investire un po’ di tempo su uno strumento dalle grandi potenzialità gratuito. L’alternativa sarebbe Adobe Photoshop, che discutibilmente offre anche qualcosa in più, però è parecchio costoso.

  • Avevo già sentito parlare della tecnologia OCR ma mai in una guida così spettacolare: Da far tremare le ginocchia aziende, giochi online e altri siti su server privati la cui la stabilità del sistema dipende spesso da queste piccole immagini “salva scherzetti”.
    Chissà se un bot munito di script OCR sarebbe capace di intasare un database di qualsiasi blog con recaptha/captha che siano…

    Veramente affascinante, avrai presto un trackback anche dal nostro piccolo blog!

  • Diciamo che la maggior parte dei CAPTCHA è fatta meglio di questo, quindi le tecniche OCR funzionano meno. Ciò detto si tratta come al solito di un gioco “gatto-topo”: da una parte le tecnologie CAPTCHA migliorano, dall’altra i computer sono sempre più in grado di emulare le diverse abilità del cervello umano, quindi non si puà mai stare del tutto tranquilli!

    Come al solito dipende anche da cosa si sta proteggendo: è chiaro che il CAPTCHA è una tecnica “economica” che può andar bene per entità di modesto valore.

Join the Discussion

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>