赞
踩
zip压缩包开头为50 4B 03 04
,即常说的PK头。
zip文件由三部分组成:压缩的文件内容源数据、压缩的目录元数据、目录结束标识结构
爆破:逐个尝试选定集合中的可以组成的所有密码,直到遇到正确的密码。
分为暴力破解、掩码破解、字典破解这几种
1、暴力破解:选择密码范围,长度等,由软件组合生成密码进行破解
2、掩码破解:知道密码中的一部分,只需要按照规则构造其余部分进行破解
3、字典破解:通常是多数用户常用的一些密码集合,导入字典文件用字典中的密码进行破解(取决你的字典)
这里主要介绍两款爆破使用的工具
Windows下的神器 ARCHPR
暴力枚举,跑字典,明文攻击,应有尽有
Linux 下的命令行工具 fcrackzip
# -b 指定模式为暴破,-c1指定密码类型为纯数字,其它类型可以rtfm,-u这个参数非常重要不然不显示破解出来的密码,-l 5-6可以指定长度
root@kali:fcrackzip -b -c1 -u test.zip
明文攻击:
一个例子:
现有加密压缩包
以及一个包含测试1的伪加密的压缩包(CRC32相同,>12字节)
进行明文攻击
注意:当明文的大小比较小时,或者密文过长,攻击速度会比较慢;即使有时没有恢复密码,也可以使用明文攻击,最后点保存还是能得到压缩包里内容的。
伪加密zip
什么是CRC32
CRC32攻击
一个例子:
我们新建一个 flag.txt,其中内容为 123,使用密码 !QAZXSW@#EDCVFR$ 去加密
我们去计算文件的 CRC32 值发现和上图中的 CRC32 值吻合
在爆破时我们所枚举的所有可能字符串的 CRC32 值是要与压缩源文件数据区中的 CRC32 值所对应
# -*- coding: utf-8 -*-
import zlib
import base64
import string
import itertools
import struct
# 爆破所有可能的crc,存起来
alph = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/='
crcdict = {}
print("computing all possible CRCs...")
for x in itertools.product(list(alph), repeat=3):
st = ''.join(x)
testcrc = zlib.crc32(st.encode('utf8'))
crcdict[testcrc] = st
print("Done!")
print(crcdict)
# 判断crc是否在集合中
f = open('flag.zip','rb')
data = f.read()
f.close()
crc = "".join('%s' %id for id in data[14:18])
if crc in crcdict:
print(crcdict[crc])
else:
print("FAILED!")
推荐一个好用的6位的CRC32爆破工具
下载:https://github.com/theonlypwner/crc32
使用:python crc32.py reverse 你的crc32密文
(密文需要加上0x变成16进制)
以2022ZJ省赛misc3为例,可以crc32小附件得到密码(或者再大一点,可以明文攻击解包)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。