#!/usr/bin/python # -*- coding: utf-8 -*- __module_name__ = "CrackMe" __module_version__ = "0.1" __module_description__ = "X-Chat2 plugin Hashes look up." __module_author__ = "Sorcier_FXK " import xchat, urllib, urllib2, base64 from threading import Thread def run_md5(hashes): print "[>]\0034 Looking for MD5 %s...\0034" % hashes Thread(None, tmto, None, (hashes,), {}).start() Thread(None, noisette, None, (hashes,), {}).start() Thread(None, collision, None, (hashes,), {}).start() Thread(None, hashtoolzin, None, (hashes,), {}).start() #Thread(None, xanadrel, None, (hashes,), {}).start() #Desactivated, API bug (false positive) Thread(None, md5lookup, None, (hashes,), {}).start() def run_ntlm(hashes): print "[>]\0034 Looking for NTLM %s...\0034" % hashes Thread(None, collision_ntlm, None, (hashes,), {}).start() def run_lm(hashes): hashes = hashes[0] + ':' + hashes[1] print "[>]\0034 Looking for LM %s...\0034" % hashes Thread(None, collision_lm, None, (hashes,), {}).start() def run_sha1(hashes): print "[>]\0034 Looking for SHA-1 %s...\0034" % hashes Thread(None, sha1lookup, None, (hashes,), {}).start() def tmto(hashes): f = urllib2.urlopen('http://www.tmto.org/api/latest/?hashes=%s' % hashes) data = f.read() data = data.split('\n') data = data[2] data = data.split(' ') if data[3] == 'text=""': result = "Not found" else: result = data[3] result = result.split('"') result = base64.b64decode(result[1]) data = {'hash_':hashes, 'result':result} print "[>] \0033TMTO\0033 : %s %s" % (data['hash_'], data['result']) def noisette(hashes): f = urllib2.urlopen('http://md5.noisette.ch/md5.php?hash=%s' % hashes) data = f.read() data = data.split('\n') data_h = data[2] if '' in data_h: data_p = "Not found" data_h = hashes else: data_p = data[3] data_h = data_h.replace(' ', '') data_p = data_p.replace(' ', '') data = {'hash_':data_h, 'result':data_p} print "[>] \0033Noisette\0033 : %s %s" % (data['hash_'], data['result']) def collision(hashes): f = urllib2.urlopen('http://api.dev.c0llision.net/json/crack/md5/%s' % hashes) data = f.read() data = data.split(',') try: data_p = data[5] data_p = data_p.split('"') data_p = data_p[5] data = {'hash_':hashes, 'result':data_p} except: data = {'hash_':hashes, 'result':'Not found'} print "[>] \0033Collision\0033 : %s %s" % (data['hash_'], data['result']) def hashtoolzin(hashes): f = urllib2.urlopen('http://hash.toolz.in/api/%s' % hashes) data = f.read() if data == 'HASH_NOT_FOUND': data = {'hash_':hashes, 'result':'Not Found'} else: data = {'hash_':hashes, 'result':data} print "[>] \0033Hash.toolz.in\0033 : %s %s" % (data['hash_'], data['result']) def xanadrel(hashes): f = urllib2.urlopen('http://xanadrel.99k.org/hashes/api.php?hash=%s' % hashes) data = f.read() data = data.split('\n') if data[3] == 'no': data = {'hash_':hashes, 'result':'Not Found'} else: data_p = data[5] data_p = data_p.replace('', '') data_p = data_p.replace('', '') data = {'hash_':hashes, 'result':data_p} print "[>] \0033Xanadrel89k\0033 : %s %s" % (data['hash_'], data['result']) def md5lookup(hashes): f = urllib2.urlopen('http://www.md5-lookup.com/index.php?q=%s' % hashes) data = f.read() data = data.split('\n') nf = 0 for x in data: if 'No results found!' in x: nf = 1 data = {'hash_':hashes, 'result':'Not found'} if nf == 0: data_p = data[70].replace(' ', '') data_p = data_p.replace('', '') data = {'hash_':hashes, 'result':data_p[1:]} print "[>] \0033MD5 Lookup\0033 : %s %s" % (data['hash_'], data['result']) def sha1lookup(hashes): f = urllib2.urlopen('http://www.sha1-lookup.com/index.php?q=%s' % hashes) data = f.read() data = data.split('\n') nf = 0 for x in data: if 'No results found!' in x: nf = 1 data = {'hash_':hashes, 'result':'Not found'} if nf == 0: data_p = data[71].replace('', '') data_p = data_p.replace('', '') data = {'hash_':hashes, 'result':data_p[3:]} print "[>] \0033SHA-1 Lookup\0033 : %s %s" % (data['hash_'], data['result']) def collision_ntlm(hashes): f = urllib2.urlopen('http://api.dev.c0llision.net/json/crack/ntlm/%s' % hashes) data = f.read() data = data.split(',') try: data_p = data[5] data_p = data_p.split('"') data_p = data_p[5] data = {'hash_':hashes, 'result':data_p} except: data = {'hash_':hashes, 'result':'Not found'} print "[>] \0033Collision\0033 : %s %s" % (data['hash_'], data['result']) def collision_lm(hashes): f = urllib2.urlopen('http://api.dev.c0llision.net/json/crack/lm/%s' % hashes) data = f.read() data = data.split(',') try: data_p = data[5] data_p = data_p.split('"') data_p = data_p[5] data = {'hash_':hashes, 'result':data_p} except: data = {'hash_':hashes, 'result':'Not found'} print "[>] \0033Collision\0033 : %s %s" % (data['hash_'], data['result']) def crackme(word, word_eol, userdata): print "[>] CrackMe Xchat2 plugin by Sorcier_FXK" print "[>] sorcierfxk@kalkulators.org" print "[>] Version : %s" % __module_version__ print "[>]" print "[>] /md5 Looking for MD5 hash on public DB's" print "[>] /ntlm Looking for NTLM hash on public DB's" print "[>] /pwdump Looking for LM/NTLM hashes on public DB's" print "[>] /sha1 Looking for SHA-1 hash on public DB's" return xchat.EAT_XCHAT def md5(word, word_eol, userdata): hashes = word[1] Thread(None, run_md5, None, (hashes,), {}).start() return xchat.EAT_XCHAT def ntlm(word, word_eol, userdata): hashes = word[1] Thread(None, run_ntlm, None, (hashes,), {}).start() return xchat.EAT_XCHAT def pwdump(word, word_eol, userdata): hashes = word[1] hashes = hashes.split(':') if len(hashes) == 2: Thread(None, run_lm, None, (hashes,), {}).start() else: print "[>] Error in your syntax : :" return xchat.EAT_XCHAT def sha1(word, word_eol, userdata): hashes = word[1] Thread(None, run_sha1, None, (hashes,), {}).start() return xchat.EAT_XCHAT xchat.hook_command("crackme", crackme, help="/crackme : General informations on CrackMe Xchat2 plugin") xchat.hook_command("md5", md5, help="/md5 : Submit MD5 hash on public DBs") xchat.hook_command("ntlm", ntlm, help="/ntlm : Submit NTLM hash on public DBs") xchat.hook_command("pwdump", pwdump, help="/pwdump : Submit LM & NTLM hashes on public DBs") xchat.hook_command("sha1", sha1, help="/sha1 : Submit SHA-1 hash on public DBs")