【Python实战之暴力破解】Python实现Zip文件的暴力破解

Python实现Zip文件的暴力破解

zip 文件是加密的,或者忘掉自己压缩后的密码(一想到就头疼)。这时候我们就会想办法,将里面的内容提取出来。我目前已知的破解 zip 的方式只有 “Known plaintext attack(已知明文攻击)” 和 “暴力破解”。由于 “Known plaintext attack” 也有比较大的局限性

一、引入第三方库

1、zipfile

zipfile 模块是 python 中自带的模块,提供了对 zip 文件的创建读、写、追加、解压以及列出 zip 文件列表的工具。这里我们主要用到 ZipFile 对象的 extractall 方法来解压 zip 文件。
ZipFile模块说明:

ZipFile 对象:
	 extractall(path=None, members=None, pwd=None) 

extractall(path=None, members=None, pwd=None) 方法主要有三个参数,我们来看一下每个参数的含义:

`path`    指定解压后文件的存储位置
`members`(可选)指定要 Zip 文件中要解压的文件,这个文件名称必须是通过 namelist() 方法返回列表的子集
`pwd`     指定 Zip 文件的解压密码
用 zipfile 模块解压一个带密码的 Zip 文件

现在我们创建 1.txt 文件:

touch 1.txt

现在我们创建 1.txt 文件:

zip -r 1.zip 1.txt -P 1314

解压文件脚本

import zipfile
try:
	#创建 ZipFile 对象
    with zipfile.ZipFile('1.zip') as zFile:     
        #解压文件
        zFile.extractall(path='./', pwd=b'1314')
        print('Extract the Zip file successfully!')
except:
    print('Extract the Zip file failed!')

运行解压脚本

python3 demo.py

2、argparse

使用 argparse 模块来解析命令行参数。
argparse官方文档
argparse 提供了非常友好的命令行解析接口,在命令行参数比较多的时候更为明显。
使用案例:

import argparse

parser = argparse.ArgumentParser(description='Regards to your name.')
parser.add_argument('-n', dest='m_name', type=str, help='your name')
options = parser.parse_args()
print('Hello',options.m_name)

首先我们导入了 argparse 这个模块。
通过 argparse.ArgumentParser方法来获得解析器对象。
description是在我们输出命令行参数帮助信息时起到描述的作用。 add_argument方法用来添加我们需要解析的参数,可以看到我们这里添加了 -n 参数,dest 相当于存储命令行参数值的变量,提取这个变量的时候我们要用到,比如上面 的 options.m_name。type 表示我们输入的类型,这里是 str。
help 是用来说明参数的,和 description 一样在我们输出命令行帮助信息时会显示出来。

二、暴力破解zip文件

将密码本里面的密码逐一尝试输入进行破解
暴力破解脚本pojie.py:

import zipfile
import argparse
import os
from os.path import *

def tryZipPwd(zipFile, password, savePath):
    try:
        zipFile.extractall(path=savePath, pwd=password.encode('utf-8'))
        print('[+] Zip File decompression success,password: %s' % (password))
        return True
    except:
        print('[-] Zip File decompression failed,password: %s' % (password))
        return False


def main():
    # 这里用描述创建了 ArgumentParser 对象
    parser = argparse.ArgumentParser(description='Brute Crack Zip')
    # 添加 - H 命令 dest 可以理解为咱们解析时获取 - H 参数后面值的变量名, help 是这个命令的帮助信息
    parser.add_argument('-f', dest='zFile', type=str, help='The zip file path.')
    parser.add_argument('-w', dest='pwdFile', type =str, help='Password dictionary file.')
    zFilePath = None
    pwdFilePath = None
    try:
        options = parser.parse_args()
        zFilePath = options.zFile
        pwdFilePath = options.pwdFile
    except:
        print(parser.parse_args(['-h']))
        exit(0)

    if zFilePath == None or pwdFilePath == None:
        print(parser.parse_args(['-h']))
        exit(0)

    with zipfile.ZipFile(zFilePath) as zFile:
        with open(pwdFilePath) as f:
            for pwd in f.readlines():
                p,f = split(zFilePath)
                dirName = f.split('.')[0]
                dirPath = join(p, dirName)
                try:
                    os.mkdir(dirPath)
                except:
                    pass
                ok = tryZipPwd(zFile, pwd.strip('\n'), dirPath)
                if ok:
                    break
if __name__ == '__main__':
    main()

最后我们创建一个用于测试的密码字典 pwd.txt:

1256
4345
2323
1234
4556
......

运行脚本:

 python3 pojie.py -f 1.zip -w pwd.txt 

Zip 文件暴力破解 的方法,这种方法的成功率比较依赖密码字典文件。虽然这只是一种初级的方法不过确实有的时候是非常有效的,通常情况下我们在遇到加密的 Zip 文件我们首先会尝试这种方法。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值