Sky
Vittorio vb Bertola
Affacciato sul Web dal 1995

Ven 22 - 10:01
Ciao, essere umano non identificato!
Italiano English Piemonteis
home
home
home
chi sono
chi sono
guida al sito
guida al sito
novità nel sito
novità nel sito
licenza
licenza
contattami
contattami
blog
near a tree [it]
near a tree [it]
vecchi blog
vecchi blog
personale
documenti
documenti
foto
foto
video
video
musica
musica
attività
net governance
net governance
cons. comunale
cons. comunale
software
software
aiuto
howto
howto
guida a internet
guida a internet
usenet e faq
usenet e faq
il resto
il piemontese
il piemontese
conan
conan
mononoke hime
mononoke hime
software antico
software antico
lavoro
consulenze
consulenze
conferenze
conferenze
job placement
job placement
business angel
business angel
siti e software
siti e software
admin
login
login
your vb
your vb
registrazione
registrazione
domenica 7 Ottobre 2007, 14:10

Hack the captcha

Come passare una buona domenica mattina svagandosi un po’? Beh, non so voi, ma io l’ho passata cercando di craccare un captcha, così per divertimento.

Immagino che tutti sappiate cos’è un captcha: è una di quelle immaginine contenenti del testo deformato, che vanno di moda per impedire ai bot l’accesso ad un determinato servizio online, lasciando passare gli umani. La capacità di riconoscere dei caratteri deformati è semplice per un essere umano, ma fuori portata dei computer, non essendo algoritmica. Anche io avevo un captcha fatto in casa sul blog precedente (qui non ce l’ho perchè uso Akismet, un filtro antispam euristico).

Tutto bene? Beh, no, in realtà i captcha sono una maledizione per molti e andrebbero abbandonati, e qui potete scoprire il perchè secondo il W3C. Ad esempio se ci vedete poco o nulla non potete superarli, alla faccia dell’accessibilità del web. (Apprezzo quindi Vodafone che, sul captcha per inviare SMS gratis dal 190 online, ha recentemente aggiunto un pulsante “leggi il codice”, che aiuta chi ci vede poco.)

Quello che volevo craccare io era un captcha semplicissimo: tre caratteri (numeri o lettere maiuscole) scritti in rosso su fondo bianco, con due barre orizzontali. C’è voluta un’oretta – più che altro perchè la documentazione di Perlmagick è sostanzialmente inesistente, tanto è vero che le mie pur limitate abilità nell’uso della libreria sforano già nell’esoterico – per scrivere una paginetta di Perl che aprisse l’immagine, sostituisse le due barre orizzontali con due barre bianche, poi ricostruisse i caratteri sottostanti con un algoritmo semplicissimo: se i pixel sopra e sotto sono entrambi rossi, coloralo di rosso; se uno solo è rosso, coloralo di rosa.

A questo punto, si fa una conversione in bianco e nero (formato PBM) e si dà tutto in pasto a GNU Ocrad, uno dei rarissimi OCR liberi, che ha pure l’interfaccia Perl. All’inizio Ocrad non ci beccava una mazza, e ho capito esaminando le immagini che il problema erano i pixel sparsi che restavano dopo la conversione in bianco e nero: per cui ho applicato una funzione di soglia sulla luminosità – che mi sono riscritto io, non riuscendo a capire come funzionasse quella integrata in Perlmagick – e ho cancellato prima della conversione tutti i pixel che non fossero sufficientemente scuri.

Con un po’ di prove, ho trovato i valori ottimali della soglia, e visto che essi variavano da immagine a immagine (ne avevo una decina di prova) ho scritto un algoritmo iterativo per provare su ogni immagine con soglie crescenti, e prendere una decisione a maggioranza. Poi ho aggiunto un po’ di intelligenza sparsa – che so, se trovi “l” (elle minuscola) allora è “1” (uno) – e ho raggiunto una percentuale di successo attorno al 75%, che per un captcha va benissimo, visto che se sbagli basta riprovare, come farebbe un umano qualsiasi.

Poi ci ho messo attorno la fuffa ormai banale (basata su LWP e figli) che scarica la pagina, scarica l’immagine, la dà in pasto al frullino, compila in automatico la form e la invia, non dimenticando di cancellare i cookie ad ogni giro.

Alla fine non funziona, perchè il mio captcha è dentro un sistema di votazione online, e anche se la risposta ottenuta dal sito è positiva probabilmente c’è un controllo lato server sull’indirizzo IP; e quindi non riesco a barare. Ma non era questo l’obiettivo; il punto era la sfida intellettuale di riuscire a craccare il captcha e il controllo sui cookie, e quello è stato raggiunto pienamente.

Comunque, sono ancora un dilettante: qui c’è un tipo che dichiara di averne sconfitti a decine. Naturalmente, l’attacco si basa sul fatto che l’algoritmo di generazione del captcha è prevedibile, e molto poco vario (basterebbe cambiare font, deformare i caratteri, insomma darsi un minimo da fare… persino il mio captcha fatto in casa in dieci minuti aveva i caratteri deformati ad onda, e le barre diagonali con un angolo casuale); e su un po’ di training da parte dell’umano. Alla fine, però, le barriere saltano sempre…

divider

Comments are closed.

 
Creative Commons License
Questo sito è (C) 1995-2024 di Vittorio Bertola - Informativa privacy e cookie
Alcuni diritti riservati secondo la licenza Creative Commons Attribuzione - Non Commerciale - Condividi allo stesso modo
Attribution Noncommercial Sharealike