2022-12-13
python穷举破解与效率
python破解压缩文件
python破解zip
pyton穷举破解压缩包
zip用的相对多点,没研究其他的,本来想找来直接拷贝的,结果还是花了时间自己写
比较坑的一点大家都用的Python标准库中的zipfile模块,但是他过时了
正常用的压缩软件不是传统加密,而是AES-256加密ZIP文件,要pyzipper库
穷举效率确实要好好考虑一下,直接windows跑cpu17%
还可探索多线程与性能
穷举密码文件文件:有26种字符,长度4的组合可能性有456976个可能,2.61MB
# 第456972个,用了106秒,
# 第456972个,用了117秒 加了每次输出 IO损耗?
# 第456972个,用了115秒 加了每10万输出加时间,取余损耗?
# 第456972个,用了99秒 又试了一次,可能是普通波动
github搜弱密码字典可以找到用,没看到很优秀的弱密码字典,可以分享给我
可以拿个学生云服务器跑跑看
配合密码的txt-每行一个-逐个试.py
密码文件下面自己穷举生成,或者网上找弱密码字典,格式自己生成看
import itertools
import math
import time
import pyzipper
# Python标准库中的zipfile模块只支持CRC32加密的zip文件,传统加密是通过CRC32加密,也即ZIP2.0
# 360压缩用的不是传统加密,WinRAR默认在CTR模式下使用AES-256加密ZIP文件,
# AES-256比传统加密算法安全得多
# Python有个pyzipper库可以很好的兼容代替zipfile
# 还可探索多线程与性能
# 都文件会又内存损耗,可以直接用itertools穷举
# 加密的解压包
# zip_file = pyzipper.AESZipFile('D:/test.zip', 'r')
# zip_file = pyzipper.AESZipFile('--9a91--.zip', 'r') # 同级
zip_file = pyzipper.AESZipFile('--zzzv--.zip', 'r') # 同级
# 字典文件,其中包含了大量可能的密码
# 或者用穷举生成的密码文件
psw_file = "pass.txt"
# 第456972个,用了106秒,文件2.61MB
# 第456972个,用了117秒 加了每次输出 IO损耗?
# 第456972个,用了115秒 加了每10万输出加时间,取余损耗?
# 第456972个,用了99秒 又试了一次,可能是普通波动
with open(psw_file) as f:
mi_ma = f.read().splitlines()
t_now = time.time()
m_num = 1
for mm in mi_ma:
if m_num % 100000 == 0: # 每10万输出一次时间
print('第%s个,目前耗时%s秒' % (m_num, int(time.time()-t_now)))
m_num += 1
try:
zip_file.extractall(pwd=str.encode(mm))
print("解密成功,第%s尝试,密码为:%s, 耗时%s秒" % (m_num, mm, time.time()-t_now))
break
except:
# 如果解压失败,则继续
pass
穷举生成密码字典.py
生成只有小写字母的4位密码字典。自己看着改
import itertools
import math
import random
# python穷举
# 键盘上所有可能输入的字符 `1234567890-=/*-qwertyuiop[]\|asdfghjkl;zxcvbnm,.?><{}:QERWTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()+
# words = "1234567890abcdefghijklmnopqrstuvwxyz" # 设的密码“元素”,就是密码可能的字符
words = "abcdefghijklmnopqrstuvwxyz"
# 有36种字符,长度4的组合可能性有1679616个可能,密码9a91,就2秒
# 有26种字符,长度4的组合可能性有456976个可能
lens = 4 # 密码长度,如密码有4位
a = itertools.product(words, repeat=lens)
print('有%s种字符,长度%s的组合可能性有%s个可能' % (len(words), lens, int(math.pow(len(words), lens)))) # 次方运算
with open("pass.txt", mode="w+") as ff: # 记录到文件里,当前目录下,w+覆盖,a追加
for i in a:
ff.write(''.join(i))
ff.write("\n") # 一行一个,加回车
在我的基础上优化后可以分享给我,谢谢