[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: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login


CitarAutor : khyv123

   Fecha de creación : 18/07/11

   Creado para : You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

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

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

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
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login