使用python暴力破解zip压缩包的密码

这篇具有很好参考价值的文章主要介绍了使用python暴力破解zip压缩包的密码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如果你有压缩包的密码忘记了,并且压缩包的加密算法采用的是ZipCrypto,并且压缩参数如下图所示:
zipcrypto,python代码块,python,开发语言
那么你就可以使用本文中的方法进行破解。

压缩包的加密,是根据输入的密码进行运算加密,输入不同的密码,加密后的结果就是不同的二进制流。所以在进行解密的时候,不同的密码会解密出不同的结果,但是只有一种结果是你想要的正确的结果。

假设组成密码的字符总共有 a 个,密码是1 ~ n位,那么可以组合出 S 种不同的密码,一个字符占一个字节,所有密码的所有字符加在一起总共有 Q 个字节。下面分别给出 S 和 Q 的计算公式:
S = a 1 + a 2 + a 3 + a 4 + . . . . . . + a n (1) S = a^1+a^2+a^3+a^4+... ...+a^n\tag{1} S=a1+a2+a3+a4+......+an(1)
a S = a 2 + a 3 + a 4 + . . . . . . + a n + a n + 1 (2) aS=a^2+a^3+a^4+... ...+a^n+a^{n+1}\tag{2} aS=a2+a3+a4+......+an+an+1(2)
(1)式减去(2)式得:
( 1 − a ) S = a 1 − a n + 1 (1-a)S=a^1-a^{n+1} (1a)S=a1an+1
最后可以化简得到:
S = a ( 1 − a n ) 1 − a . S=\dfrac{a(1-a^n)}{1-a}. S=1aa(1an).

Q = 1 ⋅ a 1 + 2 ⋅ a 2 + 3 ⋅ a 3 + . . . . . . + n ⋅ a n (3) Q=1·a^1+2·a^2+3·a^3+... ... + n·a^n\tag{3} Q=1a1+2a2+3a3+......+nan(3)
a Q = 1 ⋅ a 2 + 2 ⋅ a 3 + 3 ⋅ a 4 + . . . . . . + ( n − 1 ) ⋅ a n + n ⋅ a n + 1 (4) aQ=1·a^2+2·a^3+3·a^4+... ...+(n-1)·a^n+n·a^{n+1}\tag{4} aQ=1a2+2a3+3a4+......+(n1)an+nan+1(4)
(3)式减去(4)式得:
( 1 − a ) Q = a 1 + a 2 + a 3 + a 4 + . . . . . . + a n − n ⋅ a n + 1 (1-a)Q=a^1+a^2+a^3+a^4+... ...+a^n-n·a^{n+1} (1a)Q=a1+a2+a3+a4+......+annan+1
化简得:
Q = a ( 1 − a n ) ( 1 − a ) 2 + n ⋅ a n + 1 a − 1 . Q=\dfrac{a(1-a^n)}{(1-a)^2}+\dfrac{n·a^{n+1}}{a-1}. Q=(1a)2a(1an)+a1nan+1.

一开始,我的思路是先写一个程序,这个程序把所有的密码组合出来,写入一个文件,然后再写一个程序,这个程序负责把写入的密码读取出来,再逐个暴力破解。但是后来发现这种思路存在几个问题,如果密码的组合可能性太多的时候,那么存取所有密码的这个文件将会达到几十个G(甚至更大)。压缩包的密码位数可以是1 ~ 127位的(超过127位的密码也有)。以最大位数127位为例,假如不知道密码是多少位,那么可以组合出:
9 4 1 + 9 4 2 + 9 4 3 + . . . . . . + 9 4 126 + 9 4 127 94^1+94^2+94^3+... ... + 94^{126}+94^{127} 941+942+943+......+94126+94127
种不同的密码组合。使用上面的式子计算一下,就可以知道总共有:39073499766929905093170936199210360403225359398866973176589007276420630179610064715271048101086598784117989282816367722389837036292113256007435625512903036280893835514194448335273218252856958007222866912360893842268293858285256762926406241457713184768 种不同的密码。

如果将所有的密码组合写入文件,不算回车换行符号,那么这个文件将会占 4961914325241313777553199490046598363526519239925145287832966868945419472665422521762910503472996114196429684959005740369797942759811562831081763117671397554605682022967601468185686939482979425062618339967434564286481867349313821628002924237784812093440 个字节。

并且,如果正确密码是最后一个,那么将要循环到最后一个密码才能破解成功,这样将会很耗费时间。所以,我采用了随机密码暴力破解。

下面是代码:

import zipfile

import os

import numpy as np



pwdCharset = ['`', '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '[', ']', '{', '}', ';', ':', "'", '"', '\\', '|', ',', '<', '.', '>', '/', '?', 'a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'm', 'M', 'n', 'N', 'o', 'O', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
# 94\

CharsetInput = []


def gPwd(chST, lgth, rgth):
    while True:
        pl = int(np.random.random() * 100)
        if pl >= lgth and pl <= rgth:
            break

    pwd = ""

    chStLen = len(chST)

    for i in range(0, pl):
        while True:
            idx = int(np.random.random() * 100)
            if idx >= 0 and idx < chStLen:
                break
        pwd += chST[idx]

    return pwd


def dcryp(fileName, lLen, rLen, chST):
    fp = zipfile.ZipFile(fileName)

    count = 0

    while True:
        pwd = gPwd(chST, lLen, rLen)
        count += 1
        try:
            for file in fp.namelist():
                fp.extract(file, pwd=pwd.encode())
                os.rename(file, file.encode('cp437').decode('gbk'))
            print("%d Success! The password is %s" % (count, pwd))
            break
        except:
            print("%d %s no" % (count, pwd))


if __name__ == "__main__":
    fileName = input("请输入要破解的压缩包文件名:")
    choose = input("按1选择暴力破解。\n按2选择指定条件破解\n")

    if "1" == choose:
        leftLen = int(input("确定密码的长度范围:\n请输入密码的最小长度:"))
        rightLen = int(input("请输入密码的最大长度:"))
        dcryp(fileName, leftLen, rightLen, pwdCharset)
    elif "2" == choose:
        charSt = input("请输入密码中可能包含的字符:\n")
        for i in charSt:
            CharsetInput.append(i)
        leftLen = int(input("确定密码的长度范围:\n请输入密码的最小长度:"))
        rightLen = int(input("请输入密码的最大长度:"))
        dcryp(fileName, leftLen, rightLen, CharsetInput)
    else:
        print("无效输入!")

下面是测试:
zipcrypto,python代码块,python,开发语言

zipcrypto,python代码块,python,开发语言
zipcrypto,python代码块,python,开发语言
这里选用的是4位的定长密码,尝试了10515次,用了不到10秒钟的到结果。

zipcrypto,python代码块,python,开发语言
zipcrypto,python代码块,python,开发语言
4位定长密码,如果不指定字符集,用所有可能的字符集暴力随机破解,总共有78074896种不同的密码组合,一共尝试了13478113次,将会用大概20多分钟的时间。

密码越长,且可能的字符越多,则破解的时间越长。

针对长而复杂的密码,如果加密的内容很重要,一定要破解出来的话,可以采用分布式破解,即一台主机通过网络将破解内容分发给一个计算机集群,集群中的每一台主机同时运行多个破解进程,并定期向控制主机发送心跳信号,反馈破解信息,这样可以大大缩短破解时间。文章来源地址https://www.toymoban.com/news/detail-810390.html

到了这里,关于使用python暴力破解zip压缩包的密码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python暴力破解附近局域网WiFi密码

    本文将记录学习下如何通过 Python 脚本实现 WIFI 密码的暴力破解,从而实现免费蹭网。 先来看看没有图形界面版的爆破脚本。 代码运行效果: 以上脚本需内嵌 WIFI 名、爆破字典路径,缺少灵活性。下面进行改造优化:​​​​​​​   脚本运行效果如下: 上述代码实现了依

    2024年02月11日
    浏览(47)
  • 使用Kali Linux 暴力破解wifi密码详细步骤

    使用Kali Linux 暴力破解wifi密码详细步骤所谓暴力破解就是穷举法,将密码字典中每一个密码依次去与握手包中的密码进行匹配,直到匹配成功。所以能否成功破解wifi密码取决于密码字典本身是否包含了这个密码。破解的时间取决于CPU的运算速度以及密码本身的复杂程度。如果

    2024年02月12日
    浏览(49)
  • 使用开源的zip.cpp和unzip.cpp实现压缩包的创建与解压

    目录 1、使用场景 2、压缩包的创建 3、压缩包的解压 4、CloseZipZ和CloseZipU两接口的区别 

    2024年02月07日
    浏览(52)
  • 破解zip加密压缩文件

    由于之前把一些过去的学习资料压缩加密了,过了很久之后忘记了当时设置的加密密码,于是在网上查了一些关于破解密码的文章,了解了强大的hashcat以及John the Ripper。 Hashcat是一个流行的开源密码恢复工具,可以用于破解各种类型的哈希值,包括MD5、SHA1、SHA2等。它支持多

    2024年02月04日
    浏览(46)
  • 使用 Burp Suite 暴力破解密码 撞库攻击 从0到1手摸手教学

    一个学习的过程 增加自己网络安全知识 切勿用于违法用途 设置密码尽量使用6位以上并规避简单数字组合、加强对同一ip的频繁访问次数限制、设置人机验证减小撞库攻击的危害 本地环境 kali 2022 Burp Suite FireFox 靶机环境 一台服务器 CentOS 7 宝塔面板 一个域名(你不会没有吧)

    2024年02月09日
    浏览(40)
  • 你安全吗?丨详解,如何暴力破解压缩包

    作者:黑蛋   你安全吗?在电视剧《你安全吗》第四集中,碰到这么一个画面: 这个画面一闪而过,可以看到,在这个画面中可以看到一堆有锁的文件,还有“已耗时1003天,预计剩余8928天”,“FILE TRANSFER DECRYPTION(文件传输解密)”等字眼,我个人感觉这是一个伏笔,一条

    2024年02月15日
    浏览(40)
  • C++ minizip的简单使用,zip文件的创建、读取、修改、密码压缩、4G以上大文件压缩。

            兄弟姐妹们好,深夜党又来记录枯燥的编程生活了。今天给大家带来的是minizip库,一个解压和压缩文件的开源代码库,如题目所示的结构来介绍。你可以在下面的链接搜索到minizip库: http://www.winimage.com/zLibDll/minizip.html        github地址: zlib/contrib/minizip at master ·

    2024年02月04日
    浏览(31)
  • 利用暴力攻击破解登陆密码

    长久以来,入侵远程计算机系统的工具和技术并没有发生翻天覆地的变化。例如,在许多情况下,普通用户只要知道了相关密码,就能立刻变身为管理员。虽然这些情形听起来不够曲折,但在大多数情况下,暴力攻击是通过利用密码管理缺陷来入侵系统的最简单实用的方法。

    2024年02月05日
    浏览(38)
  • 密码暴力破解、渗透测试流程

    信息收集 1、扫描的价值 对攻击者来说:根据扫描结果,来决定进一步的攻击行动; 能够更有针对性地选择攻击方法、攻击工具,节省攻击时间 对防护者来说:根据扫描结果,判断应采取什么样的安全策略; 封堵漏洞、加固系统、完善访问控制 2、nmap Network Mapper,一款开源

    2024年02月08日
    浏览(49)
  • 暴力破解WiFi密码

    所需要的设备及软件 : 一个可支持监听功能的无线网卡 VMware Workstation 15 Pro(这里版本是15.1,之前用15.5在插入网卡时没有反应) kali系统 步骤: 将无线网卡插入USB口,将其连接到虚拟机里 连接后多等一会,等到可以查看到附近wifi 如果搜索不到附近WiFi断开连接后在重新连

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包