• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

最详细Python批量字典暴力破解zip密码

python 搞java代码 3年前 (2022-05-21) 42次浏览 已收录 0个评论

工具破解

前两天在网上下来了一波项目案例,结果全是加密的压缩包,于是去网上找了一个压缩包破解的工具
苦于工具破解太慢,一个压缩包要好久,解压了三个之后就放弃了,准备另寻他法

密码字典

巧的是破解的三个都是4位数字密码,这让我想到了依靠字典破解
说干就干,伸手就来

<code class="language-python">#生成从0000到9999的密码表
f = open("passdict4.txt","w")
for id in range(10000):
  password = str(id).zfill(4)+"
"
  f.write(password)
f.close()
</code>

www#gaodaima.com来源gao!daima.com搞$代!码网搞代码

果然猜想没错,破解速度的确快了不
习大大说,科技是第一生产力,创新是引领发展的第一动力
既然有更快速的方法,那为什么不研究个自动的方法出来呢

ZipFile库

Python有个叫ZipFile的库可以解压zip文件,从其相关文档中

ZipFile.extractall(path=None, members=None, pwd=None)
将zip文档内的指定文件解压到当前目录。
参数path指定了解析文件保存的文件夹
参数members指定要解压的文件名称或对应的ZipInfo对象
参数pwd为解压密码。

只需循环读取文件夹下的zip文件然后逐个解压即可
注意:python3有一个中文文件名乱码的,将ZipFile.py中的“cp437”改成“gbk”(两个地方需更改)即可永久解决

<code class="language-python"># zipfile打开zip文件
z = zipfile.ZipFile(f"{file_path}", "r"
# path为解压路径,解包后位于该路径下
z.extractall(path=f"{root})
z.close()
</code>

在这个基础上再加上循环密码字典
注意:由于解压是密码错误会产生异常,这里可以利用try except进行处理

<code class="language-python"># 获取字典中的内容
passFile = open(r"D:pythonpassdict4.txt")
  # 循环获得单个密码
 for line in passFile.readlines():
    # 去换行
    password = line.strip("
")
      try:
         zip_file.extractall(path=f"{root}", pwd=password.encode("utf-8"))
		 print(password)
		 # 密码对了就不继续下去了
		 break
	except:
		 # 什么都不做
		 pass	 
 zip_file.close()  # 关闭文件,必须有,释放内存
</code>

这么一通操作下来本以为大功告成,没想到事情没那么简单
大多是时候是可以破解的,但是总有些就破解失败了,束手无策的各个网站找方法
刚开始以为是extractall方法调用错了,但是报的错是密码错误,这就让我很迷
偶然见在一个看到一篇文章才得知

默认情况下,WinRAR在CTR模式下使用AES-256加密ZIP文件,而传统加密是通过CRC32加密,即ZIP 2.0传统加密算法,虽然AES-256比ZIP 2.0传统加密算法安全得多,但它可能与一些旧的解压软兼容,而Python标准库中的zipfile模块只支持CRC32加密的zip文件,所以不采用传统加密方式是无法通过zipfile库进行解压的

已经花了这么多心思,要是到这里就放弃,那真的是太淦了
既然加密方式不一样,那么解压软件是怎么做到直接解压的呢
这里产生了一个构想,要是能从代码里调用解压软件,那不就好办了吗
于是我赶紧使用绝技

成功搜索到,7z等多款解压软件有相关功能

调用第三方软件命令行

配置环境变量

命令行验证一下

奈斯,配置成功

<code class="language-python">passFile = open(r"D:pythonpassdict4.txt")
   for line in passFile.readlines():
      password = line.strip("
")
      # t 测试
      command="7z -p"+password+" t "+file_path
      child=subprocess.call(command)
      if(child==0):
         print(password)
         break
</code>

加密方式不一样的事情是解决了,不过人的贪欲真的是可怕
重复调用命令行这一闪一闪的又让我不爽了

pyzipper库(终极)

恰巧在查加密方式的时候看到有人提出
Python有个pyzipper库可以很好的兼容代替zipfile,可以读写AES加密的zip文件
都走到这了,没有撤退可言

安装pyzipper

pip install pyzipper

会出现中文名乱码情况,记得改下

<code class="language-python">f1 = open("D:pythonpassdict4.txt","r")
with pyzipper.AESZipFile(file_path,"r") as f:
   for i in f1:
       i = i.rstrip("
")
       f.pwd = str.encode(i)
       try:
           f.extractall(path=f"{root}")
           print(file_path+"	密码是:"+i)
           break
       except Exception:
           pass
f.close()
f1.close()
</code>

这个方法,堪称完美
点击下载相关代码,文件,工具

参考:
1.【补丁破解】ZIP压缩包密码破解工具PassperforZIP_v3.6.0.1
2.python-批量解压zip文件
3.python破解同事的压缩包密码
4.Python实现加密的ZIP文件解压(密码已知)
5.暴力破解(一)——python脚本暴力破解 加密的zip压缩文件
6.7Z命令行详解
7.4.python编写ZIP压缩文件爆破工具
8.Python中的zipfile模块使用详解
9.Python3中zipfile模块文件名乱码问题


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:最详细Python批量字典暴力破解zip密码

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址