利用破解 ZIP 或 RAR 文件密码的方法
一些带有密码的压缩包常常是从网上下载的。如果您想获取内容,通常需要向提供商支付一些费用。如果你想免费获得内容,常见的方法是在百度上搜索一些压缩包密码破解软件,但相信经历过的人都知道后果。本文将使用密码破解压缩包,以ZIP/RAR为例。
本文下方留言“获取压缩包”并发送私信即可获取本文源码。
破解原理
其实原理很简单。用一句话概括就是“只要努力就能创造奇迹”。有两个压缩文件库: 和 。这两个库提供的解压方法()可以指定密码。在这种情况下,首先生成一个密码字典(手动或通过程序),然后按顺序尝试其中的密码。如果能正常解压,说明密码正确。
实验环境
本文使用的虚拟环境是。
库利用安装
pipenv install rarfile
最后将带有密码的压缩包放入实验环境中。
编码
明白了原理,编码就会很简单
准备密码本
“密码本”实际上是一个包含所有可能密码的文件。用户可以手动输入或使用程序。文章最后也会有介绍。
读取压缩文件
# 根据文件扩展名,使用不同的库
if filename.endswith('.zip'):
fp = zipfile.ZipFile(filename)
elif filename.endswith('.rar'):
fp = rarfile.RarFile(filename)
尝试解压
首先尝试不用密码解压。如果成功,说明压缩文件没有密码。
fp.extractall(desPath)
fp.close()
print('No password')
return
暴力破解
try:
# 读取密码本文件
fpPwd = open('pwd.txt')
except:
print('No dict file pwd.txt in current directory.')
return
for pwd in fpPwd:
pwd = pwd.rstrip()
try:
fp.extractall(path=desPath, pwd=pwd.encode())
print('Success! ====>'+pwd)
fp.close()
break
except:
pass
fpPwd.close()
节目入口
if __name__ == '__main__':
filename = sys.argv[1]
if os.path.isfile(filename) and filename.endswith(('.zip', '.rar')):
decryptRarZipFile(filename)
else:
print('Must be Rar or Zip file')
使用
如果我们想使用上面的代码,只需要在命令行执行main.py即可。例如 main.py test.zip
运行结果:
$ python main.py test.zip
Success! ====>323126
如何获取扩展码本?
看到这里,细心的朋友一定会发现,核心的东西并不是代码,而是“码书”。理论上,只要密码本中有足够的密码,就可以获取压缩包的密码。这通常也称为“撞库”**。
如何加快破解过程?
解决了码书的问题后,深入思考的朋友肯定会有新的疑问。既然密码本如此巨大,如何加快破解过程呢?这里有两个想法
多线程(进程)破解
如果密码本很多,密码数量巨大,我们可以使用多线程(进程)来读取密码。一个进程读取一本密码本,一个线程分段读取密码。当然,如果你正在使用的话,建议不要使用多线程,因为里面的线程是没有用的。如果您有兴趣,可以阅读相关资料。
利用 GPU 加速
我们上面的代码都是在CPU上运行的。即使开启多线程(进程),也只是使用CPU资源。然而,如果我们想加快破解过程,我们实际上可以使用空闲的GPU资源。
在介绍为什么可以使用GPU加速之前,我们需要先明确一点。两者都是为了完成计算任务而设计的。
那么为什么会想到使用 GPU 加速呢?这就是关于两者的区别:CPU虽然有多个核心,但总数不超过两位数,而且每个核心的计算能力都极其强大。 GPU的核心数量远远超过CPU,但每个核心的计算能力却与CPU相差甚远。
我们可以举一个简单的例子,解决一个问题,CPU是博士生,GPU是小学生。 CPU负责理解问题并整理步骤和解决方案,而GPU则负责简单但大量的简单运算。 。
因此,理论上,在破解密码的过程中,我们可以利用GPU来加速这一过程。
事实上,这样的工具已经出现了,而且是最著名的一个。它号称是世界上最快的密码恢复工具,可以基于CPU/GPU工作。
扫一扫在手机端查看
-
Tags : python
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。