rar密码忘记了怎么解除 rar加密压缩包破解方法

一、破解原理其实原理很简单。一句话,就是“励精图治,创造奇迹”。Python有两个压缩文件库:zipfile和rarfile。这两个库提供的提取方法extractall()可以指定密码。这样先生成

本文最后更新时间:  2023-04-29 20:25:14

一、破解原理

其实原理很简单。一句话,就是“励精图治,创造奇迹”。Python有两个压缩文件库:zipfile和rarfile。这两个库提供的提取方法extractall()可以指定密码。这样先生成一个密码字典(手动或程序),然后依次尝试里面的密码。如果能正常提取,则密码正确。

二、实验环境

本文采用的虚拟环境是Pipenv。

zipfile:Python 标准库,使用时直接导入即可rarfile:Python 第三方库

使用Pipenv安装rarfile

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.') returnfor pwd in fpPwd: pwd = pwd.rstrip() try: fp.extractall(path=desPath, pwd=pwd.encode()) print('Success! ====>'+pwd) fp.close() break except: passfpPwd.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')

四。使用

如果我们想使用上面的代码,我们只需要执行python main.py<>

运行结果:

$ python main . py test . zip
成功!= = = = = >323126

动词 (verb的缩写)膨胀

密码本怎么拿?

https://github.com/YueYongDev/Blasting_dictionary

如何加快破解速度?

解决了密码本的问题,深入思考的朋友一定会有新的疑问。既然密码本这么庞大,怎么才能加快破解速度呢?这里有两个想法。

多线程(进程)破解

如果密码多,数量大,可以多线程(进程)读取密码,一个进程读取一个密码本,一个线程分段读取密码。当然,如果是在python中,建议不要采用多线程,因为python中的线程都是鸡肋。有兴趣的可以看相关资料。

import zipfileimport itertoolsfrom concurrent.futures import ThreadPoolExecutordef extract(file, password): if not flag: return file.extractall(path='.', pwd=''.join(password).encode('utf-8'))def result(f): exception = f.exception() if not exception: # 如果获取不到异常说明破解成功 print('密码为:', f.pwd) global flag flag = Falseif __name__ == '__main__': # 创建一个标志用于判断密码是否破解成功 flag = True # 创建一个线程池 pool = ThreadPoolExecutor(100) nums = [str(i) for i in range(10)] chrs = [chr(i) for i in range(65, 91)] # 生成数字+字母的6位数密码 password_lst = itertools.permutations(nums + chrs, 6) # 创建文件句柄 zfile = zipfile.ZipFile("加密文件.zip", 'r') for pwd in password_lst: if not flag: break f = pool.submit(extract, zfile, pwd) f.pwd = pwd f.pool = pool f.add_done_callback(result)

这段代码有问题。跑了一段时间内存就爆了!原因:ThreadPoolExecutor默认使用无界队列,尝试密码的速度跟不上生产密码的速度,会无限期地向队列中添加生产任务。导致内存满。记忆飙升至95:

然后程序崩溃了:

import queue from concurrent . futures导入ThreadPoolExecutor class BoundedThreadPoolExecutor(ThreadPoolExecutor):def _ _ init _ _(self,max_workers=None,Thread _ name _ prefix =''): super()。_ _ 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等工作。

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。