Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 1448
Hepp hepp,

Jeg drifter ett par store løsninger for jobben. Blant annet en e-postserver som fungerer på lik linje med gmail med tanke på at man kan registrere nye kontoer fritt osv. Denne løsningen har blitt utnyttet av hackere den siste tiden ,til tross for alle captcha forsøk jeg har implementert. Det problemet er løst, men jeg sitter allikevel igjen med ønske om mer kunnskap om hvordan captcha cracking foregår.

Jeg har undersøkt og prøvd en del, men får det ikke helt til. Jeg ønsker ikke å benytte ett captcha knekker API (hvor man betaler en latterlig lav sum for f.eks 1000 captchas etc), men jeg ønsker å finne ut av hvordan jeg kan kode noe som knekker en bestemt type captcha. Fortrinnsvis via linux og tilgjengelige verktøy der.

Vedlagt fil inneholder ett eksempel på hva jeg har gjort. Til venstre er originalbildet og til høyre er bildet etter jeg har rotet litt med imagemagick.

Jeg har ikke tidligere erfaring med dette, men planen min er som følger:
1. Rense opp bildet for all støy slik at bokstaver blir så distinke som mulig
2. Konvertere bildet til grayscale for å utelukke farger
3. Trene opp en OCR, f.eks gocr eller tesseract, til å gjenkjenne bokstaver
4. Nuke captchaen.

Problemet mitt ifht vedlagte captcha er som følger:
1. Er planen min "riktig", eller burde jeg finne en annen fremgangsmåte?
2. Vil det ikke bli ufattelig vanskelig å lære opp gocr/tesseract, med tanke på at fontene har forskjellige vinkler og størrelser samt posisjoner for hver eneste captcha?
3. Det "rensede" bildet mitt er nesten mer utydelig enn originalen. Hvordan kunne jeg bedre fått renset det?

Notis;
Pr nå benytter jeg som nevnt imagemagick og "convert" for å rense bildet. Jeg konverterer enkelte farger til transparent med en fuzz for å få fjernet dem fra bildet. Det etterlater allikevel en del støy som gjør bokstavene vanskelig å identifisere.

Eksempel på kommando jeg har brukt:

Kode

convert abj.png -fuzz 5% -transparent "#163948" -transparent "#1c1c1c" -fuzz 1% -transparent "#25292d" -sharpen 1 abj2.png
På forhånd takk for hjelp/idèer

Mvh
Java
sindre@puse.cat:~$
Synderen's Avatar
Ikke relevant til selve bilde delen av captcha breakingen, men her er et foredrag av noen som prøvde seg på lyd delen av reCaptcha med gode resultater.
Det enkleste er å angripe det svakeste leddet, og veldig ofte er dette tjenesten selv. Kan challenge/response-par gjenbrukes? Hvordan behandles challenge/response-par som du finner på helt selv? I noen tilfeller så tilbyr tjenesten lyd-varianter som kan knekkes (som nevnt over), og jeg har også sett noen tjenester som har bilder på formatet "captcha.php?word=AC9B30" som da genererer et obskurt bilde med AC9B30 på. Ikke akkurat vanskelig.

Automatisk captcha-knekking trenger heller ikke være særlig nøyaktig for å være nyttig. 10-20% sjanse for riktig resultat kan være mer enn nok, hvis tjenesten ikke setter noen sperrer på dette.

Det jeg ville gjort for å gjenkjenne bokstaver ville vært å ta hvert farge-layer og kjørt noen edge detection-algoritmer for å finne sannsynlige posisjoner for bokstaver. Så er det å bruke et par implementasjonsspesifikke triks, som f.eks. å se etter kun visse fargekombinasjoner, et gitt antall bokstaver, minimum/maksimum-størrelse på bokstavene, etc. Kanskje du ender opp med 8 felt etter første søk, og du vet at captchaen er 6 tegn lang. Da forkaster du de som virker minst sannsynlig og forsøker å knekke resten. Ut i fra posisjonen på blokkene du får ut så gir dette rekkefølgen.

Et bra triks er å laste ned en god del captchas og manuelt løse de, samt ta notater. Da har du et lite testsett for å kjøre koden din på, hvor fasiten er tilgjengelig, og du kan også få et godt overblikk over hvordan captchaene ser ut. Utelukker de bokstaver? Q, P/R, M/N og V/W er par som kan være vanskelig å skille noen ganger, så disse er muligens luket ut.
Java's Avatar
Trådstarter
Det er fremgangsmetoden jeg har basert meg på, egentlig.

Hvordan klarer du kjenne igjen bokstaver dog? I dette tilfellet er det alltid tre bokstaver. Bakgrunnen er alltid den samme, så den er relativt grei å bli kvitt. Bokstavene har fall-skygge av seg selv, som gjør dem litt vanskeligere å skille. I tillegg ser jeg ikke hva slags font det er.

Jeg har forsøkt å trene opp tesseract, uten videre hell, dessverre.

Etter ytterligere dilling med bildene har jeg fått dem til å se ut som vedlegget.

Her burde det vel være mulig å hente ut noe, programmatisk? Jeg har fortsatt problemstillingen at bokstavene kan være en vilkårlig størrelse, de kan stå i hvilken som rekkefølge, og hvor som helst. Det kan også være mer eller mindre støy rundt dem.

Selv om 100% treffsikkerhet hadde vært helt rått, skjønner jeg at det ikke er realistisk. Jeg kommer til å tweake på dette for å få det så nøyaktig som mulig, men jeg trenger ett utgangspunkt. Hvordan går jeg videre for å identifisere bokstaver?

Har forøvrig gjort undersøkeler ifht snarveier/svakheter i captcha løsningen. Ingen shakes her, dessverre
▼ ... over en uke senere ... ▼
Hvis du vil løse captcha som bilder anbefaler jeg OpenCV, Open Source Computer Vision biblioteket.
Er veldig effektivt å bruke, spesielt i slike oppgaver. Boken "Mastering OpenCV with Practical Computer Vision Projects" har til og med en egen seksjon på å skanne og lokalisere tall og bokstaver fra "blurry" bilskilt i bevegelse.

Edit: Beklager, leste ikke ditt siste innlegg før det var for sent. Ser ut som du har klart bilde transformasjonen
Sist endret av Sigøyner; 28. mai 2013 kl. 14:07.