Python实现Zip文件的暴力破解

Python实现Zip文件的暴力破解

实验内容

我们在网上好不容易下载到一个想要的 zip 资源却发现这个 zip 文件是加密的,或者忘掉自己压缩后的密码(一想到就头疼)。这时候我们就会想办法,将里面的内容提取出来。我目前已知的破解 zip 的方式只有 “Known plaintext attack(已知明文攻击)” 和 “暴力破解”。由于 “Known plaintext attack” 也有比较大的局限性,而且本次实验的定位是入门级的。所以本次实验将带领大家用 Python 的 zipfile 模块实现 Zip 文件的暴力破解。

实验知识点

  • zipfile 的使用方法
  • argparse 的使用方法

实验环境

  • Ubuntu Linux
  • Python 3.x版本

实验步骤

  • 创建加密压缩包
cd Code
mkdir deZip
cd deZip
touch 1.txt
zip -r 1.zip 1.txt -P 1314
  • 编写解压程序
import zipfile
try:
    with zipfile.ZipFile('1.zip') as zFile:     #创建 ZipFile 对象
        #解压文件
        zFile.extractall(path='./', pwd=b'1314')
        print('Extract the Zip file successfully!')
except:
    print('Extract the Zip file failed!')

12-1

  • 建立一个密码字典
vim pwd.txt
123456
qwe123456
321321
123654789
456852
0000000000
WOAIWOJIA
741852963
5845201314
aini1314
0123456789
a321654
123456123
584520
778899
520520520
7777777
q123456789
123789
zzzzzz
1314
  • 破解程序(依照密码本)
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()
  • 运行破解程序
python3 decodeZip.py -f 1.zip -w pwd.txt

12-2
解压成功

posted @ 2025-01-02 11:24  Arisf  阅读(12)  评论(0编辑  收藏  举报