Sky
Vittorio vb Bertola
Wandering on the Web since 1995

Fri 26 - 13:31
Hello, unidentified human being!
Italiano English Piemonteis
home
home
home
about me
about me
site help
site help
site news
site news
license
license
contact me
contact me
blog
near a tree [it]
near a tree [it]
old blogs
old blogs
personal
documents
documents
photos
photos
videos
videos
music
music
activities
net governance
net governance
town council
town council
software
software
help
howto
howto
internet faq
internet faq
usenet & faqs
usenet & faqs
stuff
piemonteis
piemonteis
conan
conan
mononoke hime
mononoke hime
ancient software
ancient software
biz
consultancy
consultancy
talks
talks
job placement
job placement
business angel
business angel
sites & software
sites & software
admin
login
login
your vb
your vb
register
register

Archivio per il giorno 7 Ottobre 2007


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
 
Creative Commons License
This site (C) 1995-2024 by Vittorio Bertola - Privacy and cookies information
Some rights reserved according to the Creative Commons Attribution - Non Commercial - Sharealike license
Attribution Noncommercial Sharealike