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

您所在的位置:网站首页 破解zip加密文件的方法有哪些呢 【python】80行代码实现压缩包密码破解软件,支持zip和rar

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

2024-07-12 20:32:23| 来源: 网络整理| 查看: 265

文章目录 1. 软件下载2. 破解测试3. 文件说明4. 项目简介5. 项目地址6. 破解思路7. 开发环境8. 生成字典9. 读取密码10. 尝试破解10.1. 尝试破解zip格式的压缩包10.2. 尝试破解rar格式的压缩包 11. 完整代码12. 软件打包13. 引用参考

1. 软件下载

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

mac、linux和win32用户请参考打包教程使用源代码打包。

2. 破解测试

在这里插入图片描述

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

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

5. 项目地址

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

6. 破解思路

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

在这里插入图片描述

7. 开发环境

我们用到的模块有:

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

os、time、zipfile和concurrent.futures都是python内置模块,无需安装。

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

pip install unrar

根据pypi官网可知,安装后还需要配置一下库文件才能正常使用: 在这里插入图片描述

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

1、下载库文件的压缩包

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

2、选择解压路径D:\Program Files (x86)\UnrarDLL,点击Install解压 在这里插入图片描述

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

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

4、配置系统环境变量。变量名必须是:UNRAR_LIB_PATH,变量值:D:\Program Files (x86)\UnrarDLL\x64\UnRAR64.dll(如果你是win32系统,变量值:D:\Program Files (x86)\UnrarDLL\UnRAR.dll) 在这里插入图片描述 5、配置完成后,记得点击确定保存,然后重启代码编辑器vscode或pycharm,不重启不会生效的!

顺便一提:

解压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+'\n') 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='\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 10.2. 尝试破解rar格式的压缩包 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 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='\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() 12. 软件打包

推荐在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:\Users\xxx\.virtualenvs\python-compression-crack-ZMK49n5q\Lib\site-packages\unrar路径下的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



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭