Sky
Vittorio vb Bertola
Fasendse vëdde an sla Ragnà dal 1995

Giò 25 - 10:37
Cerea, përson-a sconòssua!
Italiano English Piemonteis
chi i son
chi i son
guida al sit
guida al sit
neuve ant ël sit
neuve ant ël sit
licensa
licensa
contatame
contatame
blog
near a tree [it]
near a tree [it]
vej blog
vej blog
përsonal
papé
papé
fotografie
fotografie
video
video
musica
musica
atività
net governance
net governance
consej comunal
consej comunal
software
software
agiut
howto
howto
internet faq
internet faq
usenet e faq
usenet e faq
autre ròbe
ël piemonteis
ël piemonteis
conan
conan
mononoke hime
mononoke hime
vej programa
vej programa
travaj
consulense
consulense
conferense
conferense
treuvo travaj
treuvo travaj
angel dj'afé
angel dj'afé
sit e software
sit e software
menagé
login
login
tò vb
tò vb
registrassion
registrassion

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
Cost sit a l'è (C) 1995-2024 ëd Vittorio Bertola - Informassion sla privacy e sij cookies
Certidun drit riservà për la licensa Creative Commons Atribussion - Nen comersial - Condivide parej
Attribution Noncommercial Sharealike