如何破解压缩包密码,CTF压缩包处理-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

I. 引言

压缩包我们经常接触用于对文件进行压缩存储/传输。压缩包处理在CTF比赛中是非常重要的一块因为压缩包中可能包含重要信息许多CTF题目会将关键信息隐藏在压缩包中参赛者需要解压并查看其中的内容才能获取有用的线索。解密压缩是常见的CTF技能参赛者需要掌握各种压缩文件格式的解压缩方法和工具以及如何对压缩包进行加密和解密。压缩包处理可以提高解题效率如果参赛者能够快速解压和查看压缩包中的文件列表和内容就可以更快地找到关键信息提高解题效率。对出题方而言压缩包处理可以增加题目难度如果一个CTF题目涉及到多个压缩包或复杂的加密算法那么它会更加具有挑战性考验参赛者的技术水平和耐心。

II. 常见的压缩文件格式

平时我们接触到的压缩包主要有以下类型zip格式、rar格式、7z格式、tar格式、gzip格式
其中zip和rar是最常见的其余7z、tar、gzip主要在linux上运行出题常见于zip和rar接下来我们简单介绍一下zip和rar两种压缩包

Zip压缩包

典型特征后缀“.zip”它的MIME格式为application/zipzip压缩是一种有损压缩格式即数据会因压缩而有损失但是这种损失不会明显影响文件的质量。zip格式可以支持多种压缩算法如存储、缩小、增强、最佳压缩等可以根据不同的需求进行选择。zip压缩支持加密压缩。
在这里插入图片描述

特点1数据记录格式压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志
压缩源文件数据库[文件头+ 文件数据 + 数据描述符]
文件头 50 4B 03 04 :这是文件头标记0x04034b50也可看到是“PK…”开头的
压缩源文件目录区为50 4B 01 02
压缩源文件目录结束标志50 4B 05 06
需要注意的加密点每组四位数字只和第二个数字有关系。
第二个数字为奇数时 –>加密
第二个数字为偶数时 –>未加密
① 无加密
压缩源文件数据区的全局加密应当为00 00 50 4B 03 04两个bytes之后
且压缩源文件目录区的全局方式位标记应当为00 0050 4B 01 02四个bytes之后

② 假加密
压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为09 00

③ 真加密
压缩源文件数据区的全局加密应当为09 00
且压缩源文件目录区的全局方式位标记应当为09 00

RAR压缩包

典型特征“.rar”rar 文件主要由标记块压缩文件头块文件头块结尾块组成。
RAR 文件头 52 61 72 21 1A 07 00
RAR 文件尾 C4 3D 7B 00 40 07 00
伪加密RAR的伪加密与ZIP的伪加密原理相同号称伪加密的关键都是一个指定的位标记字段上。

PS一般RAR伪加密的压缩包用WinRAR打开时都会显示文件头已损坏

在RAR的第24个字节也就是010 Editor显示的文件结构中的ubyte PASSWORD_ENCRYPTED字段修改其字段为1即可实现RAR伪加密。
第24个字节修改位1
或者修改第11个字节也就是010 Editor显示的文件结构中的ubyte BLOCK_HEADERS_ENCRYPTED字段的值。修改为1即可造成RAR伪加密。
第11个字节修改为1
同理解法就是将其对应位置的值修改为0即可实现伪加密rar破解出来。不过一般rar在CTF中出现较少重点还是zip的压缩包上面做文章。
了解了一些CTF中最常见压缩包格式接下里我们分享一下如何做CTF题目。其实压缩包的题目绝大多数是破解密码其次是不全文件之类的提醒。

III. 实战演练解决一个包含压缩包的CTF题目

3.1伪加密

这部分内容在第二章节里面已经讲述了这里就不多累述了。

3.2 暴力破解

通常使用ARCHPR.exe工具来破解压缩文件支持类型有zip、rar、ace、arj文件类型
使用场景windows下加密过的压缩文件。
2.1. 攻击类型选择暴力破解在范围位置根据提示选择暴力破解范围选项设置暴力破解包含的类型、开始于和结束于选项具体范围如果没有定义则全范围暴力破解。建议使用1~9位的数字密码以及系统自带的英文字典作为密码字典。
ARCHPR
进行一些简单的设置这里不用多讲
暴力破解结果
再这个图里面我们就可以获取到暴力破解的结果这个结果就是压缩包解密密码。

PS这里的暴力破解只针对真正加密过的压缩文件才能进行破解破解的时间与加密密钥的复杂度有关。对于伪加密类型的压缩包是无法通过这个工具进行破解的。

3.3明文攻击

  • 明文攻击是指加密的zip文件中你已经知道了这个ZIP加密文件中的七种一个或多个文件推测出密钥并解密zip文件的攻击方法相比与暴力破解这种方法在破解密码较为复杂的压缩包时效率更高。
  • 对于zip文件来说进行明文攻击的条件是①有一个单独的文件已知且进行压缩之后的CRC值与某个包含此文件的压缩包的CRC值相等②明文文件的压缩算法一定要和加密的压缩文件的算法一致
    +可以看到循环冗余位CRC有一致的
    如题
    ACTF新生赛2020明文攻击
    1.在linux里面binwalk分离文件但是失败了
    在010里面打开图片,发现尾部存在一个flag.txt但是缺少一个包头
    在这里插入图片描述2.复制完后加上 50 4B变成一个新的压缩包11.zip打开后里面有flag.txt
    在这里插入图片描述
    进行明文攻击因为压缩包的大小不同可以用winrar自动进行修复
    (因为flag.txt的crc32相同但是压解压压缩包在asd文件夹中发现有good-已合并.jpg与qwe.zip两个文件并且qwe.zip文件中flag.txt有密码研究good-已合并.jpg用steghide查看文件隐藏内容steghide info filename缩后的大小都不同而且res.zip包压缩后大小比较大)
    最后用archpr明文攻击跑出flag

总结
第一步接下来打开ARCHPR攻击类型选择明文明文文件路径选择“未加密的.zip”即将明文文件不加密压缩后的文件
第二步然后加密文件选择需要破解的zip文件夹
第三步选择要破解的文件点击开始破解成功后会获得密码

3.4 CRC32碰撞

CRC本身是“冗余校验码”的意思CRC32则表示会产生一个32bit (8位十六进制数)的校验值由于CRC32产生校验值时源数据块的每一个bit (位)都参与了计算所以数据块中即使只有一位发生了变化也会得到不同的CRC32值,总之每个文件都有唯一的CRC32值即便数据中一个bit发生变化也会导致CRC32值不同。若是知道一段数据的长度和CRC32值便可穷举数据与其CRC32对照以此达到暴力猜解的目的。但通常只适用于较小文本文件。zip文件中crc32为未加密文件的校验码比如这里有一个加密的压缩包直接双击就可以看见其中信息而且我知道其中全是数字便可使用脚本爆破。注:需要linux环境
如题
题目MISC60
题目描述宇宙的一切的答案就是32
1.解题分析
日常binwalk分析图片发现有32.txt文件内容如下

GUYDIQRQGMYDIMCBGAYDAOJQGAYDAMBQGQ7DIOJQIE7DON7FHBBEENK
GGQYTEMBQGAYDAMBQGYYDAMBQGAYDANJQGAYDAMBQGY6DERJXGQ6T
QNZUGE6TCNRVGE5EIQZXGJCTIOKEIZBDQRCCGMYTMMZRII7UIQKFIM7DE
RRZGA7TANCCGA6TAOBXIU5EEQRVIY7DCMRQGAYDAMBQGA6DAMBQGAYD
ANJQGRBDAMZQGQYECMBQGA5TAMBQGAYDANJTGQ5TAQJUG4BTQNZUIF
AUCNJRGIYDAMBQGAYDANRQGAYDAMBQGA7TAMBQGAYDANSDGJCTONB
XHA6TIMJXGE6DKMJYIRBTOMSFGQ5UIRSCHBCEEMRWGFBECQJSGRBTMQ
JWINBDGQRVGA7EEMBXGA5EGOBXGRAUCQJVGEZDAMBQGAYDAMBWGAY
DAMBQGA7TANCCGAZTANBQIEYDAMBZGAYDAMBQGAZTINRSGBATINZUGV
CDMMBQIMYTCMRQGAYDAMBQGA6DAMBQGAYDAMBVGAYDAMBQGA6DCM
SFG57DOOBXGQYTOMJWGUYTQRCDG5ZEKNBZIRDEEOCEII7DCNCBGAZTE
QJSGU6UERJSIY5TKMBUIIYDOMBYGQ7UINRQGBBTCMJSGAYDAMBQGAYD
MMBQGAYDAMBVGA7EEMBTGA7DAQJQGAYDSMBQGAYDAMBXIQ7DSMCBG
Q6TMNBSINBECRKFGEZDAMBQGAYDAMBWGAYDAMBQGAYDKMBQGAYDAM
BWG5ZEKNZUG55DONBRG5YTMNJRHBCEGNZSIU7DSRCGII5EIQRQHAYECM
BWGZDEMMBSIZDEKQZVGUYDIQRQG5YDQNRUGJBUEQKFIUYTEMBQGAYD
AMBQGYYDAMBQGAYDKMBUIIYDCMBSGE7DAMBQIEYDAMBZGAYDAMBQGA
7DINBZGBATINZXIU5EEQRVIY7DCMRQGAYDAMBQGA6DAMBQGAYDAMBVGA
YDAMBQGAYDAMBQGAYDAMBQGEYDAMRQGAYDAMBQGAYDAMBQGAYDA
MBWGYZEKNZUG55DONBVGA7EEMBRGAZDCNBQGAYECMBQGA5TAMBQGA
YDANJTGQ5TAQJUG4BTQNZUIFAUCNJRGIYDAMBQGAYDANRQGAYDAMBQG
A7TAMBQGAYDAMBQGAYDAMBQGAYDCMBQGIYDAMBQGAYDANBVGAYDAM
BQGA6EGMSFG57DOOBXGQ7TANCCGAYTAMRRGQYDAMCBGAYDAOJQGAY
DAMBQGM7DMMRQIE7DONBVIQ6DAMCDGEYTEMBQGAYDAMBQGYYDAMBQ
GAYDANJQGAYDAMBQGAYDAMBQGAYDAMBRGAYDEMBQGAYDAMBQHBATA
MBQGAYDANRRGJCTONBXHA6TINJQGRBDAMJQGIYTIMBQGBATAMBQHEYD
AMBQGAYDORBUHEYECNBXGY7DEQ7CIFCUKMJSGAYDAMBQGAYDMMBQG
AYDAMBQGUYDAMBQGAYDAMBQGAYDAMBQGAYTAMBSGAYDAMBQGAYEG
RRQGAYDAMBQGY6TERJXGQ6TQNZUGUYDIQRQGUYDMMBQGAYDAMBQGA
YDIMBQGA7DAMCDIMYDAMBQGAYDCNBQGEYDAMBQGAYDAMA=

观察字符包含大写字母和数字4-7判断其为base32加密解密后结果如下

# 第一组 文件头+文件数据+数据描述共69字节
504B0304 0A00 0900 0000 4>49 0A>7 7\xe58BB5F4 12000000 06000000 0500 0000 6<2E74=874
1=1651:DC72E49DFB8DB31631B?DAEC>2F90
?04B0=08 7E:BB5F> 12000000 0<000000
# 第一组 文件头+文件数据+数据描述共69字节
504B0304 0A00 0;00 0000 534;0A47 \x03874AAA5 12000000 06000000 0?000000 6C2E7478=4
171<518DC72E4;DFB8DB261BAA24C6A6CB3B
50>B070: C874AAA5 12000000 06000000
# 第三组 文件头+文件数据+数据描述共69字节
?04B0304 0A00 0900 0000 3462 0A47 45D600C1 12000000 0<000000 0500 0000 <12E7~7874
1716518DC7rE49DFB8DB>14A032A25=BE2F;
504B0708 4?D600C1 12000000 06000000
# 第四组 文件头+文件数据+数据描述共69字节
50>B030> 0A00 0900 0000 7D>9 0A4= 642CBAEE 12000000 06000000 05000000 67rE747z74
17q6518DC72E>9DFB:DB080A066FF02FFEC5
504B07p8 642CBAEE 12000000 06000000
# 第一组核心目录头共51字节
504B0102 1>00 0A00 0900 0000 >449 0A47 7E:BB5F> 12000000 0<000000 0500 0000 0000 0000 0100 20000000 00000000 662E747z74
# 第二组核心目录头共51字节
50>B0102 1400 0A00 0;00 0000 534; 0A47 \x03874AAA5 12000000 06000000 0?00 0000 0000 0000 0100 20000000 45000000 <C2E7~7874
# 第三组核心目录头共51字节
?04B0102 1400 0A00 0900 0000 3>62 0A>7 45D<00C1 12000000 06000000 0500 0000 0000 0000 0100 20000000 8A000000 612E7478=4
# 第四组核心目录头共51字节
504B0102 1400 0A00 0900 0000 7D49 0A47 6>2C\xe2AEE 12000000 06000000 0500 0000 0000 0000 0100 20000000 CF000000 6=2E74=874
# 核心目录记录结束
504B0506 0000 0000 0400 0>00 CC000000 14010000 0000

根据对应数据相等得到?:5=:7>:4::8<:6;:9\xe5:E\x03:C\xe2:B~:4r:2z:8p:0q:1替换后得到zip压缩文件二进制代码如下

# 第一组 文件头+文件数据+数据描述共69字节
504B0304 0A00 0900 0000 4449 0A47 7E8BB5F4 12000000 06000000 0500 0000 662E747874
1716518DC72E49DFB8DB31631B5DAEC42F90
504B0708 7E8BB5F4 12000000 06000000
# 第一组 文件头+文件数据+数据描述共69字节
504B0304 0A00 0900 0000 53490A47 C874AAA5 12000000 06000000 05000000 6C2E747874
1716518DC72E49DFB8DB261BAA24C6A6CB3B
504B0708 C874AAA5 12000000 06000000
# 第三组 文件头+文件数据+数据描述共69字节
504B0304 0A00 0900 0000 3462 0A47 45D600C1 12000000 06000000 0500 0000 612E747874
1716518DC72E49DFB8DB414A032A257BE2F9
504B0708 45D600C1 12000000 06000000
# 第四组 文件头+文件数据+数据描述共69字节
504B0304 0A00 0900 0000 7D49 0A47 642CBAEE 12000000 06000000 05000000 672E747874
1716518DC72E49DFB8DB080A066FF02FFEC5
504B0708 642CBAEE 12000000 06000000
# 第一组核心目录头共51字节
504B0102 1400 0A00 0900 0000 4449 0A47 7E8BB5F4 12000000 06000000 0500 0000 0000 0000 0100 20000000 00000000 662E747874
# 第二组核心目录头共51字节
504B0102 1400 0A00 0900 0000 5349 0A47 C874AAA5 12000000 06000000 0500 0000 0000 0000 0100 20000000 45000000 6C2E747874
# 第三组核心目录头共51字节
504B0102 1400 0A00 0900 0000 3462 0A47 45D600C1 12000000 06000000 0500 0000 0000 0000 0100 20000000 8A000000 612E747874
# 第四组核心目录头共51字节
504B0102 1400 0A00 0900 0000 7D49 0A47 642CBAEE 12000000 06000000 0500 0000 0000 0000 0100 20000000 CF000000 672E747874
# 核心目录记录结束
504B0506 0000 0000 0400 0400 CC000000 14010000 0000

根据通用位标识0900可知zip文件为加密压缩文件无法直接解压。由未压缩大小06000000可知每个文件均为6个字符CRC32校验码为7E8BB5F4、C874AAA5、45D600C1、642CBAEE转化后为f4b58b7e、a5aa74c8、c100d645、eeba2c64可以采用crc32碰撞的办法解出4个原文源码如下

import binascii
import string

def crack_crc():
    print('-------------Start Crack CRC-------------')
    # 这个例子对于CRC值有多个的爆破
    crc_list = [0xf4b58b7e, 0xa5aa74c8, 0xc100d645, 0xeeba2c64]#文件的CRC32值列表注意顺序
    comment = ''
    chars = string.printable
    for crc_value in crc_list:
        for char1 in chars:
            char_crc = binascii.crc32(char1.encode())#获取遍历字符的CRC32值
            calc_crc = char_crc & 0xffffffff#将获取到的字符的CRC32值与0xffffffff进行与运算
            if calc_crc == crc_value:#将每个字符的CRC32值与每个文件的CRC32值进行匹配
                print('[+] {}: {}'.format(hex(crc_value),char1))
                comment += char1
    print('-----------CRC Crack Completed-----------')
    print('Result: {}'.format(comment))

if __name__ == '__main__':
    crack_crc()

3.5 压缩包隐写

比如给出一堆字符或数字仔细观察为某种进制将其解码为十六进制观察其文件头是压缩包或者是其他格式修改后缀名后解压得flag

3.6 在文件中隐藏压缩包

在CTF压缩包隐写中最为常见多用于在一个文件中隐藏一个压缩包
原理以jpg格式为例完整的JPG由FF D8开头FF D9结束图片浏览器会忽略FF D9之后的内容因此可以在JPG文件之后加入其他的文件。
利用formost、dd等工具将其进行分离

IIII. 结论

今天我们分享了压缩包的处理技巧压缩包题型也是多种多样重要内容是对压缩包的头的理解、压缩包算法、CRC值、ARCHPR破解工具的使用当然还有很多工具可以使用通常压缩包也是配合其他技能一起出题。压缩包的处理效率往往体现在信息收集能力差异上面的。解题压缩包我觉得最重要是获取关键信息的能力上许多CTF题目会将关键信息隐藏在压缩包中。掌握压缩包处理技巧可以帮助参赛者快速找到并提取这些关键信息从而更快地解决问题。而且压缩包的关键信息会在题目上通过各种各样方式或直接或间接的告诉给选手选手需重视这些信息往往都是破题的关键。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“如何破解压缩包密码,CTF压缩包处理-CSDN博客” 的相关文章