¿Cómo aplicar fuerza bruta a contraseñas de archivos ZIP en Python?

En este artículo, veremos un programa de Python que descifrará la contraseña del archivo zip utilizando el método de fuerza bruta.

El formato de archivo ZIP es un estándar común de archivo y compresión. Se utiliza para comprimir archivos. A veces, los archivos comprimidos son confidenciales y el propietario no quiere dar acceso a cada individuo. Por lo tanto, el archivo zip está protegido con una contraseña. Si la contraseña es común, entonces es fácil de descifrar. Aquí, usaremos el método de fuerza bruta para descifrar la contraseña del archivo zip.

Un método de fuerza bruta es un método en el que se utiliza un conjunto de valores predefinidos para descifrar una contraseña hasta que tenga éxito. Este es básicamente un método de «golpear y probar». Este método puede llevar mucho tiempo si el conjunto de valores es alto, pero su tasa de éxito es alta. Cuanto mayor sea el número de valores, mayores serán las posibilidades de descifrar contraseñas. Aquí usaremos un archivo de texto «rockyou» de 133 MB con más de 14 millones de conjuntos de contraseñas para probar. Descargue el archivo de texto aquí .

Acercarse:

  • Primero, importe el módulo zipfile .
  • Inicialice el objeto ZipFile que ayuda a extraer el contenido del archivo zip.
  • Cuente el número de palabras presentes en el archivo «rockyou.txt» y muéstrelo en la terminal.
  • Llame a la función «crack_password» que devuelve verdadero si se encuentra una contraseña; de lo contrario, devuelve falso. Pase el nombre del archivo de texto y el objeto ZipFile como parámetros.
  • La variable idx se utiliza para realizar un seguimiento de los números de línea.
  • Abra el archivo de texto «rockyou.txt» en modo «rb» para manejar el contenido del archivo en forma binaria. Esto se debe a que el archivo contiene algunos símbolos especiales que no se pueden manejar si el archivo se abre en modo «r» y generará UnicodeDecodeError .
  • Después de abrir el archivo, extraiga la línea del archivo y luego divida la palabra.
  • En el bloque de prueba, extraiga el contenido del archivo zip dando la contraseña al campo pwd del método extractall. El método extractall() extraerá todo el contenido del archivo zip al directorio de trabajo actual. El programa anterior extrae un archivo zip llamado «gfg.zip» en el mismo directorio que este script de python.
  • Si la contraseña es incorrecta, se generará una excepción. En el bloque excepto, continúa el ciclo para verificar otras palabras en el archivo.
  • Si se encuentra la contraseña, devuelva verdadero; de lo contrario, al final devuelva falso y muestre el mensaje deseado.

A continuación se muestra la implementación completa:

Python3

import zipfile
  
  
def crack_password(password_list, obj):
    # tracking line no. at which password is found
    idx = 0
  
    # open file in read byte mode only as "rockyou.txt"
    # file contains some special characters and hence
    # UnicodeDecodeError will be generated
    with open(password_list, 'rb') as file:
        for line in file:
            for word in line.split():
                try:
                    idx += 1
                    obj.extractall(pwd=word)
                    print("Password found at line", idx)
                    print("Password is", word.decode())
                    return True
                except:
                    continue
    return False
  
  
password_list = "rockyou.txt"
  
zip_file = "gfg.zip"
  
# ZipFile object initialised
obj = zipfile.ZipFile(zip_file)
  
# count of number of words present in file
cnt = len(list(open(password_list, "rb")))
  
print("There are total", cnt,
      "number of passwords to test")
  
if crack_password(password_list, obj) == False:
    print("Password not found in this file")

Producción:

Publicación traducida automáticamente

Artículo escrito por sarthak_eddy y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *