【python】80行代码实现压缩包密码破解软件,支持zip和rar

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 握手包跑包

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

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

from unrar.rarfile import RarFile
import concurrent.futures as cf
from zipfile import ZipFile
import time
import os

文章目录

  1. 软件下载
  • win64:
  • mac、linux和win32用户请参考打包教程使用源代码打包。
  1. 破解测试
  2. 文件说明
  3. 项目简介
  • 这是一个基于python开发的压缩包密码破解软件,利用多线程技术高速地读取密码字典并对压缩包尝试破解。
  1. 项目地址
  • github:
  1. 破解思路
  • 压缩包加密算法基本上都是不可逆的,即我们不能在算法层面上推理出它的明文。所以我们只能用穷举法不断的碰撞,大白话就是随机生成很多密码,然后一个一个的试。具体思路如下:
  1. 开发环境
  • 我们用到的模块有:
pip install unrar
D:Program Files (x86)UnrarDLL
├─Documentation
├─Examples
├─NoCrypt
├─Examples
└─x64
│  └─UnRAR64.lib
├─UnRAR.lib
  • os、time、zipfile和concurrent.futures都是python内置模块,无需安装。
  • unrar是第三方模块,可以通过pip指令安装:
    • 根据pypi官网可知,安装后还需要配置一下库文件才能正常使用:
    • 具体配置教程如下:(windows)
    1. 下载库文件的压缩包
    2. 选择解压路径D:Program Files (x86)UnrarDLL,点击Install解压
    3. 解压后的主要目录结构如下:
f = open('pwd.txt', 'w')
l = [str(i) for i in range(10)]
for i in l:
    for j in l:
        for k in l:
            f.write(i+j+k+'n')
f.close()
   4. 配置系统环境变量。变量名必须是:UNRAR_LIB_PATH,变量值:D:Program Files (x86)UnrarDLLx64UnRAR64.dll(如果你是win32系统,变量值:D:Program Files (x86)UnrarDLLUnRAR.dll)  
   5. 配置完成后,记得点击确定保存,然后重启代码编辑器vscode或pycharm,不重启不会生效的!  
  • 顺便一提:
    • 解压rar文件时,我们用的模块是unrar里面的rarfile,其实还有个直接叫rarfile的包,但是那个rarfile包依赖unrar环境,配置还很复杂,所以我直接放弃了,用unrar即可。
  1. 生成字典
  • 这里我生成了一个包含所有三位数的字典,并按行保存到pwd.txt文件中。
def crack(self, funcname):
    book = open(self.bookname)
    with cf.ThreadPoolExecutor(12) as tp:
        while True:
            pwd = book.readline().strip()
            tp.submit(funcname, pwd)
  • 当然,实际情况是很复杂的。密码可能不止三位,并且不仅包含数字,还有字母和特殊字符等。你可以在我的代码基础上做些修改,生成更为复杂的密码字典。如果你不想自己写代码,我这里也为大家准备好了一个43G的大字典(你下载的是压缩过的只有80MB,下载后请解压):
    • 43G大字典:
    • 这里再推荐一个提供密码字典下载的网站:
  1. 读取密码
  • 密码字典一般都很大,假如你用的密码字典是43GB,直接读整个文件的话可能会导致内存溢出,所以我们一般是按行读,读一行处理一行,处理完成后指针会自动帮你定位到下一行,往复循环即可,具体python实现如下:
def zip_crack(self, pwd):
    runtime = self.show()
    print(f'破解已用时: {runtime} 当前密码: {pwd}', end='r')
    try:
        zip_file = ZipFile(self.filename)
        zip_file.pwd = pwd.encode()
        zip_file.extractall()
        print(f'破解已完成: {runtime} 压缩密码: {pwd}')
        with open('res.txt','w') as f:
            f.write(pwd)
        os._exit(0)
    except:
        pass
def rar_crack(self, pwd):
    runtime = self.show()
    print(f'破解已用时: {runtime} 当前密码: {pwd}', end='r')
    try:
        rar_file = RarFile(self.filename, pwd=pwd)
        rar_file.extractall()
        print(f'破解已完成: {runtime} 压缩密码: {pwd}')
        with open('res.txt','w') as f:
            f.write(pwd)
        os._exit(0)
    except:
        pass
# run.py
from unrar.rarfile import RarFile
import concurrent.futures as cf
from zipfile import ZipFile
import time
import os
class CompressionCrack(object):
    def __init__(self):
        self.filename = input('请输入压缩文件的绝对路径: ')
        self.bookname = input('请输入密码字典的绝对路径: ')
        self.startTime = time.time()
    def show(self):
        runtime = round(time.time()-self.startTime)
        if runtime > 3600:
            h = int(runtime/3600)
            m = int(runtime % 3600/60)
            s = runtime % 3600 % 60
            runtime = f'{h}h{m}m{s}s'
        elif runtime > 60:
            m = int(runtime/60)
            s = runtime % 60
            runtime = f'{m}m{s}s'
        else:
            runtime = f'{runtime}s'
        return runtime
    def zip_crack(self, pwd):
        runtime = self.show()
        print(f'破解已用时: {runtime} 当前密码: {pwd}', end='r')
        try:
            zip_file = ZipFile(self.filename)
            zip_file.pwd = pwd.encode()
            zip_file.extractall()
            print(f'破解已完成: {runtime} 压缩密码: {pwd}')
            with open('res.txt', 'w') as f:
                f.write(pwd)
            os._exit(0)
        except:
            pass
    def rar_crack(self, pwd):
        runtime = self.show()
        print(f'破解已用时: {runtime} 当前密码: {pwd}', end='r')
        try:
            rar_file = RarFile(self.filename, pwd=pwd)
            rar_file.extractall()
            print(f'破解已完成: {runtime} 压缩密码: {pwd}')
            with open('res.txt', 'w') as f:
                f.write(pwd)
            os._exit(0)
        except:
            pass
    def crack(self, funcname):
        book = open(self.bookname)
        with cf.ThreadPoolExecutor(12) as tp:
            while True:
                pwd = book.readline().strip()
                tp.submit(funcname, pwd)
    def main(self):
        if self.filename.endswith('.zip'):
            filetype = 1
        elif self.filename.endswith('.rar'):
            filetype = 0
        else:
            print('不支持的压缩格式,必须是rar或zip')
            os._exit(0)
        if filetype:
            self.crack(self.zip_crack)
        else:
            self.crack(self.rar_crack)
if __name__ == "__main__":
    CompressionCrack().main()

  1. 尝试破解
  • 10.1. 尝试破解zip格式的压缩包
  • 10.2. 尝试破解rar格式的压缩包
  1. 完整代码
  2. 软件打包
  • 推荐在pipenv创建的虚拟环境下打包,这样打包的体积会很小,具体打包教程如下:
  • 执行命令pip install pipenv安装pipenvcd到项目路径,运行命令pipenv install创建虚拟环境运行命令pipenv shell激活虚拟环境安装项目开发中用到的第三方模块:pip install unrar安装打包工具:pip install pyinstaller执行打包命令:pyinstaller -F -i app.ico run.py
  • 第6步执行打包命令前先停一下。
  • unrar模块依赖库文件UnRAR64.dll,所以先把UnRAR64.dll复制到项目路径下(win32复制UnRAR.dll)。
  • 然后修改pipenv创建的虚拟环境里面的unrar的代码,具体是修改C:Usersxxx.virtualenvspython-compression-crack-ZMK49n5qLibsite-packagesunrar路径下的unrarlib.py文件,将第33行代码由libpath = os.environ.get(‘UNRARLIBPATH’, None)改为libpath = ‘UnRAR64.dll’。
  • 好了,可以执行打包命令了:pyinstaller -F -i app.ico run.py。
  1. 引用参考
赞(0)