Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #!/usr/bin/python
  2.  
  3. # Modificaciones diversas para la carga de datos y correcciones para respetar convenciones.
  4. # Fecha 17/07/2014
  5. #Modificado por Santiago Passalacqua para el blog "programando el mundo"
  6. # http://programaelmundo.blogspot.com.ar/
  7. # :: Invasion Tux
  8. # :: Ultima modificacion : miercoles, 10 de diciembre de 2009
  9. # :: Script realizado por makiolo (makiolo@gmail.com) (Licencia Creative Commons con reconocimiento)
  10. # :: Ultima version : http://blogricardo.wordpress.com/2008/12/28/script-para-generar-diccionarios-de-fuerza-bruta/
  11. # :: Dependencias : python 2.5
  12. #
  13.  
  14. import sys, math, hashlib
  15. from time import time, localtime, strftime
  16. from hashlib import md5, sha1, sha224, sha256, sha384
  17.  
  18. ########################### CONFIGURACION BASICA #########################
  19. LONGITUD = int(raw_input("Ingrese la longitud maxima de las palabras a generar:> "))
  20. ALFABETO = "abcdefghijklmnopqrstzxwyuv"
  21.            
  22. RESPUESTA=raw_input("El alfabeto actual es : "+ALFABETO+" PARA MODIFICARLO PRESIONE M DE LO CONTRARIO CUALQUIER TECLA:> ")
  23. if (RESPUESTA=="M" or RESPUESTA=="m"):
  24.     ALFABETO=raw_input("Ingrese el alfabeto:> ")
  25. RESPUESTA=raw_input("Desea incluir las palabras con longitud menor a "+str(LONGITUD)+" ? S/N:> ")
  26. INCLUIRMENORES=(RESPUESTA=="s" or RESPUESTA=="S")
  27. raw_input("EMPEZANDO....")
  28.  
  29. ####################################################################
  30.  
  31. ########################### CONFIGURACION EXTRA ####################
  32.  
  33. CALCULAR_TIEMPO_RESTANTE = True
  34.  
  35. LLAMAR_EVENTO = False
  36.  
  37. GENERAR_FICHERO = True
  38. DESTINO_FICHERO = "diccionario.txt"
  39.  
  40. BUSCAR_HASH = True
  41. HASH_ALGORITMO = md5 # Opciones: md5, sha1, sha224, sha256, sha384
  42. HASH_BUSCADO = "6091ece73d7b32b63e2f7db82e3bfe9d"
  43.  
  44. ####################################################################
  45.  
  46. ########################## CALLBACK ###############################
  47.  
  48. # ES UN CALLBACK MODIFICABLE SEGUN LA FUNCIONALIDAD A IMPLEMENTAR
  49. def eventoPalabraGenerada(palabra):
  50.   print palabra
  51.  
  52. ####################################################################
  53.  
  54. ########################## FUNCIONES ###############################
  55.  
  56. def getVariacionesConRepeticion(ALFABETO , LONGITUD):
  57.   sumatorio = 0
  58.   for i in range(LONGITUD):
  59.     producto = 1
  60.     for j in range(i+1):
  61.       producto = producto * len(ALFABETO)
  62.     sumatorio = sumatorio + producto
  63.   return sumatorio
  64.  
  65. ####################################################################
  66.  
  67. ##################### VARS AUXILIARES ##############################
  68.  
  69. variacionesConRepeticion = getVariacionesConRepeticion(ALFABETO , LONGITUD)
  70. PERIODO_MOSTRAR_ESTADISTICAS = 600000
  71. inicioReloj = time()
  72. cont = 0
  73. progreso = 0
  74.  
  75. ####################################################################
  76.  
  77. if GENERAR_FICHERO:
  78.   f = open(DESTINO_FICHERO,"w")
  79.  
  80. LONGITUD_MAXIMA = LONGITUD
  81. if INCLUIRMENORES:
  82.     LONGITUD = 1
  83. while LONGITUD <= LONGITUD_MAXIMA:
  84.   try:
  85.     contadores = []                                   # ponemos los contadores a 0
  86.     for i in range(LONGITUD):
  87.       contadores.append(0)
  88.  
  89.     fin = False
  90.     while not fin:
  91.  
  92.       palabra=[]                                      # Creas una lista vacia (y liberas de paso)
  93.       for i in range(LONGITUD):
  94.         palabra.append(ALFABETO[contadores[i]])       # Vas metiendo al final letra a letra
  95.       palabra_formada = "".join(palabra)
  96.  
  97.       if GENERAR_FICHERO:
  98.         f.write("%s\n" % palabra_formada)
  99.  
  100.       if LLAMAR_EVENTO:
  101.         eventoPalabraGenerada(palabra_formada)        # Envias a tu callback tada la lista unida
  102.  
  103.       if BUSCAR_HASH:
  104.         # algorimos disponibles:
  105.         HASH = HASH_ALGORITMO(palabra_formada).hexdigest()
  106.         if HASH == HASH_BUSCADO:
  107.           print "\n\nDesencriptado el HASH %s !!!!\n" % HASH
  108.           print "Su valor desencriptado es \"%s\"\n\n" % palabra_formada
  109.           raise KeyboardInterrupt
  110.  
  111.       if CALCULAR_TIEMPO_RESTANTE:
  112.         if (cont % PERIODO_MOSTRAR_ESTADISTICAS == 0) and (cont != 0):
  113.           try:
  114.             progreso = cont*100.0 / variacionesConRepeticion              # porcentaje hasta ahora
  115.             finReloj = time() - inicioReloj                               # finReloj es lo que esta tardando el calculo
  116.             velocidad = cont / finReloj                                   # palabras procesadas por segundo
  117.             estimado = finReloj * variacionesConRepeticion / cont         # es lo que se estima en realizar todo el proceso
  118.             restante = estimado - finReloj                                # es lo que se estima en realizar lo restante
  119.             if restante > 60:
  120.               restante = restante / 60                                    # lo pasamos a minutos
  121.               if restante > 60:
  122.                 restante = restante / 60                                 # lo pasamos a horas
  123.                 unidad = "horas"
  124.               else:
  125.                 unidad = "mins"
  126.             else:
  127.               unidad = "segs"
  128.             sys.stderr.write("%.2f%% - Quedan %.2f %s. La velocidad es de %.2f palabras/seg\n" % (progreso, restante, unidad, velocidad))
  129.           except ZeroDivisionError:
  130.             pass
  131.  
  132.       cont = cont + 1
  133.       actual = LONGITUD - 1                                             # Pongo actual a la derecha del todo
  134.       contadores[actual] = contadores[actual] + 1                       # Sumo 1 a las unidades
  135.  
  136.       while(contadores[actual] == len(ALFABETO)) and not fin:           # Propago el carry
  137.         if(actual == 0):
  138.           fin = True                                                    # FIN
  139.         else:
  140.           contadores[actual] = 0                                        # reinicia el actual contador
  141.           actual = actual - 1                                           # avanza a la izquierda
  142.           contadores[actual] = contadores[actual] + 1                   # y le sumo 1
  143.  
  144.     LONGITUD = LONGITUD + 1                                             # combinaciones para uno menos
  145.  
  146.   except KeyboardInterrupt:
  147.     sys.stderr.write("Proceso interrumpido\n")
  148.     fin = True                                                          # Fuerzo las condiciones de salida
  149.     LONGITUD = LONGITUD_MAXIMA+1
  150.  
  151. if cont == variacionesConRepeticion:
  152.   sys.stderr.write("Terminado al 100%\n")
  153. else:
  154.   if CALCULAR_TIEMPO_RESTANTE:
  155.     sys.stderr.write("Terminado al %.2f%%\n" % progreso)
  156.   sys.stderr.write("Realizadas %d combinaciones de %d\n" % (cont, variacionesConRepeticion))
  157.  
  158. if GENERAR_FICHERO:
  159.   f.close()