压缩包
zip
文件头 50 4B 03 04(PK )
RAR
文件头 52 61 72 21 1A 07 01 00(Rar! )
文件尾&注释
明文攻击
条件:
明文文件需要被相同的压缩算法标准压缩(也可理解为被相同压缩工具压缩)
明文对应文件的加密算法需要是 ZipCrypto
该攻击需要至少 12 个字节的已知明文。 其中至少 8 个必须是连续的。 连续的已知明文越大,攻击速度越快。
注意利用文件中固定不变的字节
bkcrack
-L 查询加密方式
Store为未压缩,Deflate为压缩过
zipcrypto和AES是加密算法,store和deflate是压缩算法
例题:ZIP已知明文攻击深入利用_明文攻击密码软件-CSDN博客
ZIP深入明文攻击 已更新(2021湖湘杯某取证题&美团鱿鱼游戏)_zipcrypto deflate-CSDN博客
ZipCrypto Store
bkcrack
-C 指定攻击压缩包
-c 指定攻击的文件(压缩包里的文件,密文部分)
-p 指定明文文本(明文部分)
-o -p参数指定的明文 在压缩包内目标文件的偏移量(-p + -o)
-x 指定偏移量+对应的十六进制
tips
-o 搭配文件文本偏移量
-x 搭配十六进制偏移量
这里的偏移量都是在要攻击的压缩包里的偏移量
1、
.\bkcrack.exe -C 攻击压缩包 -c 攻击文件 -x 偏移量 十六进制
.\bkcrack.exe -C "D:\比赛ing\羊城杯2023附件\Easy_VMDK.zip" -c flag.vmdk -x 0 4B444D5601000000030000
.\bkcrack.exe -C 攻击压缩包 -c 攻击文件 -k key -d 保存路径
.\bkcrack.exe -C "D:\比赛ing\羊城杯2023附件\Easy_VMDK.zip" -c flag.vmdk -k e6a73d9f 21ccfdbc f3e0c61c -d "D:\比赛ing\羊城杯2023附件\flag.vmdk"
-k 上一步爆出来的key(主密钥)
文件保存
-d 指定保存路径
有了key可以直接爆破密码的,但这里密码是32位,算了,爆密码用法在deflate那部分
2、
注-o 0被我省略了
.\bkcrack.exe -C 攻击压缩包 -c 攻击文件 -p 明文文本 -o 偏移量
.\bkcrack.exe -C "D:\比赛ing\Easy_VMDK的附件\tempdir\MISC附件\Easy_VMDK.zip" -c flag.vmdk -p "D:\比赛ing\Easy_VMDK的附件\tempdir\MISC附件\1.txt"
1.txt
然后是和上面一样的提取
.\bkcrack.exe -C "D:\比赛ing\Easy_VMDK的附件\tempdir\MISC附件\Easy_VMDK.zip" -c flag.vmdk -p "D:\比赛ing\Easy_VMDK的附件\tempdir\MISC附件\1.txt" -k e6a73d9f 21ccfdbc f3e0c61c -d flag.vmdk
ZipCrypto Deflate
先给hint.jpg用ZipCrypto Deflate算法压缩
两个crc循环冗余校验码相同,基本可以认为两个hint.jpg是一样的
bkcrack
bkcrack -C encrypted.zip -c cipher -P plain.zip -p plain
.\bkcrack.exe -C "D:\比赛ing\古剑山misc\幸运饼干\flag.zip" -c hint.jpg -P "D:\比赛ing\古剑山misc\幸运饼干\hint.zip" -p hint.jpg
破密码
-r 指定密码,-r 10
,指定十位数,-r 1..14
指定1-14位数
.\bkcrack.exe -k key -r 位数 ?p
.\bkcrack.exe -k afb9fee3 f8795353 f6de1d4e -r 1..14 ?p
sv@1v3z就是密码
文件恢复
.\bkcrack.exe -C "D:\比赛ing\古剑山misc\幸运饼干\flag.zip" -c admin.txt -k afb9fee3 f8795353 f6de1d4e -d admin.txt
对于deflate压缩过的数据,提取后需要用inflate.py脚本解压缩
注:windows的powershell <> 有特殊含义,先输入cmd换成使用cmd
python3 .\tools\inflate.py 文件1 文件2
python3 .\tools\inflate.py <admin.txt> admin1.txt
文件1为提取出来的deflate压缩文件,文件2为保存解压缩deflate的文件
AAPR(Advanced Archive Password Recovery)
选择明文攻击-->选择flag.zip和hint.zip压缩包
总结
.\bkcrack.exe -C 攻击压缩包 -c 压缩包内文件 -x 0 4B444D5601000000030000
.\bkcrack.exe -C "D:\比赛ing\羊城杯2023附件\Easy_VMDK.zip" -c flag.vmdk -x 0 4B444D5601000000030000
.\bkcrack.exe -C 攻击压缩包 -c 攻击文件 -p 明文文本 -o 偏移量
.\bkcrack.exe -C "D:\比赛ing\Easy_VMDK的附件\tempdir\MISC附件\Easy_VMDK.zip" -c flag.vmdk -p "D:\比赛ing\Easy_VMDK的附件\tempdir\MISC附件\1.txt"
.\bkcrack.exe -C 攻击压缩包 -c 攻击文件 -p 明文文本 -o 偏移量 -x 十六进制
bkcrack -C 1.zip -c flagornot.zip -p plain.txt -o 30 -x 0 504B0304
.\bkcrack.exe -C 攻击压缩包 -c 想提取的文件 -k key -d 保存路径
.\bkcrack.exe -C "D:\比赛ing\古剑山misc\幸运饼干\flag.zip" -c admin.txt -k afb9fee3 f8795353 f6de1d4e -d admin.txt
python3 .\tools\inflate.py 文件1 文件2 //解压缩
python3 .\tools\inflate.py <admin.txt> admin1.txt
.\bkcrack.exe -k key -r 1..14 ?p //破密码
.\bkcrack.exe -k afb9fee3 f8795353 f6de1d4e -r 1..14 ?p
常用文件头字节
如果知道加密压缩包里的压缩包的压缩包文件名(套娃),可用压缩包文件名作为爆破条件在压缩包里的名字是放在压缩包的第三十个字节
.\bkcrack.exe -C "D:\比赛ing\take_the_zip_easy的附件\zipeasy.zip" -c dasflow.pcapng -p "C:\Users\86139\Desktop\1.txt" -o 30 -x 0 504B0304
LICENSE.txt
GNU GENERAL PUBLIC LICENSE
robots.txt
User-agent: *
html
<!DOCTYPE html>
xml
<?xml version="1.0" encoding="UTF-8"?>
伪加密
具体看这篇文章CTF-伪加密_ctf 伪加密-CSDN博客
压缩源文件数据区
50 4B 03 04:文件头
14 00:解压文件所需 pkware 版本
01 00:全局方式位标记(判断有无加密)
压缩源文件目录区
50 4B 01 02:目录中文件文件头标记
1F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
01 00:全局方式位标记(判断有无加密,00 00改为01 00打开就会提示有密码了)
压缩源文件目录结束标志
50 4B 05 06:目录结束标记
判断
当文件头那的标志位为奇数时为真加密(假设源文件目录区正常)
为偶数时,当源文件目录区标志位为奇数时为伪加密,否则未加密
掩码攻击
crc32碰撞
每个文件都有唯一的CRC32值,即便数据中一个bit发生变化,也会导致CRC32值不同。若是知道一段数据的长度和CRC32值,便可穷举数据,与其CRC32对照,以此达到暴力猜解的目的。
当加密压缩包大小很小时尝试(几个字节)
第一次写jio本
# crc碰撞
from binascii import crc32
# 有多少位(字节)循环多少次
for b in range(128): # 范围根据题目需要改
for k in range(128):
for q in range(128):
for i in range(128):
string = chr(b) + chr(k) + chr(q) + chr(i)
if crc32(string.encode()) == 十六进制: # 0xDE65C01B
print(string)
遍历文件夹中的很多zip:
#coding:utf-8
import zipfile
import string
import binascii
def CrackCrc(crc):
for i in dic :
for j in dic:
for p in dic:
for q in dic:
s=i+j+p+q
if crc == (binascii.crc32(s) & 0xffffffff):
print(s)
def CrackZip():
for I in range(54):
# 压缩文件遍历
file = 'chunk' + str(I) + '.zip'
f = zipfile.ZipFile(file, 'r')
GetCrc = f.getinfo('data.txt')
crc = GetCrc.CRC
#以上3行为获取压缩包CRC32值的步骤
CrackCrc(crc)
dic = string.ascii_letters + string.digits + '+/='
CrackZip()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)