Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用 Python 破解 ZIP 或 RAR 文件密码

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

作者头像
出其东门
发布于 2020-02-12 08:58:41
发布于 2020-02-12 08:58:41
11.1K01
代码可运行
举报
文章被收录于专栏:01二进制01二进制
运行总次数:1
代码可运行

我们经常会从网络上下载一些带密码的压缩包,想要获取里面的内容,往往就要给提供商支付一些费用。想要白嫖其中的内容,常见的做法是百度搜索一些压缩包密码破解软件,但后果相信体验过的人都知道。本文将会利用 Python 破解压缩包的密码,这里以 ZIP/RAR 为例。

本文源码可在微信公众号「01 二进制」后台留言「破解压缩包」获得

破解原理

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

实验环境

本文采取的虚拟环境为 Pipenv,有关 Pipenv 的详细介绍可以参考我的这篇文章 ?《Python 管理哪家强?

  • zipfile:Python 标准库,使用时直接导入即可
  • rarfile:Python 第三方库,使用时需要安装,API 文档(https://rarfile.readthedocs.io/en/latest/api.html)

利用 Pipenv 安装 rarfile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pipenv install rarfile

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

编码

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

准备密码本

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

读取压缩文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 根据文件扩展名,使用不同的库
if filename.endswith('.zip'):
    fp = zipfile.ZipFile(filename)
elif filename.endswith('.rar'):
    fp = rarfile.RarFile(filename)

尝试解压

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fp.extractall(desPath)
fp.close()
print('No password')
return

暴力破解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

程序入口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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')

使用

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

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python main.py test.zip
Success! ====>323126

扩展

密码本如何获取?

看到这里,细心的小伙伴一定会发现,最核心的其实不是代码,而是「密码本」。理论上只要密码本中的密码足够多,就一定能获取到压缩包的密码,这也就是俗称的「撞库」

这时问题又来了,如何搜集到足够多的密码?我在搜索资料的时候发现已经有人整理好了,我 fork 了一份到了自己的仓库,有兴趣的可以点击 ?爆破字典(https://github.com/YueYongDev/Blasting_dictionary)

如何加速破解过程?

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

多线程(进程)破解

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

利用 GPU 加速

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

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

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

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

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

事实上,这样的工具也已经出现了,Hashcat 便是最出名的一个,它号称是世界上最快的密码恢复工具,可以基于 CPU/GPU 工作。有兴趣的可以访问他的官网https://hashcat.net/hashcat/进行了解。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 01二进制 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux基础知识笔记(1)
1.操作系统概念 人与计算机交流的中介 管理和控制计算机中硬件和软件资源 处于上层应用程序和底层硬件之间的软件平台 2.操作系统组成 内核:直接控制管理硬件 内核直接识别计算机二进制语言 解释器:把c c++ java python等语言解释成二进制,常见的解释器:bash 软件程序:不同程序,完成不同需求 3.Linux系统介绍 开放源代码的,可以自由传播的类Unix操作系统 多用户、多任务,支持多线程和多cpu的操作系统 4.Linux发展史 AT&T 美国电话局 unix(肯.汤普逊,丹尼斯.里奇) 1970 美国加州大学,伯克利分校 UNIX小组 FreeBSD--macOS、IOS NETBSD OPENBSD minix--荷兰,詹宁邦 1980 Linux--芬兰 赫尔辛基大学 林纳斯.托瓦斯 1991
网络豆
2024/03/17
1310
Linux基础知识笔记(1)
Hadoop环境搭建及安装
2) Xshell(可选):用于在本地访问虚拟服务器,也可选择其他远程工具,如SecureCRT
数人之道
2022/01/07
2.6K0
Hadoop环境搭建及安装
Linux 基础知识
---- 简要 作为了一个服务端开发人员而言,不仅有强大的内功而且也需要对一些工具和运维方面的知识。Linux毋容置疑是每一个后端开发人员必须熟悉或者精通的“大法“之一。随着自己的成长和技术的沉淀,会发现自己对Linux的认识依然停留在一个初级阶段。”发愤图强“必须解决这个根本问题。 Linux 杂记 虚拟机网络类型 先从linux安装说起吧,先来看一下虚拟机的网络连接方式的选择。我们先看一下VMmare网络类型:NAT、Bridged和Host Only NAT(Network Address Tra
吕海峰
2018/04/03
1.8K0
Linux 基础知识
超详细的CentOS7.4下载与图文安装
链接:https://pan.baidu.com/s/1cRgNfZ5REf4LQMIyl5K3hQ 提取码:lp6q
全栈程序员站长
2022/08/10
5.9K0
超详细的CentOS7.4下载与图文安装
CentOS7安装Oracle11G完整版图文教程
系统环境:CentOS Linux release 7.4.1708 (Core) Oracle版本:Oracle Database 11g R2
全栈程序员站长
2022/09/02
4.2K0
【基础】使用VMware Workstation搭建服务器模拟环境
VMware12 下载地址链接:链接:https://pan.baidu.com/s/1NCdOQf8f40JhG5HzVjilew 密码:ukaf
吴柯
2018/07/25
2.9K0
【基础】使用VMware Workstation搭建服务器模拟环境
Oracle部署就是这么简单
在/etc/sysconfig/network-scripts文件夹下的ifcfg-eth0中修改
俊才
2019/09/12
1.5K0
Oracle部署就是这么简单
hadoop伪分布式环境搭建
  由于博主之前没有从事过hadoop相关的开发工作,最近正好遇到一个hadoop相关的项目,于是决定自学研究一下,博主整理的东西绝对是最全最详细的,不要问为什么,
会说话的丶猫
2020/08/06
6100
hadoop伪分布式环境搭建
Linux的安装和部署
VMware Workstation是一款功能强大的桌面虚拟计算机软件,可以提供给用户在单一的桌面上同时运行多个相同或者不同的操作系统,方便专业人员进行开发、部署、测试等工作;简单来说就是通过VMware 创建出虚拟的硬件设备,然后再使用虚拟的硬件设备进行操作系统的安装和运行,从而满足同时运行多个操作系统的需求。
用户10048459
2022/09/16
5.8K0
【安装】CentOS7.7下图形化安装Oracle11g-RAC
本篇的目的是:梳理一份CentOS/RHEL7+11gR2 RAC部署的较标准文档。 结合了公司内部文档及mos等多方材料,尽可能梳理完整。
甚至熊熊
2021/05/11
5.3K0
【安装】CentOS7.7下图形化安装Oracle11g-RAC
Linux (RHEL 5.4)下安装 Oracle 10g R2
如转载,请注明出处:http://blog.csdn.net/robinson_0612/archive/2010/03/30/5431428.aspx      虽然 Oracle 10g Database Release 2 已经推出几年了,但这个版本仍然为很多初学者学习的版本,下面详细讲述了安装 Oracle 10g 的步骤。 一、 linux 的版本选用     目前 linux(RHEL) 使用的主要版本为 5.4 版,可以到下面的地址下载其安装文件。        RHEL5.4 下载   http://download.chinaunix.net/download/0013000/12623.shtml 二、关于 linux 的安装     很多初学者使用的是 XP 系统上的虚拟机来安装 Linux ,因此本文也是在虚拟机上安装 Linux 然后再安装 Oracle 10g. 至于虚拟机可以使用 VMware 6.5 Workstation 版,这个可以到百度 ,Google 找一下,比较多。安装了 linux 时,我们需要特殊的配置一下 Oracle 的安装环境,关于这个配置 Oracle 安装环境,请参考: VmWare6.5.2下安装 RHEL 5.4(配置 Oracle安装环境) 三、安装 Oracle 前的环境检查     1. 下载 Oracle 10g R2        Oracle 10g for Linux   http://www.oracle.com/technology/software/products/database/index.html     2. 查看 Linux 内核参数,有点多余,作为初学者,还是可以练习一下。请确保高于 2.6.9 -5.0.5.EL 以上内核              强烈建议大家安装 SecureCRT 或 VNC 工具,这样不必来回在 XP 和 Linux 下切换。        uname –r [root@localhost ~]# uname -r        2.6.18 -164.el5xen     3. 查看 CPU 、内存、 Swap 及磁盘可用空间        内存:至少 1GB ,下图中我的内存仅 900MB        Swap :一般为可用物理内存的 2 倍,比如设定为 2GB        /Temp 分区:至少 400MB        Oracle 安装目录所在的分区:至少 4GB [root@localhost ~]# free -m                     total       used       free     shared    buffers     cached        Mem:           900        568        331          0         56        356        -/+ buffers/cache:        154        745        Swap:         2251          0       2251 [root@localhost ~]# df -h        Filesystem            Size  Used Avail Use% Mounted on        /dev/sda2             6.4G  3.8G  2.3G  63% /        /dev/sdd1             6.8G  144M  6.3G   3% /u01        /dev/sdc2             1.2G   34M  1.1G   3% /home        /dev/sdc1             760M   17M  704M   3% /tmp        /dev/sda1             456M   18M  415M   5% /boot        tmpfs                    450M     0  450M   0% /dev/shm        none                     450M   104K  450M   1% /var/lib/xenstored        /dev/hdc               2.8G  2.8G     0 100% /media/RHEL_5.4 i386 DVD 四、配置安装环境     1. 安装补丁包        关于确认补丁包的是否已安装,可以使用下述方式来查看        rpm -q gcc make
Leshami
2018/08/07
1.2K0
【安装】CentOS7.7下图形化安装Oracle11gR2
安装数据库阶段是非常重要的一环,安装合理可以避免很多后续问题,当前生产环境基本都使用的CentOS7+Oracle11gR2的搭配,现将虚拟机环境下图形安装方式整理如下,内容包含:系统参数设置、数据库软件安装、监听配置及建库
甚至熊熊
2021/04/22
1.2K0
【安装】CentOS7.7下图形化安装Oracle11gR2
Oracle Linux 6.3下安装Oracle 11g R2(11.2.0.3)
    本文主要描述了在Oracle Linux 6.3下安装Oracle 11gR2(11.2.0.3)。从Oracle 11g开始,Oracle官方网站不再提供其Patch的下载链接,需要使用Meatlink账户才可以进行下载。童鞋们不要着急,没有Metalink账户的也可以自己百度一下,网上有很多下载链接,迅雷就可以搞定了。Oracle 11.2.0.3整合为7个zip压缩包,如果仅仅是安装Oracle Database,下载1至2.zip包即可。下面是其安装步骤。
Leshami
2018/08/13
1.4K0
Oracle Linux6.9下安装Oracle 11.2.0.4.0及psu补丁升级
Oracle (Enterprise) Linux 是一个基于 Red Hat Enterprise Linux 源码构建的 Linux 发行版,由 Oracle 公司打包并免费分发。相较于后者,Oracle 对内核等组件进行了修改,并包含了一些新的特性。下载地址:V860937-01.iso
loong576
2019/09/10
2.7K0
Oracle Linux6.9下安装Oracle 11.2.0.4.0及psu补丁升级
实战篇:SUSE 15 SP3 安装 Oracle 19C RAC 数据库
这两天看到有朋友咨询 SUSE 15 SP3 安装 Oracle 19C RAC 遇到点问题,趁着周末有时间,抱着学习的心态,研究了一下如何安装,接下来就分享一下从零开始部署的流程!
Lucifer三思而后行
2021/11/10
4.2K0
实战篇:SUSE 15 SP3 安装 Oracle 19C RAC 数据库
基于Linux (RHEL 5.5) 安装Oracle 10g RAC
    本文所描述的是在Red Hat 5.5下使用vmware server 来安装Oracle 10g RAC(OCFS + ASM),本文假定你的RHEL5已经安装完毕,下面列出的是对Linux的具体配置及安装过程。
Leshami
2018/08/14
1.5K0
基于Linux (RHEL 5.5)  安装Oracle 10g RAC
Mac 安装 VM 虚拟机,搭载 Ubuntu 系统
结合网上资料,自己亲自动手实践,每步安装都有截图,解释说明如何在Mac 安装 VM 虚拟机然后再装 Ubuntu 系统。
子乾建建-Jeff
2020/06/29
6.2K4
Mac 安装 VM 虚拟机,搭载 Ubuntu 系统
Linux系统安装,教你安装一个属于自己的Linux系统
肯定有人和我一样,很早就听说过Linux的这个词,但是又没接触过。然后随手百度一下看着满满的命令惊呆了,不知道从哪里开始学习。这种状况一直维持到我面试的时候,我不怕跟你们说,我拿着写着“熟悉Linux的系统”的简历去面试,其实当时的我都没有了解Linux的到底是什么!我相信大家肯定都用过的Windows系统,或者也用过的mac系统,其实Linux也是和这些在Windows,Mac一样,都是系统,只是不同的形式呈现出来给用户体验。这样说大家都了解吧,就是个系统。
全栈程序员站长
2022/09/05
2.5K0
Linux系统安装,教你安装一个属于自己的Linux系统
实战篇:VMware Workstation 虚拟机安装 Linux 系统
很多朋友工作学习中需要在 Windows 上安装 Linux 系统,最常用的就是使用 VMware Workstation 虚拟机。
Lucifer三思而后行
2022/01/08
4K0
实战篇:VMware Workstation 虚拟机安装 Linux 系统
VMware安装CentOS 7.x
写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。
一头小山猪
2020/12/15
9390
VMware安装CentOS 7.x
推荐阅读
相关推荐
Linux基础知识笔记(1)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验