python解压带密码的zip文件(python破解zip文件)
python解压带密码的zip文件(python破解zip文件),本文通过数据整理汇集了python解压带密码的zip文件(python破解zip文件)相关信息,下面一起看看。
其实原理很简单。一句话,就是& quot努力创造奇迹& quot。Python有两个压缩文件库:zipfile和rarfile。这两个库提供的提取方法extractall()可以指定密码,让第一个老师变成密码字典(手动或者程序),然后依次尝试密码。如果能正常提取,说明密码是正确的。
2.实验环境本文采用的虚拟环境是Pipenv。
仓库
Zipfile:Python标准库,使用时可以直接导入,rarfile:Python第三方库通过Pipenv安装rarfile。
Pipenv安装rarfile最后,把一个带密码的压缩包放到实验环境中。
第三,知道了编码原理之后,编码就会很简单。
准备密码本
A & quot密码本& quot实际上是一个包含所有可能的密码的文件,用户可以手动或通过程序输入密码。文末会有介绍。
读取压缩文件
#根据文件扩展名,使用不同的库if filename . ends with(& # 039;zip & # 039):FP=zip file . zip file(filename)elif filename . ends with(& # 039;rar & # 039):fp=rarfile.rarfile(文件名)来尝试解压。
先尝试无密码解压。如果成功,压缩文件没有密码。
FP。提取所有(Despath) FP。关闭()打印(& # 039;没有密码& # 039;)返回暴力破解
试试:# read password this file fppwd=open(& # 039;pwd.txt & # 039)除外:打印(& # 039;当前目录中的nodictfilepwd.txt。')返回for pwd in FP pwd:pwd=pwd . rst rip()try:FP . extract all(path=des path,pwd=pwd . encode())print(& # 039;成功!===='pwd)FP . close()break except:passfppwd . close()程序条目
if _ _ name _ _==& # 039_ _ main _ _ & # 039:filename=sys . argv[1]if OS . path . is file(filename)和filename . ends with((& # 039;zip & # 039, 'rar & # 039)):DecryptrarZipfile(文件名)Else:Print(& # 039;必须是rar或zip文件& # 039;)四。使用如果要使用上面的代码,我们只需要在命令行执行python main.py filename即可。例如pythonmain.pytest.zip。
运行结果:
$ python main.py test.zipSuccess!====323126
5.如何获取扩展密码本?
https://github.com/YueYongDev/Blasting_dictionary
如何加快破解过程?
解决了密码本的问题,深入思考的朋友一定会有新的疑问。既然密码本这么庞大,怎么才能加快破解速度呢?这里有两个想法。
多线程(进程)破解
如果密码多,数量大,可以多线程(进程)读取密码,一个进程读取一个密码本,一个线程分段读取密码。当然,如果是在python中,建议不要采用多线程,因为python中的线程都是鸡肋。有兴趣的可以看相关资料。
import zip file import ITER tools from concurrent . futures导入ThreadPoolExecutordef extract(file,password):如果不是flag:return file . extract all(path=& # 039;'Pwd=& # 039'加入(密码)。编码(& # 039;UTF-8 & # 039;))def result(f):exception=f . exception()If not exception:# If you can & # 039;没有得到异常,就说明破解成功了。打印(& # 039;密码是:& # 039;F. pwd)全局标志flag=false if _ _ name _ _=& # 039_ _ main _ & # 039:#创建一个标志来判断密码是否被成功破解。flag=True #创建线程池pool=thread pool executor(100)nums=[str(I)For I in range(10)]chrs=[chr(I)For I in range(65,91)] # 6位密码_ lst=ITER tools . permissions(num schrs,6) #创建文件句柄zfile=zipfile。zip file(& # 039;加密文件. & # 039,'r & # 039)for Pwd in password _ lst:if not flag:break f=pool . submit(extract,zfile,Pwd)f . Pwd=pwdf . pool=poolff . add _ done _ callback(result)这段代码有问题。跑了一段时间内存就爆了!原因:ThreadPoolExecutor默认使用无界队列,试密码速度可以& # 039;跟不上生成密码的速度,这会将生产任务无限期地添加到队列中。导致内存满。记忆飙升至95:
然后程序崩溃了:
import queue from concurrent . futures导入ThreadPoolExecutor class BoundedThreadPoolExecutor(ThreadPoolExecutor):def _ _ init _ _(self,max_workers=None,Thread _ name _ prefix=& # 039'):超级()。_ _ init _ _ (max _ workers,thread _ name _ prefix) self。_ work _ queue=queue.queue (self。_ max _ workers * 2) #设置队列大小以使用GPU加速
以上代码都是在CPU上运行的,即使启动了多线程(进程),我们也只是使用了CPU的资源。但是,如果我们想要加快破解过程,我们实际上可以使用闲置的GPU资源。
在介绍为什么GPU可以用于加速之前,我们需要明确一点。两者都是为了完成计算任务而设计的。
那为什么会想到用GPU加速呢?这大概就是两者的区别:CPU虽然有多个核心,但总数不超过两位数,每个核心的计算能力都极强。GPU的核数远超CPU,但每个核的计算能力却远不及CPU。
我们可以举一个简单的例子来解决问题。CPU是博士生,GPU是小学生。CPU负责理解问题,整理问题的步骤和解决方法,GPU负责简单但大量的简单运算。
所以理论上,在破解密码的过程中,我们可以使用GPU来加快这个过程。
其实这样的工具已经出现了,Hashcat就是最著名的一个。它号称是世界上最快的密码恢复工具,可以基于CPU/GPU等工作。
算了吧。
所以理论上,在破解密码的过程中,我们可以使用GPU来加快这个过程。
其实这样的工具已经出现了,Hashcat就是最著名的一个。它号称是世界上最快的密码恢复工具,可以基于CPU/GPU等工作。
更多python解压带密码的zip文件(python破解zip文件)相关信息请关注本站。