rar密码忘记了怎么解除 Hashcat号称是世界上最快的密码恢复工具

caocao2年前教程264

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 曹操wifi

各位好 又见面了 我是曹操 今天给大家带来一篇新的教程

希望各位细心学习 低调用网

hashcat破解rar密码

有关于rar密码忘记了怎么解除(rar加密压缩包破解方法)方面的知识,小编在此整理出来,给大家作为参考,下面就详细的介绍一下关于rar密码忘记了怎么解除(rar加密压缩包破解方法)的相关内容。

一、破解原理

其实原理很简单,一句话概括就是「大力出奇迹」,Python有两个压缩文件库:zipfile和rarfile,这两个库提供的解压缩方法extractall()可以指定密码,这样的话首先生成一个密码字典(手动或用程序),然后依次尝试其中的密码,如果能够正常解压缩表示密码正确。

二、实验环境

本文采取的虚拟环境为Pipenv.

pipenv install rarfile
# 根据文件扩展名,使用不同的库if filename.endswith(".zip"):    fp = zipfile.ZipFile(filename)elif filename.endswith(".rar"):    fp = rarfile.RarFile(filename)

(资料图片仅供参考)

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

利用Pipenv安装rarfile

最后,再将一个带有密码的压缩包放入实验环境中即可。

三、编码

知道原理后,编码就会非常简单了

准备密码本

「密码本」其实就是一个包含了所有可能密码的文件,用户可以手动录入,也可以用程序录入。文末还会有一个介绍。

读取压缩文件

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")
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)

尝试解压

先尝试不用密码解压缩,如果成功则表示压缩文件没有密码

暴力破解

程序入口

四、使用

如果想要使用上述代码,我们只需在命令行执行python main.py即可。例如python main.py test.zip

运行结果:

$ python main.py test.zip
Success! ====>323126

五、扩展

密码本如何获取?

如何加速破解过程?

解决了密码本的问题,深入思考的小伙伴的一定又会有新的疑问,密码本既然如此庞大,那如何加速破解的过程呢?这里给出两个思路

多线程(进程)破解

密码本如果很多且密码数量庞大时,我们可以采用多线程(进程)的方式读取密码,一个进程读一个密码本,一个线程分段读密码。当然,如果是在Python中,建议不要采用多线程,因为Python中的线程就是鸡肋,有兴趣的可以阅读相关资料。

import queuefrom concurrent.futures import ThreadPoolExecutorclass 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) # 设置队列大小

这个代码有个问题,跑一会儿内存就爆了!原因:ThreadPoolExecutor默认使用的是无界队列,尝试密码的速度跟不上生产密码的速度,会把生产任务无限添加到队列中。导致内存被占满。内存直接飙到95:

然后程序奔溃:

利用GPU加速

我们以上的代码都是运行在CPU上的,即使开启多线程(进程)也只是利用到CPU的资源,但如果想要加速破解过程,我们其实还可以利用闲置的GPU资源。

在介绍为什么可以利用GPU加速前,我们需要明确一个观点,两者都为了完成计算任务而设计。

那为什么会想到使用GPU加速呢?这是就要说到两者的不同了:CPU虽然有多核,但总数没有超过两位数,并且每个核的运算能力极其强大。而GPU的核数远超CPU,但每个核的运算能力与CPU的核相比就相差甚远了。

我们可以简单的举个例子,解一道题,CPU就是博士生,GPU就是小学生,CPU负责理解题目并且整理出解题的步骤以及解法,而GPU负责其中很简单但是数量又很大的简单运算就行了。

因此理论上在破解密码的过程中,我们完全可以使用GPU来加速这一过程。

事实上,这样的工具也已经出现了,Hashcat便是最出名的一个,它号称是世界上最快的密码恢复工具,可以基于CPU/GPU等工作。

算就行了。

因此理论上在破解密码的过程中,我们完全可以使用GPU来加速这一过程。

事实上,这样的工具也已经出现了,Hashcat便是最出名的一个,它号称是世界上最快的密码恢复工具,可以基于CPU/GPU等工作。

相关文章

kali linux wifi攻击

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 曹操wifi 各位好 又见面了 我是曹操 今天给大家带来一篇新的教程 希望各位细心学习 低调用网 - Aircr...

据说是“世界上最快”的密码恢复工具

据说是“世界上最快”的密码恢复工具

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 曹操wifi 各位好 又见面了 我是曹操 今天给大家带来一篇新的教程 希望各位细心学习 低调用网 brew in...

Kali密码攻击之——离线攻击工具

Kali密码攻击之——离线攻击工具

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 曹操wifi 各位好 又见面了 我是曹操 今天给大家带来一篇新的教程 希望各位细心学习 低调用网 在渗透测试中,在线密码攻...

cdlinux找不到无线网卡

cdlinux找不到无线网卡

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 曹操wifi 各位好 又见面了 我是曹操 今天给大家带来一篇新的教程 希望各位细心学习 低调用网 在虚拟机中运行Cdlin...