Jak se luští captcha
18. April 2007
v první řadě doufám že mi tento článek zajistí nehynoucí slávu, párset zpětných odkazů a několik miliónů na mém bankovním kontě, protože spousta lidí ani pořádně neví jak se hádám 90% captchy luští. Pak se na poměrně odborném serveru (haha) můžeme dočíst velice neodborný článek, který si dokonce odvažuje tvrdit, že způsob který Vám představím nepoužívá nikdo. Minimálně já jsem toho důkazem že ano :) Nebo ještě idiotštější řešení Konečné řešení v boji proti spamu v diskusních fórech.
Co je vůbec Captcha ?
“Completely Automated Public Turing-test to tell Computers and Humans Apart”, celkem nicneříkající pojmenování něčeho co opět většina lidí neviděla ani z vlaku, nicméně turingovo testy tu prbírat nebudu ač by to bylo jistě skvělé téma…kdo chce ať googlí. Problém je že s captchou v jakém smyslu jí chápeme my samotný Alan M. Turing zesnulý v létě 1954 má pramálo společného… Nicméně captchou rozumíme řekněme “něco”, co by měla být správně rozpoznáno člověkem a nesprávně/vůbec počítačem. V dnešní době jsou nejpoužívanější vizuální a zvuková captcha. Každá má svoje pro a proti, ale obě za určitých podmínek počítač dokáže rozpoznat. Zvukovou podle ohlasů dokonce lépe než obrázkovou (nemám vlastní zkušenost). Tento článek by se měl věnovat pouze captche obrázkové a způsoby prolomení, které jsou opravdu jednoduché a dostupné všem, tím rozhodně není myšleno všelijaké programování pseudointeligentních samoučících se sítí, na které by jste potřebovali přinejmenším vysokoškolské vzdělání.
P0rn0 ke stažení zdarma ?
Představím vám dvě praktické varianty které jsem viděl, je to opravdu pro každého :) Jedna (ta složitější), existoval systém(a možná ještě existuje) do kterého se ovečka zaregistrovala pod vidinou nabytí tvrdé americké měny. Ovce musela opsat text z obrázku a za každý obrázek dostala virtuálně nějaký finanční obnos. Za přivedení dalších lidí byla provize atd… klasická pyramida, takže systém byl mimořádně efektivní i v ‘marketingu’. Nejlepší na tom je, že ani nemuselo dojít k výplatě peněz a autor měl poměrně kvalitně ‘rozšifrovanou’ jakou captchu si zamanul a považte, zcela zadarmo. Pro líného člověka nic moc, psát takový systém je poměrně dost práce, musíte to nazačátku zainvestovat reklamou… Ta jednoduší varianta je naprosto geniální, navíc ani nemusíte slibovat lidem peníze. Pokud jste někdy provozovali pr0nweb, víte asi že oproti webům s normálním obsahem většinou netrpíte nedostatkem návštěvníků i na začínající stránce se nechá za den vytvořit poměrně slušný traffic, který může být několikrát větší než většina blogů o autofekální skupině Tokio Hotel.
Tak a teď si vemte captchu, kterou byste rádi dešifrovali a prdněte jí k těm pěti fotkám, které tam máte s vysvětlením, že pro vstup do placené sekce musí návštěvník jenom opsat text z obrázku a máte o zábavu i vyluštěné captchy postaráno, pak ty lidi pošlete na nějakej úchylnej affil a možná na tom i vyděláte :) Jak prosté…nemyslíte ? A teď se mi někdo snažte namluvit že nepřekonám jakoukoliv captchu…
Hry online
Přestože prvně-druhá varianta je überjednoduchá, občas nastane složitost s tím jak navázat na botku, která odesílá naše formuláře na vyluštěné captchy, protože nám blogy hází klacky pod nohy různou expirací a kdejakejma přežitkama ;) S tím by si měl ale zkušený skript-tör hravě poradit takže ode mě nečekejte žádnej complete-idiot-guide.
Hlavní jádro mého řešení je volně dostupné na internetu. S velkou trpělivostí lze dosáhnout u některých typů systémů až 90% pravděpodobnosti vyluštění. Tak s pravdou ven…hlavním jádrem je tedy OCR. Osobně používám GOCR, je řádkové což je naprosto ideální, nechá se učit a je poměrně rychlé. Druhým nástrojem, který používám je ImageMagick, taktéž zadarmo nám dovolí velice snadnou manipulaci s obrázky, která je poměrně klíčová. Třetí stálicí zůstává můj oblíbený Perl.
Pokud už vás napadlo jak to celé dát dohromady, gratuluju pošlete mi na paypal nějakej ten milijón ;), tak jen pro úplnost. Perl by nám měl stáhnout obrázek, zachovat session a následně procpat i s výsledkem formulář. ImageMagick nám bude sloužit jako předpříprava obrázku (jinak OCR rozpozná minimum), a protože používámě poměrně inteligentní ocr neměl by ani být probém s natočením písma.
Začnu poměrně jednoduchým příkladem a velice slabou captchou a tím je poměrně neznámý BoastMachine (k vidění třeba zde)

Myslím že by tohle zvládlo samotné OCR, ale chci jí sem dát jenom protože jsem na ní sám začínal a na jednoduchém příkladu to bude nejsnažší. Úplně nejjednoduší je odstranit to šedivé ‘rušící’ pozadí.
/usr/local/bin/convert captcha1.png -contrast -contrast -contrast -contrast -contrast -contrast tempim.gif
vyleze nám něco v tomhle smyslu

barvy lehce způsobí že ocr písmenko nerozpozná takže
/usr/local/bin/convert -monochrome tempim.gif tempim2.png
výsledek takový

Jak je vidět captcha nebyla vyčištěna až tak důkladně, nicméně už po takové úpravě nám bez učení z GOCR vyleze tohle
root@drson:# /usr/local/bin/gocr tempim2.png
wJSJFIR
Což je opravdu úcitvý výsledek. Nacpat to všechno do skriptu vyměnit regexpem v perlu malá písmena za velká(protože boastmachine malá nepoužívá) a můžeme vesele luštit jeden typ captchy. Pokud jste i zkušeným grafikem dokáže odhadnout dopředu co obrázek potřebuje aby se nechalo oddělit písmo od pozadí, jinak nezbývá než zkoušet možnosti řádkového imagemagick.
Mel jsem v plánu ještě článek rozšířit, ale už mi tu hnije dost dlouho na to abych ho publikoval. Nicméně rozhodně si prostudujte volby gocr, nechá se i učit což při některém typu písma je sakra potřebné. Chce to si s tim trošku hrát, v nedávné době jsem zkoušel starou phpBB captchu a dosáhl jsem úctihodných 85%, spočtěte si kolik je přes google dostupných těchhle typů fór a dojde vám, že máte na disku něco za co by jiní platili tisíce…
Závěrem bych chtěl říct že obrázková captcha je zrůdnost, čím hůř je čitelná pro stroj tím většinou i pro člověka, proto fandím každému co se snaží proti spamu bojovat po svém a nenasadí milionkrát provařené řešení, které právě díky tomu ztrácí na účinosti. Tady mám do wp vlastnoručně dopsaných asi tak pět řádek, společně se schvalováním (které odstraní dementy typu pocasi-eu), žádná složitost a nezaznamenal jsem jedinej spam. Na další stránce, nepoměrně navštěvovanější jsem si napsal jednoduchý AJAXový komentovací systém abych se to konečně naučil a hádejte - ano 0 spamů od spuštění.

18 April, 2007 [4:13 pm]
Zdar, dobrej clanek,
jak bys resil obejiti takovych tech otazek typu, kolik je jedna a jedna s tim, ze se jich tam bude motat treba 10 nahodne?
18 April, 2007 [5:16 pm]
No…
to je otázka, pokud má ochrana konečné množství otázek-řešení je velice snadné jí zlomit… pokud ne, musí být podle nějakého klíče generována, v tom případě stačí najít ten správný postup…technicky je to obojí pár řádek ve skriptu…
Překonání jakékoliv ochrany je jen otázka času…
18 April, 2007 [8:09 pm]
Vítej mezi živými :) Dobrý článek. Tu první, řekněme sociální, metodu jsem znal, ale s GOCR jsem neměl tu čest.
Hlavní je IMHO to, co jsi napsal úplně na konci: šanci mají netradiční ochrany. Jakmile se začne nějaká metoda používat masově, vzroste také motivace k jejímu prolomení.
18 April, 2007 [11:23 pm]
Sem měl tak trochu zimní spánek :)
Jasně, proto mi uniká smysl kdejakých pluginů a “konečných řešení”. To udělátko si stejnak nakonec stáhne ohromné množství lidí, takže zase bude zájem na tom ho prolomit…
19 April, 2007 [1:35 pm]
Nehynouci slava by mozna byla, ale chtelo by to:
1) Naucit se cesky. Tech hrubek tam….
2) Nepohybovat se v oblastech na pokraji zajmu vetsiny lidi. Kockatou hlavou se clovek moc neprosadi. Chce to elegantni tvorivy napad, a ne banalni technicke reseni. Motivaci prosadit bys mel, ale chybi schopnosti, tedy zejmena schopnost neutopit se v technice reseni nepodstatneho problemu = mit nadhled. :-)
19 April, 2007 [2:05 pm]
nehynoucí sláva byl wannabe vtip…
1. no nejsem kdovíjakej češtinář přiznávám :)
2. pokud sis nevšiml tak tohle je můj osobní, soukromý, osobní deník, plný mých soukromých, osobních a soukromých věcí, takže si tu budu psát jak se líbí mě, ne tobě :) …jinak jsem “technik” ne teoretik a už vůbec ne novinář, píšu pro zábavu…jestli to někomu pomůže budu rád, jestli ne ať mi políbí zadek, já z toho stejnak nic nemám :)
19 April, 2007 [7:34 pm]
Diky moc za clanky. Je fajn cist o BH i neco v cestine ;) Stach zbytecne komentuje knecemu cemu vubec nerozumi :)
11 September, 2007 [6:42 am]
píšeš:
Překonání jakékoliv ochrany je jen otázka času…
ale co vychytralá captcha na rapidshare, která každý den změní písmo?
15 September, 2007 [12:21 pm]
no…na rs captchu ten system sice neznam, ale vzhledem k tomu ze i tech pisem bude konecna mnozina - je to opravdu jen otazka casu :) Ale priznavam ze asi bude precejen efektivnejsi vsadit na lidi…
8 February, 2008 [1:44 am]
Za nedlouhou to všechno vyřeší projekt :) Doporučuji vyčkat, p.s.