Wednesday 1 April 2009

Simple MD5 Cracker, Coded in python, It's pretty quick.

I had previously made an MD5 cracker in visual basic but was disgusted the the speed at which it checked hashes. I decided to give it a go in python. Here is the result, simple MD5 Cracker.

While it may not look as pretty as other MD5 crackers with nice laid out colorful GUI's, this one will hang with some of the best. In my personal test runs I was able to do over a million password attempts in about 2 seconds. (Intel core 2 duo 1.8Ghz, 1GB ram... Nothing amazing.) Needless to say this will blow any VB6 MD5 cracker out of the water.

Along with the cracker comes a very basic list loader / editor python file. The cracker automatically imports this file so you can use it's functions to mess around with your lists.

Picture:

As you can see the cracker is run command line style. I didn't bother to make it grab user input etc. Just open up python and use the functions in listedit.py to load lists. Then pass the lists to the cracking function and wait.

Download Source (Python files are not compiled so almost everything you are downloading is in text format.)
[code]http://rapidshare.com/files/196233439/SimpleMD5Cracker.rar[/code]Download Python 3 (You need this to run the cracker)
[code]http://www.python.org/download/[/code]Enjoy

1 comment:

  1. Try this on for size, a multiprocessor md5 cracker in python(a mod of a previous crack I wrote), it utilises both cores of a Dual Core(or higher) processor. Here it is:
    [code]
    #! /usr/bin/python
    #By: ov3rcl0ck(travis sturzl)
    import md5, multiprocessing
    def genHash(hashes):
    mm=md5.new()
    mm.update(hashes)
    return mm.hexdigest()
    def getwordlist(wlists):
    try:
    wlisty=open(wlists, 'r')
    wlist=wlisty.readlines()
    wlisty.close()
    for ij in range(len(wlist)):
    wlist[ij]=wlist[ij].strip()
    except IOError:
    print "IOERROR: File", wlist, "cannot be opened."
    exit()
    return wlist
    def main1(crack):
    for i in range(len(wordlist)):
    if crack==genHash(wordlist[i]):
    print "\n"+crack+" = "+wordlist[i]
    break
    def main2(crack):
    for k in reversed(range(len(wordlist))):
    if crack==genHash(wordlist[k]):
    print "\n"+crack+" = "+wordlist[k]
    break
    crackit=raw_input("\nEnter hash to crack: ")
    wist=raw_input("\nEnter wordlist: ")
    wordlist=getwordlist(wist)
    if __name__ == '__main__':
    p1 = multiprocessing.Process(target=main1, args=(crackit))
    p1.start()
    if __name__ == '__main__':
    p2 = multiprocessing.Process(target=main2, args=(crackit))
    p2.start()

    while True:
    if p1.is_alive()==False:
    p2.terminate()
    break
    if p2.is_alive()==False:
    p1.terminate()
    break
    raw_input("\npress enter to exit...")
    [/code]

    ReplyDelete