简简单单利用字典破解zip文件口令

前几天在一本书上看到一篇可以利用字典破解zip文件密码的文章,觉得比较有意思于是研究了一番,在这里分享一下

原理

主要是利用python里自带的zipfile库中的extractall函数来实现的,简单导入zipfile之后,实例化一个ZipFile类。利用extractall()来解压这个文件,并在参数pwd上填入正确密码
在这里插入图片描述
这时我们发现执行脚本之后,fate.zip会被正确解压,而填入错误密码则会入下图一样报错
在这里插入图片描述因此我们可以利用因口令不正确而抛出的异常来测试字典文件中是否有zip文件的密码,并利用try expect来处理异常信息。

代码

假定zip文件密码为fate,pwd.txt为字典文件

import zipfile 
zFile = zipfile.ZipFile(r"D:\python\fate.zip")
passFile = open(r"D:\python\pwd.txt")
for line in passFile.readlines():
    password = line.strip('\n')
    # noinspection PyBroadException
    try:
        zFile.extractall(pwd=password.encode("utf=8"))
        print("password="+password)
    except Exception as e:
        pass

需要注意的是python3以及不支持自动ascii码了,在extractall的pwd参数后需手动添加编码类型,# noinspection PyBroadException则是为了防止PyCharm报错

提高性能

将程序模块化后,在利用多线程处理可以提高程序性能,可以利用Thread来实现多线程处理

import zipfile
from threading import Thread


def extractfile(zFile,password):
    # noinspection PyBroadException
    try:
        zFile.extractall(pwd=password.encode("utf=8"))
        print("password="+password)
    except Exception as e:
        pass


def main():
    zFile = zipfile.ZipFile(r"D:\python\fate.zip")
    passFile = open(r"D:\python\pwd.txt")
    for line in passFile.readlines():
        password = line.strip('\n')
        t = Thread(target=extractfile(zFile , password))
        t.start()


if __name__ == "__main__":
    main()

利用if __name__ == "__main__"使函数只在当前模块运行,当被导入时不运行

结语

以上就是利用字典破解zip文件的全部内容,如有错误,望海涵,有问题欢迎在评论区讨论交流或者私信我。

  • 24
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值