【Python脚本进阶】1.3、第二个脚本:Zip文件口令破解机

该博客介绍了如何使用Python的zipfile库来尝试破解有口令保护的Zip文件。通过编写脚本,利用字典文件中的单词作为可能的密码,尝试解压缩文件。文章详细展示了从基本的文件读取到多线程并发测试的不同实现步骤,以及如何处理错误和捕获异常。此外,还提到了如何优化代码以提高性能,并提供了命令行参数解析的方法,允许用户自定义Zip文件和字典文件。
摘要由CSDN通过智能技术生成

目录

一、简介

概述:

二、示例

示例:

优化

提高性能

任意性

注:

测试方法:


一、简介

概述:

编写Zip文件口令破解机要学习zipfile 库的使用方法

打开Python解释器, 我们用help('zipfile')命令进一步了解这个库, 并重点看一下ZipFile 类中的extractall()方法。这个类和这个方法对我们编程破解有口令保护的Zip文件是很有用的。extractall()方法用可选参数指定密码的方式



二、示例

示例:

编写一个脚本知道口令情况,测试Zip 文件库的用法

导库, 用带有口令保护的Zip文件的文件名, 实例化一个新的ZipFile类。要解压这个Zip文件, 我们使用extractall()方法, 并在可选参数pwd上填入口令

import zipfile
zFile = zipfile.ZipFile("1.zip")
zFile.extractall(pwd="secret")

分析错误密码会是什么情况,来捕获和处理异常代码

import zipfile
zFile = zipfile.ZipFile("1.zip")
try:
    zFile.extractall(pwd="wrong")
except Exception as e:
    print(e)

可以用因口令不正确而抛出的异常,来测试字典文件中是否有Zip 文件的口令。

实例化一个ZipFile 类, 打开字典文件, 遍历并测试字典中的每个单词,如extractall()函数的执行没有出错, 则打印一条消息, 输出正确的口令。如果extractall()函数抛出口令错误, 就忽略这个异常, 并继续测试字典中的下一个口令

import zipfile
zFile = zipfile.ZipFile('1.zip')
passFile = open('dietionary.txt')
for line in passFile.readlines():
    password = line.strip('\n')
    try:
        zFile.extractall(pwd=password)
        print('Password = ' + password + '\n')
        exit(0)
    except Exception as e:
        pass

优化

不再是线性执行的程序。将程序模块化成分离函数,用函数模块化脚本

import zipfile
def extractFile(zFile, password):
    try:
        zFile.extractall(pwd=password)
        return password
    except Exception as e:
        return e

def main():
    zFile = zipfile.ZipFile('1.zip')
    passFile = open('dictionary.txt')
    for line in passFile.readlines():
        password = line.strip('\n')
        guess = extractFile(zFile, password)
        if guess:
            print('Password = ' + password + '\n')
            exit(0)

if __name__ == '__main__':
    main()

提高性能

利用线程同时测试多个口令, 而不是只能逐个测试词库中的单词。对词库中的每个单词, 都会生成一个新的线程去测试它。

import zipfile
from threading import Thread
def extractFile(zFile, password):
    try:
        zFile.extractall(pwd=password)
        print('Found password ' + password + '\n')
    except:
        pass

def main():
    zFile = zipfile.ZipFile('1.zip')
    passFile = open('dictionary.txt')
    for line in passFile.readlines():
        password = line.strip('\n')
        t = Thread(target=extractFile, args=(zFile, password))
        t.start()

if __name__ == '__main__':
    main()

任意性

用户可以指定要破解的Zip 文件的文件名和字典文件的文件名。 需要导入optparse库,是用于解析下面脚本的标志和可选参数的。在zipfile-cracker脚本中,我们将添加两个强制性flags一zip文件名和字库名

import zipfile
import optparse
from threading import Thread


def extractFile(zFile, password):
    try:
        zFile.extractall(pwd=password)
        print('Found password ' + password + '\n')
    except:
        pass


def main():
    parser = optparse.OptionParser("usage%prog" + "-f <zipfile> -d <dictionary>")
    parser.add_option('-f', dest='znarne', type='string', help='specify zip file')
    parser.add_option('-d', dest='dnarne', type='string', help='specify dictionary file')
    (options, args) = parser.parse_args()
    if (options.zname == None) | (options.dnarne == None):
        print(parser.usage)
        exit(0)
    else:
        zname = options.zname
        dname = options.dname
    zFile = zipfile.ZipFile(zname)
    passFile = open(dname)
    for line in passFile.readlines():
        password = line.strip('\n')
        t = Thread(target=extractFile, args=(zFile, password))
        t.start()


if __name__ == '__main__':
    main()

注:

1、OptionParser是python中用来处理命令行的模块,在我们使用python进行流程化开发中必要的工具

2、add_option

3、args)= parser.parse_args()属性给与args实例: 把parser中设置的所有"add_argument"给返回到args子类实例当中, 那么parser中增加的属性内容都会在args实例中,使用即可


测试方法:

Python  脚本.py   -f 文件.zip   -d 字典.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色地带(崛起)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值