Me lo contaron y lo olvidé, lo leí y lo entendí, lo hice y lo aprendí.





lunes, 6 de agosto de 2012

Crack de contraseñas SHA1 en Python [Fuerza bruta]

Hace poco mostré un Script que creaba un diccionario básico para encontrar contraseñas por medio de fuerza bruta (Generador de Contraseñas [diccionario] en Pyhon) ; ahora traigo otro script que complementa al anterior, un programa que lee las contraseñas generadas, las procesa mediante la digestión SHA1 y las compara con una contraseña ya codificada para encontrar la palabra correcta.
El Script funciona con cualquier diccionario siempre y cuando las contraseñas candidatas estén separadas por un salto de línea, o sea:

contraseña1
contraseña2
contraseña3
...

Como siempre, primero el código:

# -*- coding: cp1252 -*-
import hashlib
archivo = raw_input("Archivo en donde se encuentran las contraseñas: ")
password= raw_input("Escribe la contraseña digerida: ")
try:
    diccionario = open(archivo,"r")
except:
    print "Error al abrir el archivo"
    raw_input("Presione cualquier tecla para salir...")
    exit()

print "comenzamos"


while True:

    linea = diccionario.readline()
    if not linea:
        raw_input("No se encontró la contraseña en el archivo")
        break
    linea=linea.replace("\n","")
    encriptacion=hashlib.sha1(linea).hexdigest()
    if encriptacion == password:
        print "Se encontró la contraseña: "
        print linea
        raw_input()
        break

print "Fin del programa"

raw_input("Presione cualquier tecla para salir")


  • Primero se importa el módulo "hashlib" el cual contiene varios métodos de digestión (hash).
  • Se pide al usuario el diccionario del cual se obtendrán las contraseñas candidatas y la contraseña ya digerida que se va a buscar.
  • En el bloque try-except se intenta abrir el diccionario y de no existir se lanzará una excepción.
  • En el bloque WHILE es donde se realiza la comprobación de las contraseñas:
  1. Se lee una línea del archivo, si se llegó al final de éste se lanza un mensaje diciendo que la contraseña no fue encontrada en el archivo.
  2. De ser una línea válida, a ésta se le quita el salto de línea que contiene al final (en caso de tener éste símbolo).
  3. Se le aplica la digestión a la contraseña extraía del archivo y se compara con la contraseña a buscar; de coincidir ambas, se muestra el valor de la contraseña extraída antes de ser digerida; de lo contrario se prosigue con el bucle en la siguiente línea para leer otra nueva contraseña candidata.
Como ven, los mecanismos de fuerza bruta son muy sencillos, el problema como siempre son los costos en memoria, procesador y tiempo; pero son los que dan más seguridad de encontrar alguna contraseña.
Para el caso de cualquier otro tipo de digestión que contenga el módulo hashlib no hace falta nada más que cambiar la encriptación del comando:
encriptacion=hashlib.sha1(linea).hexdigest()

por cualquier otra deseada, como por ejemplo md5:
encriptacion=hashlib.md5(linea).hexdigest()

Sin nada más que explicar, nos leemos.

Apaga la TV
y enciende tu cerebro

2 comentarios:

  1. Hola, veo que sabes es una maravilla soy uruguayo, te animas a sacar mi contraseña de hotmail, mi correo es Pedro.Montero50@hotmail.com, Un gusto y te felicito por tus conocimiento, yo soy funcionario público.
    Pedro

    ResponderEliminar