您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

小白也可以用Python破解ZIP口令啦

时间:2021-01-07 10:31:13  来源:  作者:

不管是刚刚接触Python/ target=_blank class=infotextkey>Python,还是没有接触过python的同学,在浏览本篇文章时应该都不会感觉到费力(python2.7.6版本以上)

我会尽量详细直白的进行讲解,使得即使是一个没有python编码基础的小白,在阅读完本篇文章后,大脑中也会产生如何去构建一个脚本的思路。

希望这篇文章能够提升你们对python的兴趣,了解python构建脚本时的基本思维,并且感受一下python语言的魅力所在吧。

你将难以想象,通过Python仅仅需要几十行的代码和一本好用的字典就能够轻松破解被加密的压缩包文件。言归正传,我们来看一下我们是如何一步步构建脚本框架,修改完善脚本,并最终实现口令破解的吧!!!

一.

我们先创建一个文件,将其命名为“zip1.py”,打开文件后便开始了我们的编程之旅。
在此之前,由于是在实验环境,所以我们还需要创建一个含有口令的压缩包:密码设置为123456 并将其命名为”a.zip”

小白也可以用Python破解ZIP口令啦

 


小白也可以用Python破解ZIP口令啦

 

 

我们在尝试读取其中文件时,便会要求我们输入响应的口令:

小白也可以用Python破解ZIP口令啦

 


小白也可以用Python破解ZIP口令啦

 

下面我们就要了解,是什么原理让脚本运行起来时能够实现密码的破解呢?
我们打开刚刚创建的“zip1.py”,然后再里面输入以下代码:

import zipfile
zFile = zipfile.ZipFile("a.zip")
zFile.extractall(pwd="123456")
小白也可以用Python破解ZIP口令啦

 

我们首先在第一行调用了python中的zipfile库
zipfile库简单来说可以让我们实例化压缩文件,并且提供将其破解的函数
导入库后,用带有口令保护的zip文件的文件名,实例化一个新的ZipFile类。
解压这个ZIP文件 我们需要用的zipfile库中的“extractall()”函数
pwd就是压缩包的密码。

来运行一下脚本,我们发现脚本会将破解后的文件解压,并且存放在我们的根目录下。

小白也可以用Python破解ZIP口令啦

 


小白也可以用Python破解ZIP口令啦

 

现在我们已经了解了破解流程,接下来就可以打造属于我们自己的工具了!
我们在破解的时候当然不可能逐一去输入账号密码,这样太费劲了!所以我们需要拥有一本属于自己zip爆破字典(1.txt)
有了字典之后,我们将字典中的密码遍历到password变量中对之前的代码进行一下修改:

#coding=utf-8
import zipfile

zFile = zipfile.ZipFile("a.zip") #破解的目标ZIP文件
passFile=open("1.txt") #这是我们的字典

for line in passFile:
 password=line.strip("n")
 zFile.extractall(pwd=password)

如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python,关注小编,并私信“01”即可进裙,领取python学习资料,会节约很多时间,减少很多遇到的难题。


然后尝试运行一下这个脚本:我们发现报错了
我们的字典内容如下:其中包含我们的正确口令。我们再来看一下报错信息。

admin qweqasd 123456 akjshdkj 9999999

我们都过检查报错信息的末端发现,这是由于口令错误引起的,进而继续追踪相关函数,发现正是extractall()出现错误引起的。
函数一旦出错便不会跳过错误继续向下遍历密码,那么我们就要使用try-except代码块来避免程序崩溃!

小白也可以用Python破解ZIP口令啦

 


小白也可以用Python破解ZIP口令啦

 

改进后的代码如下:

#coding=utf-8
import zipfile

zFile = zipfile.ZipFile("a.zip") #破解的目标ZIP文件
passFile=open("1.txt") #这是我们的字典

for line in passFile:
 password=line.strip("n")
 try:
 zFile.extractall(pwd=password)
 print password
 except Exception,e:
 pass
小白也可以用Python破解ZIP口令啦

 

try:尝试执行extractall()函数破解,执行成功则输出正确ZIP密码,若执行失败则进入except板块Pass掉这个异常!
这样就不会出现因为破解失败而导致的程序崩溃了

我们再来执行发现,脚本能够正常遍历字典中所有密码,并且输出!我们再来执行发现,脚本能够正常遍历字典中所有密码,并且输出!

小白也可以用Python破解ZIP口令啦

 


小白也可以用Python破解ZIP口令啦

 

但是我们需要的是函数模块化的脚本,而非线性执行的程序

我们不得不让我们的脚本更灵活,更具有可塑性!
下面我们来清理一下代码:

  • 我们将定义一个函数extractFile(),使这个函数具有带入字典密码并破解口令的功能。
  • 我们再定义一个函数main(),使其能够实例化ZIP文件,遍历字典内容,并执行extractFile()函数的功能!
    模块化的代码如下:
#coding=utf-8
import zipfile #导入zipfile库
def extractFile(zFile,password): #定义一个函数,形参为破解目标文件名,密码
try: #避免程序崩溃
zFile.extractall(pwd=password)
return password #返回密码
except:
pass
def main():
zFile=zipfile.ZipFile('a.zip') #实例化一个类ZipFile
passFile=open("1.txt") #打开字典文件
for line in passFile.readlines(): #For遍历字典内容
password=line.strip("n") #取出空格 上下间隙
guess = extractFile(zFile, password) #将函数放入一个变量
if guess: #如果破解成功则返回出密码 并且退出
print "[*]密码是: " + password +"n"
exit(0)
if __name__ == '__main__': #如果执行的是当前脚本 则执行函数main()
main()
小白也可以用Python破解ZIP口令啦

 

  • 这里要重点介绍一下if __name__ == ‘__main__‘: 这个条件的意思。
  • .py文件被直接运行时,if __name__ ==’__main__‘之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == ‘__main__‘之下的代码块不被运行。
  • 因为当前脚本运行时 __name__ =main
  • 如果是在abc.py脚本中被导入的话 像是import zip1
  • 这样的话__main__ =zip1 而不是main了 所以就会和__main__不匹配
  • 从而不会执行该函数。
  •  

现在我们离成功就差最后一步了!

  • 我们接下来我们要设置可选参数,这样我们就可以按照我们的要求,去使用我们想用的字典,破解我们想破解的文件。
  • 并且我们还要为此添加多线程的功能,这样在面临庞大的字典时 也能快速的对目标文件进行多线程破解!终极版代码如下:
#coding=utf-8
import zipfile 
import optparse #optparse用于设置可选参数,并进行参数的解释
from threading import Thread #从threading库导入Thread类 主要功能是设置多线程

def extractFile(zFile,password): 
 try:
 zFile.extractall(pwd=password) #python3中pwd需要的是byte
 print ('[+] Fonud Password : ' + password + 'n') 
 except:
 pass

def main():

 parser = optparse.OptionParser("[*] Usage: ./unzip.py -f <zipfile> -d <dictionary>") #设置参数解释

 parser.add_option('-f',dest='zname',type='string',help='specify zip file') #设置参数 可输入读取目标文件

 parser.add_option('-d',dest='dname',type='string',help='specify dictionary file') #设置字典参数

 (options,args) = parser.parse_args() #options可以理解为sys.argv[1:] 比如(-f xxx.zip -d x.txt)

 if (options.zname == None) | (options.dname == None): #确认参数是否存在
 print (parser.usage) #输出我们前面设置的解释
 exit(0) 

 zFile = zipfile.ZipFile(options.zname) #确定破解目标对象
 passFile = open(options.dname) #打开我们需要的字典
 for line in passFile: #遍历字典内容
 line = line.strip('n') 
 t = Thread(target=extractFile,args=(zFile,line)) #设置多线程 target可理解为等于一个方法(自定义函数),args可理解为我们向函数中传的参数 这里就是像extractall()中传入破解ZIP文件和遍历的字典密码
 t.start() #开启线程

if __name__ == '__main__': #如果在当前脚本执行 那么为真
 main()
小白也可以用Python破解ZIP口令啦

 

激动人心的时刻到了!

我们将脚本执行一下看一下效果:

小白也可以用Python破解ZIP口令啦

 


小白也可以用Python破解ZIP口令啦

 

破解成功!!!完结撒花★,°:.☆( ̄▽ ̄)/$:.°★ 。

这里脚本中使用的是optparse库来设置的参数和参数解释
因为这会让代码比较简洁并且容易理解。
大家可以尝试使用getopt库来重新定义一下,那样子虽然有些麻烦,但是对于刚刚接触python的同学会更容易理解。

学习完本篇章后大家就再也不用担心别人给ZIP文件加密啦~

建议大家配合crunch字典生成工具使用,将会事半功倍!!



Tags:Python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  Tags: Python  点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  Tags: Python  点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  Tags: Python  点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  Tags: Python  点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  Tags: Python  点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  Tags: Python  点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  Tags: Python  点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  Tags: Python  点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  Tags: Python  点击:(28)  评论:(0)  加入收藏
假设某日我开了一家空调公司,暂且就叫他天强空调安装设备公司吧,假装自己有公司,接了一单大生意,就是给甘肃省的各个高校安装空调(其实这边的气候基本用不到空调,就是假想一下),那么...【详细内容】
2022-07-01  Tags: Python  点击:(33)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
站内最新
站内热门
站内头条