【Python实战之暴力破解】Python实现Zip文件的暴力破解 您所在的位置:网站首页 python破解解压密码代码 【Python实战之暴力破解】Python实现Zip文件的暴力破解

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

2024-07-10 17:03| 来源: 网络整理| 查看: 265

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 文件我们首先会尝试这种方法。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有