【python】80行代码实现压缩包密码破解软件,支持zip和rar 1. 软件下载 2. 破解测试 3. 文件说明 4. 项目简介 5. 项目地址 6. 破解思路 7. 开发环境 8. 生成字典 9. 读取密码 10. 尝试破解 11. 完整代码 12. 软件打包 13. 引用参考


win64:https://ghgxj.lanzous.com/iEpZUj3998d

maclinuxwin32用户请参考打包教程使用源代码打包。

2. 破解测试

【python】80行代码实现压缩包密码破解软件,支持zip和rar
1. 软件下载
2. 破解测试
3. 文件说明
4. 项目简介
5. 项目地址
6. 破解思路
7. 开发环境
8. 生成字典
9. 读取密码
10. 尝试破解
11. 完整代码
12. 软件打包
13. 引用参考

3. 文件说明

  • run.exe:压缩包密码破解软件,支持ziprar格式
  • pwd.txt:包含所有3位数的密码字典,从000999
  • res.txt:破解成功后保存密码的文件
  • 999.rar:加密的rar压缩包,加密密码是:999,里面的内容是一张图片
  • 999.zip:加密的zip压缩包,加密密码是:999,里面的内容是个txt文件
  • run.pypython源码
  • UnRAR64.dllrar解压依赖库文件
  • app.ico:软件图标
  • gan.py:生成密码字典的代码
  • readme.md:项目说明文件

4. 项目简介

这是一个基于python开发的压缩包密码破解软件,利用多线程技术高速地读取密码字典并对压缩包尝试破解。

5. 项目地址

github: https://github.com/XavierJiezou/python-compression-crack

6. 破解思路

压缩包加密算法基本上都是不可逆的,即我们不能在算法层面上推理出它的明文。所以我们只能用穷举法不断的碰撞,大白话就是随机生成很多密码,然后一个一个的试。具体思路如下:

【python】80行代码实现压缩包密码破解软件,支持zip和rar
1. 软件下载
2. 破解测试
3. 文件说明
4. 项目简介
5. 项目地址
6. 破解思路
7. 开发环境
8. 生成字典
9. 读取密码
10. 尝试破解
11. 完整代码
12. 软件打包
13. 引用参考

7. 开发环境

我们用到的模块有:

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

ostimezipfileconcurrent.futures都是python内置模块,无需安装。


unrar是第三方模块,可以通过pip指令安装:

pip install unrar

根据pypi官网可知,安装后还需要配置一下库文件才能正常使用:
【python】80行代码实现压缩包密码破解软件,支持zip和rar
1. 软件下载
2. 破解测试
3. 文件说明
4. 项目简介
5. 项目地址
6. 破解思路
7. 开发环境
8. 生成字典
9. 读取密码
10. 尝试破解
11. 完整代码
12. 软件打包
13. 引用参考

具体配置教程如下:(windows)

1、下载库文件的压缩包

http://www.rarlab.com/rar/UnRARDLL.exe

2、选择解压路径D:Program Files (x86)UnrarDLL,点击Install解压
【python】80行代码实现压缩包密码破解软件,支持zip和rar
1. 软件下载
2. 破解测试
3. 文件说明
4. 项目简介
5. 项目地址
6. 破解思路
7. 开发环境
8. 生成字典
9. 读取密码
10. 尝试破解
11. 完整代码
12. 软件打包
13. 引用参考

3、解压后的主要目录结构如下:

D:Program Files (x86)UnrarDLL
├─Documentation
├─Examples
├─NoCrypt
├─Examples
└─x64
│  └─UnRAR64.lib
├─UnRAR.lib

4、配置系统环境变量。变量名必须是:UNRAR_LIB_PATH,变量值:D:Program Files (x86)UnrarDLLx64UnRAR64.dll(如果你是win32系统,变量值:D:Program Files (x86)UnrarDLLUnRAR.dll)
【python】80行代码实现压缩包密码破解软件,支持zip和rar
1. 软件下载
2. 破解测试
3. 文件说明
4. 项目简介
5. 项目地址
6. 破解思路
7. 开发环境
8. 生成字典
9. 读取密码
10. 尝试破解
11. 完整代码
12. 软件打包
13. 引用参考
5、配置完成后,记得点击确定保存,然后重启代码编辑器vscodepycharm,不重启不会生效的!

顺便一提:

解压rar文件时,我们用的模块是unrar里面的rarfile,其实还有个直接叫rarfile的包,但是那个rarfile包依赖unrar环境,配置还很复杂,所以我直接放弃了,用unrar即可。

8. 生成字典

这里我生成了一个包含所有三位数的字典,并按行保存到pwd.txt文件中。

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+'
')
f.close()

当然,实际情况是很复杂的。密码可能不止三位,并且不仅包含数字,还有字母和特殊字符等。你可以在我的代码基础上做些修改,生成更为复杂的密码字典。如果你不想自己写代码,我这里也为大家准备好了一个43G的大字典(你下载的是压缩过的只有80MB,下载后请解压):

43G大字典:https://ghgxj.lanzous.com/i8JR0j33r3a

这里再推荐一个提供密码字典下载的网站:

https://wiki.skullsecurity.org/Passwords

9. 读取密码

密码字典一般都很大,假如你用的密码字典是43GB,直接读整个文件的话可能会导致内存溢出,所以我们一般是按行读,读一行处理一行,处理完成后指针会自动帮你定位到下一行,往复循环即可,具体python实现如下:

def crack(self, funcname):
    book = open(self.bookname)
    with cf.ThreadPoolExecutor(12) as tp:
        while True:
            pwd = book.readline().strip()
            tp.submit(funcname, pwd)

10. 尝试破解

10.1. 尝试破解zip格式的压缩包

def zip_crack(self, pwd):
    runtime = self.show()
    print(f'破解已用时: {runtime} 当前密码: {pwd}', end='
')
    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

10.2. 尝试破解rar格式的压缩包

def rar_crack(self, pwd):
    runtime = self.show()
    print(f'破解已用时: {runtime} 当前密码: {pwd}', end='
')
    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

11. 完整代码

# 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='
')
        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='
')
        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()

12. 软件打包

推荐在pipenv创建的虚拟环境下打包,这样打包的体积会很小,具体打包教程如下:

  1. 执行命令pip install pipenv安装pipenv
  2. cd到项目路径,运行命令pipenv install创建虚拟环境
  3. 运行命令pipenv shell激活虚拟环境
  4. 安装项目开发中用到的第三方模块:pip install unrar
  5. 安装打包工具:pip install pyinstaller
  6. 执行打包命令: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行代码由lib_path = os.environ.get('UNRAR_LIB_PATH', None)改为lib_path = 'UnRAR64.dll'

好了,可以执行打包命令了:pyinstaller -F -i app.ico run.py

13. 引用参考

https://blog.csdn.net/qq_42951560/article/details/110097655