Buenas tardes.
Llevo poco tiempo aprendiendo PYTHON.
Tengo un problema con un fichero ZIP del cuál no recuerdo la contraseña.
He localizado este programa pero no logro que funcione.
El fichero esta en la siguiente localización: c:\072023JULIO2023.ZIP
Utilizo SPYDER.
Por favor rogaría que lo reviséis.
Muchas gracias.
# -*- coding: utf-8 -*-
# Nombre del archivo ZIP protegido con contraseña
archivo_zip = "c:/072023JULIO2023.zip"
# Lista de caracteres que se usarán para realizar el ataque de fuerza bruta (puedes personalizarla según tus necesidades)
caracteres = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_-+=[]{}|;:,.<>?`~"
# Longitud máxima de la contraseña a probar
longitud_maxima = 25
def fuerza_bruta():
for longitud in range(1, longitud_maxima + 1):
intento = [0] * longitud
while True:
# Generar la contraseña actual basada en el intento actual
contraseña = ''.join([caracteres[i] for i in intento])
try:
with zipfile.ZipFile(archivo_zip, "r") as zf:
zf.extractall(pwd=bytes(contraseña, 'utf-8'))
print(f"Contraseña encontrada: {contraseña}")
return
except Exception as e:
# Continuar con el siguiente intento
pass
# Aumentar el intento
posicion = 0
while True:
if posicion == longitud:
break
intento[posicion] += 1
if intento[posicion] == len(caracteres):
intento[posicion] = 0
posicion += 1
else:
break
if __name__ == "__main__":
fuerza_bruta()
Buenas, ¿qué es exactamente lo que no funciona?
Por otro lado, te advierto que un script de fuerza bruta como este puede tardar años en encontrar la contraseña correcta.
Saludos
Muchas gracias por tu tiempo.
Al depurar da el siguiente resultado:
%debugfile 'C:/Python/Ejercicios/contraseña.py' --wdir
> c:\python\ejercicios\contraseña.py(4)<module>()
2
3 # Nombre del archivo ZIP protegido con contraseña
----> 4 archivo_zip = "c:/072023JULIO2023.zip"
5
6 # Lista de caracteres que se usarán para realizar el ataque de fuerza bruta (puedes personalizarla según tus necesidades)
No tenia previsto que podía tardar tanto tiempo.
El fichero comprimido es muy importante para mí.
No se si me podrías indicar otra forma de recuperar la contraseña.
He probado programas de internet pero sin ningún resultado.
Gracias anticipadas
Desafortunadamente Francisco tiene razon, la brute force que estas utilizados puede tardar una enternidad, a no sea que uses Computacion quantica, entonces quizas tardaria segundos.
Otra forma the brute force que puedes utilizar es ataque de diccionario. Que puede o no encontrar la contrasen~a, pero es mas eficiente.
Baja de internet
https://web.archive.org/web/201202071132...load.shtml, el dictionario Spanish.
Correlo contra el codigo de abajo.
Antes que lo corras, te recomiendo que pongas al principio del diccionario, todas las contrasen~as que tu crees pudiste haber utilizado.
Código:
# -*- coding: utf-8 -*-
"""
Created on Mon Oct 30 12:51:08 2023
@author: user
"""
import time
import pyzipper
from tqdm import tqdm
def display_welcome_message():
welcome_message = """
************************************************
* Password Cracker created by PythonPhreak! *
************************************************
This program attempts to decrypt a ZIP file using a
wordlist of potential passwords. Please provide the
paths to the ZIP file and the wordlist.
"""
print(welcome_message)
def main():
display_welcome_message()
# Get the path to the ZIP file and the wordlist file from the user
zip_file_path = input("Enter the path to the ZIP file: ")
wordlist_path = input("Enter the path to the wordlist file: ")
# Count the number of words in the wordlist
n_words = len(list(open(wordlist_path, "rb")))
# Print the total number of passwords
print("Total passwords to test:", n_words)
time.sleep (1)
with open(wordlist_path, "rb") as wordlist_file:
for word in tqdm(wordlist_file, total=n_words, unit="word"):
try:
# Attempt to decrypt the ZIP file using pyzipper
with pyzipper.AESZipFile(zip_file_path) as zf:
zf.pwd = word.strip()
zf.extractall()
print("[+] Password found:", word.decode().strip())
return
except Exception as e:
continue
print("[!] Password not found, try other wordlist.")
if __name__ == "__main__":
main()
Buenas tardes.
Muchas gracias por tu interés.
He bajado el diccionario y lo he revisado y no he localizado ningún carácter especial (!"@#$%&....etc), y por lo que recuerdo casi seguro (99%) he utilizado uno o mas de uno de ellos.
Actualmente no creo tener los conocimientos suficientes de Python para ver donde se tendría que implementar el diccionario y poder ejecutar el programa que me indicas.
No obstante reitero mi agradecimiento por tu interés y tu tiempo.
Estimado como dicen los demas compañeros hacer fuerza bruta es algo largo , lo que hace basicamente la fuerza bruta es probar todas las posibles palabras hasta encontrar la correcta . Osea si ud tiene un diccionario con un millon de palabras el porgrama las ira probando de una en una hasta dar con la correcta , ahora lo malo de esto es que la palabra buscada puede estar en cualquier lugar puede que este al principio del diccionario como puede que este al centro o puede que este al final y tambien puede que no este .
Una estrategia para acortar los tiempos y que la busqueda sea mas eficiente es crear diccionarios tematicos y tambien que ud se acuerde de mas menos lo que se trataba la contraseña . Le doy un ejemplo:
Alomejor a ud le gusta el rock y alomejor su contraseña tiene que ver con cantantes de rock , entonces lo que tendria que hacer ud es hacer un diccionario solo con cantantes de rock, por ejemplo
Bon jovi
Kurt cobain
Jim Morrison
etc
Luego alomejor ud le puso algunos caracteres "raros " como @ # etc , entonces ud mezcla esos caracteres con los nombres
@bon jovi
@kurt cobain
....
bon@jovi
......
#bon@jovi
.....
Etc .
Ahora eso de combinar caracteres no lo hace uno mismo sino que se crea un programa que combien todo
Ahora hay otros programas mas "rapidos" que hacen lo mismo y son programas especializados en eso por ejemplo esta johon the riper que es lo que se usa en materia de seguridad informatica aka hacking
Ahora si para ud es muy impoirtante yo le puedo ayudar por una par de billetes . me puede hablar al privado si le interesa
Saludos cordiales
Buenos días.
Me podéis ayudar.
Ejecutando este programa prueba hasta br y da los siguientes errores:
Probando: br
Traceback (most recent call last):
File C:\Python\Spyder6\envs\spyder-runtime\Lib\site-packages\spyder_kernels\customize\utils.py:209 in exec_encapsulate_locals
exec_fun(compile(code_ast, filename, "exec"), globals)
File c:\python\ejercicios\fuerza bruta copilot ia.py:32
brute_force_zip(zip_path, max_length)
File c:\python\ejercicios\fuerza bruta copilot ia.py:24 in brute_force_zip
if extract_zip(zip_file, password):
File c:\python\ejercicios\fuerza bruta copilot ia.py:11 in extract_zip
zip_file.extractall(pwd=password.encode('utf-8'))
File C:\Python\Spyder6\envs\spyder-runtime\Lib\zipfile.py:1701 in extractall
self._extract_member(zipinfo, path, pwd)
File C:\Python\Spyder6\envs\spyder-runtime\Lib\zipfile.py:1756 in _extract_member
shutil.copyfileobj(source, target)
File C:\Python\Spyder6\envs\spyder-runtime\Lib\shutil.py:197 in copyfileobj
buf = fsrc_read(length)
File C:\Python\Spyder6\envs\spyder-runtime\Lib\zipfile.py:965 in read
data = self._read1(n)
File C:\Python\Spyder6\envs\spyder-runtime\Lib\zipfile.py:1041 in _read1
data = self._decompressor.decompress(data, n)
error: Error -3 while decompressing data: invalid distance too far back
import zipfile
import itertools
import string
def extract_zip(zip_file, password):
try:
zip_file.extractall(pwd=password.encode('utf-8'))
print(f"Contraseña encontrada: {password}")
return True
except (RuntimeError, zipfile.BadZipFile):
return False
def brute_force_zip(zip_path, max_length):
zip_file = zipfile.ZipFile(zip_path)
characters = string.ascii_letters + string.digits + string.punctuation
for length in range(1, max_length + 1):
for attempt in itertools.product(characters, repeat=length):
password = ''.join(attempt)
print(f"Probando: {password}")
if extract_zip(zip_file, password):
return password
print("No se pudo encontrar la contraseña.")
return None
zip_path = 'C:/DESCARGAS/072023JULIO2023.ZIP' #'ruta/al/archivo.zip'
max_length = 25 # Longitud máxima de la contraseña
brute_force_zip(zip_path, max_length)