压缩包破解加密

ZIP

对于一个 .zip 文件来说,它由3部分组成,而每部分都有对应的文件头标记

  • 压缩源文件数据区(简称数据区),文件头为 50 4B 03 04

  • 压缩源文件目录区(简称目录区),文件头为 50 4B 01 02

  • 压缩源文件目录结束标志(简称目录结束标志),文件头为 50 4B 05 06

其中,所有文件头都有 50 4B,其对应的ASCII码为 PK,纪念 .zip 的发明人Phil Katz先生

数据区

img

  • 红色方框的 50 4b 03 04 代表数据区的文件头标识

  • 14 00 表示pkware的最低版本、00 00 表示通用位标识、08 00 表示压缩方式、72 bd4d 50 分别表示最后的修改时间和修改日期

  • 03 c3 94 58CRC-32校验码

  • 两个绿色方块分别表示压缩后、压缩前的文件体积大小 0c 00 00 000a 00 00 00

  • 05 00 表示文件名长度、00 00 表示扩展区长度

    很显然,.zip 对它们的存储也是通过小端序

  • 蓝色方框表示文件名,它占用的字节数由前面的 05 00 决定,31 2e 74 78 74 对应的ASCII码就是 1.txt

目录区

img

  • 目录区文件头标识是 50 4B 01 02

  • 00 00 表示通用位标记,08 00 表示压缩方法,72 bd 4d 50 分别表示最后修改时间和日期,03 c3 94 58 表示源数据的CRC-32校验码,0c 00 00 000a 00 00 00 分别表示压缩后文件大小、压缩前文件大小,05 00 表示文件名长度,24 00 表示扩展区长度

目录结束标志

img

  • 目录结束标志文件头标识是 50 4B 05 06

ZIP伪加密

img

全局方式位标记的四个数字中只有第二个数字对其有影响,其它的不管为何值,都不影响它的加密属性!

第二个数字为奇数时 –>加密

第二个数字为偶数时 –>未加密

方法

  • winhex修改全局方式位标记中的09改为00

  • ZipCenOp工具

放在同一文件夹下,运行进行解密

java -jar ZipCenOp.jar r xxx.zip

同理运行进行伪加密

java -jar ZipCenOp.jar e xxx.zip

CRC碰撞

在CTF,可能给你一个加密了的 .zip 文件,并且密码很长,不太可能通过暴力破解得到密码;但是里面只包含一个小小的 .txt 文件,记录着长度不到30的flag

我们留意到CRC-32校验码只对源数据进行运算,如果我们无法爆破 .zip 的密码,那么不妨直接爆破里面的flag.

img

提示我们flag为6位数,并且根据原始大小 6 猜测文件 flag6位数 中只包含为flag的那6位数;又知道了这6位数的CRC-32校验码,写脚本对这6位数进行爆破:

# Python 2
import zlib
for i in range(100000, 1000000):
    if hex(zlib.crc32(str(i)) & 0xffffffff)[2:-1] == "9c4d9a5d":
        print i

最后得到的输出结果 954288 就是flag了

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇