Last active
January 12, 2024 20:37
-
-
Save nerun/86c2e1777b7840570c801a4b095617f5 to your computer and use it in GitHub Desktop.
Python Zip Cracker. Funciona com arquivos ZIP encriptados com ZipCrypto, não suporta AES128/256.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
# -*- coding: utf-8 -*- | |
import time, sys, itertools, os, string, datetime | |
from zipfile import ZipFile | |
def LimparTela(linhas=100): | |
if os.name == 'posix': | |
os.system('clear') | |
elif os.name in ('nt', 'dos', 'ce'): | |
os.system('cls') | |
else: | |
print ('\n' * linhas) | |
LimparTela() | |
def prcolor(color, text): | |
# color: | |
# 1 Red | |
# 2 Green | |
# 3 Yellow / Orange | |
# 4 Blue | |
# 5 Purple | |
# 6 Cyan (Light Blue) | |
# 7 Light Gray | |
# 8 Black | |
return '\033[9' + str(color) + 'm' + str(text) + '\033[00m' | |
def Saindo(): | |
print (prcolor(3,"\n Saindo...\n")) | |
time.sleep(3) | |
sys.exit() | |
def VerArquivo(fname, tipo): | |
arq = fname | |
Existe = os.path.isfile(fname) | |
while not Existe is True: | |
erro = ("\n ERRO: arquivo %s inexistente!")% fname | |
print (prcolor(1,erro)) | |
arq = input("\n Digite um arquivo %s existente: " % tipo) | |
Existe = os.path.isfile(arq) | |
return arq | |
print ("""============================================================================== | |
PYTHON ZIP CRACKER | |
por Daniel Dias Rodrigues (a.k.a. "Nerun") | |
v1.2, 2024-01-12 | |
Só funciona com ZIP legado, isto é, encriptado com ZipCrypto. Os ZIPs mais | |
modernos, encriptados com AES128/256 por programas como 7-Zip e WinZip, não | |
são suportados. | |
A força bruta testa todas as senhas de 0 até 80 caracteres, que é o | |
comprimento máximo das senhas no ZipCrypto. | |
OBS.: O arquivo ZIP deve estar no mesmo diretório do Python Zip Cracker. | |
==============================================================================""") | |
inp = input("\n Nome do arquivo zip: ") | |
inp = VerArquivo(inp, "ZIP") | |
dirl = input("\n Nome do diretório para o qual será extraído: ") | |
print ("""\n Escolha a forma de ataque: | |
[ 1 ] Força Bruta: testa todas as possibilidades, pode demorar | |
[ 2 ] Dicionário: você vai precisar de um arquivo TXT de dicionário | |
[ ENTER ] Sair do programa""") | |
metodo = input("\n Entre sua opção: ") | |
Cracked = False | |
def crack(password, TimeStart): | |
with ZipFile(inp) as zf: | |
try: | |
zf.extractall(path=dirl, pwd=bytes(password, 'utf-8')) | |
Tf = round(time.perf_counter() - TimeStart) | |
print ('\n Senha descoberta. Tempo transcorrido: %s' % str(datetime.timedelta(seconds=Tf)) ) | |
print (' A senha é: ' + prcolor(3,password)) | |
print (" O arquivo descompactado está em %r" % dirl) | |
done = True | |
except: | |
print (' Testando senhas, seja paciente: ' + prcolor(5,password)) | |
done = False | |
return done | |
if metodo == "1": | |
Ti = time.perf_counter() | |
choices = string.printable | |
for length in range(0,80): | |
if Cracked == False: | |
for entry in itertools.product(choices,repeat = length): | |
if Cracked == False: | |
password = ''.join(entry) | |
l = len(password) | |
Cracked = crack(password, Ti) | |
else: | |
Saindo() | |
else: | |
Saindo() | |
elif metodo == "2": | |
print ("\n OBS.: O arquivo TXT de dicionário deve estar na mesma pasta do Python Zip\n Cracker. Faça isso agora.") | |
tx = raw_input('\n Nome do arquivo de dicionário: ') | |
tx = VerArquivo(tx, "de dicionário") | |
array = [] | |
with open(tx, "r") as f: | |
for line in f: | |
array.append(line) | |
t = len(array) | |
m = t-1 | |
Ti = time.perf_counter() | |
print ("") | |
for x1 in range(m,-1,-1): | |
if Cracked == False: | |
password = array[x1] | |
f3 = len(password) | |
password = password[:f3-1] | |
Cracked = crack(password, Ti) | |
else: | |
Saindo() | |
else: | |
Saindo() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Bem Legal!