利用Python破解ZIP或RAR文件密码

caocao1年前教程222

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

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

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

pipenv install rarfile

rar文件怎么打开安卓手机一、破解原理

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

二、实验环境

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

利用Pipenv安装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')
import zipfile
import itertools
from concurrent.futures import threadPoolExecutor
def 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 = False
if __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中的线程就是鸡肋,有兴趣的可以阅读相关资料。

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

hashcat怎么解压缩文件密码
import queue
from concurrent.futures import 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等工作。

rar文件怎么打开

相关文章

弱口令(Weak Password)总结和爆破工具

弱口令(Weak Password)总结和爆破工具

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

python字典中get()函数的用法个人小结

python字典中get()函数的用法个人小结

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

vMix Pro 24破解补丁使用教程

vMix Pro 24破解补丁使用教程

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

Kali Linux 秘籍 第八章 密码攻击

Kali Linux 秘籍 第八章 密码攻击

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