不管是刚刚接触python,还是没有接触过python的同学,在浏览本篇文章时应该都不会感觉到费力。(python2.7.6版本以上)
我会尽量详细直白的进行讲解,使得即使是一个没有python编码基础的小白,在阅读完本篇文章后,大脑中也会产生如何去构建一个脚本的思路。
希望这篇文章能够提升你们对python的兴趣,了解python构建脚本时的基本思维,并且感受一下python语言的魅力所在吧。
你将难以想象,通过Python仅仅需要几十行的代码和一本好用的字典就能够轻松破解被加密的压缩包文件。言归正传,我们来看一下我们是如何一步步构建脚本框架,修改完善脚本,并最终实现口令破解的吧!!!
我们先创建一个文件,将其命名为“zip1.py”,打开文件后便开始了我们的编程之旅。
在此之前,由于是在实验环境,所以我们还需要创建一个含有口令的压缩包:密码设置为123456 并将其命名为”a.zip”
我们在尝试读取其中文件时,便会要求我们输入响应的口令:
下面我们就要了解,是什么原理让脚本运行起来时能够实现密码的破解呢?
我们打开刚刚创建的“zip1.py”,然后再里面输入以下代码:
import zipfile
zFile = zipfile.ZipFile("a.zip")
zFile.extractall(pwd="123456")
我们首先在第一行调用了python中的zipfile库。
zipfile库简单来说可以让我们实例化压缩文件,并且提供将其破解的函数。
导入库后,用带有口令保护的zip文件的文件名,实例化一个新的ZipFile类。
要解压这个ZIP文件 我们需要用的zipfile库中的“extractall()”函数
pwd就是压缩包的密码。
来运行一下脚本,我们发现脚本会将破解后的文件解压,并且存放在我们的根目录下。
现在我们已经了解了破解流程,接下来就可以打造属于我们自己的工具了!
我们在破解的时候当然不可能逐一去输入账号密码,这样太费劲了!所以我们需要拥有一本属于自己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)
然后尝试运行一下这个脚本:我们发现报错了!
我们的字典内容如下:其中包含我们的正确口令。我们再来看一下报错信息。
admin
qweqasd
123456
akjshdkj
9999999
我们都过检查报错信息的末端发现,这是由于口令错误引起的,进而继续追踪相关函数,发现正是extractall()出现错误引起的。
函数一旦出错便不会跳过错误继续向下遍历密码,那么我们就要使用try-except代码块来避免程序崩溃!
改进后的代码如下:
#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
try:尝试执行extractall()函数破解,执行成功则输出正确ZIP密码,若执行失败则进入except板块Pass掉这个异常!
这样就不会出现因为破解失败而导致的程序崩溃了
我们再来执行发现,脚本能够正常遍历字典中所有密码,并且输出!我们再来执行发现,脚本能够正常遍历字典中所有密码,并且输出!
我们不得不让我们的脚本更灵活,更具有可塑性!
下面我们来清理一下代码:
#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()
这里要重点介绍一下if __name__ == ‘__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()
我们将脚本执行一下看一下效果:
这里脚本中使用的是optparse库来设置的参数和参数解释
因为这会让代码比较简洁并且容易理解。
大家可以尝试使用getopt库来重新定义一下,那样子虽然有些麻烦,但是对于刚刚接触python的同学会更容易理解。
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
奖励系统 | 100.00 | 0 | 2020-08-04 13:01:59 | 投稿满 10 赞奖励 |
奖励系统 | 50.00 | 0 | 2020-08-01 11:11:13 | 投稿满 5 赞奖励 |
Track-聂风 | 50.00 | 0 | 2020-07-09 11:11:39 | 加油 |
打赏我,让我更有动力~
The attachment is hidden and you need to reply to the topic before it becomes visible.
© 2016 - 2024 掌控者 All Rights Reserved.
Track-聂风
发表于 2020-7-9
同学可以的,学会Python可以让你写出属于你自己的脚本,可以帮助你解放双手。
同学可以参考一下这个专门爆破ZIP的工具(Fcrackzip)然后优化脚本,写的越来越好
评论列表
加载数据中...
柠檬
发表于 2020-7-10
111
评论列表
加载数据中...
tnt3t34
发表于 2020-7-10
python就是这样练成的!阔椅!
评论列表
加载数据中...
心怀天下
发表于 2020-7-12
佩服
评论列表
加载数据中...
ouni
发表于 2020-7-13
厉害
评论列表
加载数据中...
rainy
发表于 2020-7-29
1
评论列表
加载数据中...
冷星魂
发表于 2020-8-1
太强了,我又来学习了
评论列表
加载数据中...
病毒裁缝
发表于 2020-8-6
太强了啊
评论列表
加载数据中...
白鸽
发表于 2020-8-6
1
评论列表
加载数据中...
hedianshui
发表于 2021-6-7
6
评论列表
加载数据中...