[Python] Hasher v1.0 (Crackeador de hashes)

Iniciado por khyv123, Julio 19, 2011, 01:37:38 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 19, 2011, 01:37:38 PM Ultima modificación: Julio 23, 2011, 01:43:38 PM por khyv123
Aqui os dejo un code en python crackeador de hashes hecho por mi compatible con hashes md5, sha1, sha224, sha256, sha384 y sha512 y posibilidad de crackeo por dicionario o por fuerza bruta:

Código: python

# ******************************************
#     Hasher v1.0:
#     Autor : khyv123 
#     Fecha de creacion : 18/07/11
#     Creado para : www.underc0de.org
# ******************************************

import hashlib,sys
from os import path

def main():
print '\n *********************************'
print ' *  Hasher v1.0  --  by khyv123  *'
print ' *********************************'

def options():
print '\nArgumentos disponibles:\n'
print '\t-h hash\t\tHash a crackear'
print '\t-t tipo\t\tTipo de hash (md5,sha1,sha224,sha256,sha384,sha512)'
print '\t-v\t\tModo verbose'
print '\n\nTipos de ataque:\n'
print '\t-f\t\tFuerza bruta'
print '\t-d dic.txt\tAtaque por dicionario'
print '\n\nCaracteres utilizados:\n'
print '\t-m\t\tLetras minusculas (a-z)'
print '\t-M\t\tLetras mayusculas (A-Z)'
print '\t-n\t\tNumeros (0-9)'
print '\t-p caracteres\tCaracteres defindos por el usuario'

def eleva(base,ex):
if ex <= 0:return 1
return base * eleva(base,ex-1)


def comb(caracteres,num_car,num_comb):
res=''
for i in range(num_car-1,-1,-1):
if num_comb==0:
while len(res)!=num_car: res=res+caracteres[0]
return res
for j in range(len(caracteres)-1,-1,-1):
if (eleva(len(caracteres),i)*j)<=num_comb:
res=res+caracteres[j]
num_comb=num_comb-(eleva(len(caracteres),i)*j)
break
return res

def muestra_datos():
print '\n*******************************************************************'
print '  Hash : '+hash
print '  Encriptacion : '+enc
if tda=='fuerza_bruta':
print '  Caracteres maximos : '+str(high)
print '  Caracteres minimos : '+str(low)
print '  Caracteres utilizados : '+char
elif tda=='dicionario':
print '  Archivo de hashes : '+file
print '*******************************************************************\n'


verbose=high=low=0
hash=enc=char=tda=file=''

if len(sys.argv)==1:
main()
options()
sys.exit(1)

for opt in sys.argv[1:]:
if opt=='-v':
verbose=1
if opt=='-f':
tda='fuerza_bruta'
if opt=='-d':
tda='dicionario'
file=sys.argv[int(sys.argv[1:].index(opt))+2]
elif opt=='-h':
hash=sys.argv[int(sys.argv[1:].index(opt))+2]
elif opt=='-t':
enc=sys.argv[int(sys.argv[1:].index(opt))+2]
elif opt=='-c':
char=sys.argv[int(sys.argv[1:].index(opt))+2]
elif opt=='-a':
high=sys.argv[int(sys.argv[1:].index(opt))+2]
elif opt=='-i':
low=sys.argv[int(sys.argv[1:].index(opt))+2]
elif opt=='-m':
char=char+'abcdefghijklmnopqrstuvwxyz'
elif opt=='-M':
char=char+'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
elif opt=='-n':
char=char+'0123456789'
elif opt=='-p':
char=char+sys.argv[int(sys.argv[1:].index(opt))+2]

if hash=='':
sys.exit('\nERROR : Hash no especificado (-h)')

if enc=='':
if len(hash)==32: enc='md5'
elif len(hash)==40: enc='sha1'
elif len(hash)==56: enc='sha224'
elif len(hash)==64: enc='sha256'
elif len(hash)==96: enc=='sha384'
elif len(hash)==128: enc='sha512'

if tda=='':
sys.exit('\nERROR : Tipo de ataque no especificado (-f/-d)')
elif tda=='fuerza_bruta':
if char=='': char='abcdefghijklmnopqrstuvwxyz0123456789'
if high==0: high=8
if low==0: low=3
elif tda=='dicionario':
if file=='':
sys.exit('\nERROR : Archivo de hashes no especificado (-d)')
elif not path.exists(file):
sys.exit('\nERROR : El archivo selecionado no existe')

muestra_datos()

if tda=='fuerza_bruta':
for i in range(low,high):
for j in range(eleva(len(char),i)):
if enc=='md5':
bfhash=hashlib.md5(comb(char,i,j))
elif enc=='sha1':
bfhash=hashlib.sha1(comb(char,i,j))
elif enc=='sha224':
bfhash=hashlib.sha224(comb(char,i,j))
elif enc=='sha256':
bfhash=hashlib.sha256(comb(char,i,j))
elif enc=='sha384':
bfhash=hashlib.sha384(comb(char,i,j))
elif enc=='sha512':
bfhash=hashlib.sha512(comb(char,i,j))
else:
sys.exit('ERROR : El tipo de hash especificado no es valido.')
if verbose==1:
print comb(char,i,j)+' -> '+bfhash.hexdigest()
if bfhash.hexdigest()==hash:
print 'Hash crackeado: '+comb(char,i,j)
sys.exit(1)
elif tda=='dicionario':
dic=open(file,'r')
for line in dic.xreadlines():
if line.count(':::'):
line=line.replace('\n','')
line=line.split(':::')
if line[1]==hash:
print 'Hash encontrado: '+line[0]
sys.exit(1)
if verbose==1:
print line[0]+' -> '+line[1]
dic.close()

else:
main()
options()




PD : link de descarga con el programa más un dicionario de hashes md5 compatible: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


CitarAutor : khyv123

   Fecha de creación : 18/07/11

   Creado para : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Muy bueno, podrías también agregarse lo a lo primero como comentario.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Waaaaaa!!! es como el que estabamos haciendo para el foro!! jajajaja
Esta excelenteeeee!


Lindo código :o
Solo una mini sugerencia al sys.argv[1:] le añadiría el .lower()
así no hay problem con que sea -F || -f o -V || -v
Lo demás muy bien ;D
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta