python 暴力破解zip文件

python 破解zip文件

参考于:《python绝技:运用python成为顶级黑客》

运用python破解zip文件主要是zipfile模块和extractall方法
zipfile模块可以实现对zip文件的创建,解压,和获取解压后文件信息

首先我们新建一个名为evil密码为secret的zip文件

import zipfile
zFile=zipfile.ZipFile('evil.zip')     #将zip文件实例化为该模块可操作的对象
###当然zFile=zipfile.ZipFile('   ')中也可填入文件地址,例如r"C:\Users\Desktop\evil.zip" (字符串前加'r'是为了防止字符转义)

调用extractall方法:

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

我们会得到这样一个报错:

Traceback (most recent call last):
  File "G:/PycharmProjects/untitled1/zipfile0.py", line 3, in <module>
    zFile.extractall(pwd="secret")
  File "D:\Anaconda3\lib\zipfile.py", line 1501, in extractall
    self._extract_member(zipinfo, path, pwd)
  File "D:\Anaconda3\lib\zipfile.py", line 1554, in _extract_member
    with self.open(member, pwd=pwd) as source, \
  File "D:\Anaconda3\lib\zipfile.py", line 1336, in open
    raise TypeError("pwd: expected bytes, got %s" % type(pwd).__name__)
TypeError: pwd: expected bytes, got str

TypeError: pwd: expected bytes, got str 提示我们pwd格式应该为bytes

使用 .encode(‘asiic’)将其转换为bytes

在报错中,我们也可以看到对extractall方法的部分说明:
extractall(path,members,pwd)
它可以接收三个参数:
path是解压的路径(默认为解压文件所在路径),members是需要解压出来的文件(默认为全部文件),pwd是密码

修改后:

import zipfile
zFile=zipfile.ZipFile('evil.zip') 
zFile.extractall(pwd='secret'.encode('ascii'))

运行解压成功
在该目录下多了一个名为evil的文件

代码改进

为了破解zip文件,需要新建一个字典,这里字典名为dictionary.txt(当然也可以自己去下载相关的字典)

dictionary.txt内容:

apple
orange
egg
lemon
grapes
secret
strawberry
password

改进后代码:

import zipfile
zFile=zipfile.ZipFile('evil.zip')
passwordfile=open('dictionary.txt')
for line in passwordfile.readlines():   #逐行读取
    password=line.strip('\n')  #去除换行符
    try:
        zFile.extractall(pwd=password.encode('ascii'))
        print('the password is: '+ password)
        break  #读取到正确密码就退出循环
    except Exception as e:   #打印报错
       print(e)

运行结果:

Bad password for file <ZipInfo filename='evil/note_to_adam.txt' compress_type=deflate filemode='-rw-r--r--' file_size=171 compress_size=156>
Bad password for file <ZipInfo filename='evil/note_to_adam.txt' compress_type=deflate filemode='-rw-r--r--' file_size=171 compress_size=156>
Bad password for file <ZipInfo filename='evil/note_to_adam.txt' compress_type=deflate filemode='-rw-r--r--' file_size=171 compress_size=156>
Bad password for file <ZipInfo filename='evil/note_to_adam.txt' compress_type=deflate filemode='-rw-r--r--' file_size=171 compress_size=156>
Bad password for file <ZipInfo filename='evil/note_to_adam.txt' compress_type=deflate filemode='-rw-r--r--' file_size=171 compress_size=156>
the password is: secret      #读取到正确密码时退出循环
首先你需要了解一下zip文件的结构,一个zip文件包含多个文件和目录,其中每个文件或目录都有一个相对路径,路径信息存储在zip文件的中央目录中。中央目录位于zip文件的末尾,记录了每个文件的信息,包括文件名、文件大小、压缩前大小、压缩方式、压缩时间等。 如果你知道了zip文件的密码,可以直接使用Python自带的zipfile库进行解压,示例代码如下: ```python import zipfile zip_file = zipfile.ZipFile('example.zip') # 解压所有文件到指定目录 zip_file.extractall(path='extract_dir', pwd=b'password') ``` 其中,'example.zip'是待解压的zip文件,'extract_dir'是解压后文件的存放目录,b'password'是zip文件的密码。 如果你不知道zip文件的密码,可以使用Python中的字典攻击工具来破解密码。字典攻击工具通常需要准备一个密码字典文件,然后逐一尝试字典中的每个密码,直到找到正确的密码为止。 下面是使用Python中的fcrackzip库进行字典攻击的示例代码: ```python import fcrackzip # 设置字典文件路径 wordlist_path = 'passwords.txt' # 设置zip文件路径 zip_file_path = 'example.zip' # 创建fcrackzip对象 cracker = fcrackzip.FCrackZip() # 设置字典文件路径和zip文件路径 cracker.set_dictionary(wordlist_path) cracker.set_zipfile(zip_file_path) # 开始破解 result = cracker.crack() # 输出破解结果 print(result) ``` 其中,'passwords.txt'是密码字典文件的路径,'example.zip'是待破解zip文件的路径。fcrackzip库使用的是暴力破解和字典破解两种方式,因此可能会耗费很长时间才能破解成功。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值