ID:七堇年,CTF萌新。
压缩包分析例题
压缩包分析在CTF-MISC中也是常见的题型,压缩包是一个电脑应用软件,可以减小文件中的比特和字节总数,达到节省磁盘空间等作用。其基本原理是查找文件内的重复字节,并建立一个相同字节的“词典”文件,并用一个代码表示,比如在文件里有几处有一个相同的词“七堇年”,用一个代码表示并写入“词典”文件,这样就可以达到缩小文件的目的。
GZ、ACE、UUE、BZ2、JAR、ISO,MPQ以及平时常见的jpg,rmvb等格式的音视频文件也属于压缩文件。
WinRAR,好压(Haozip) ,WinZip,7-Zip,WinMount,Peazip,UHARC,FreeARC,360压缩。
其中WinRAR和WinZip是收费软件,Winmount、好压(Haozip)、Peazip、360压缩和7-Zip是免费软件。
50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密)
08 00:压缩方式
20 9E:最后修改文件时间
66 4F:最后修改文件日期
F2 1B 0F 4A:CRC-32校验(4A0F1BF2)
0E 00 00 00:压缩后尺寸
0C 00 00 00:未压缩尺寸
08 00:文件名长度
00 00:扩展记录长度
66 6C 61 67 2E 74 78 74: 文件名(不定长)
4B CB 49 4C AF 36 34 32 36 31 35 AB 05 00: 文件flag.txt压缩后的数据
压缩源文件目录区:
50 4B 01 02:目录中文件文件头标记(0x02014b50)
1F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)
08 00:压缩方式 20 9E:最后修改文件时间 66 4F:最后修改文件日期
F2 1B 0F 4A:CRC-32校验(4A0F1BF2)
0E 00 00 00:压缩后尺寸
0C 00 00 00:未压缩尺寸
08 00:文件名长度
24 00:扩展字段长度
00 00:文件注释长度
00 00:磁盘开始号
00 00:内部文件属性
20 00 00 00:外部文件属性
00 00 00 00:局部头部偏移量
压缩源文件目录结束标志:
50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
01 00:本磁盘上纪录总数
01 00:目录区中纪录总数
5A 00 00 00:目录区尺寸大小
34 00 00 00:目录区对第一张磁盘的偏移量
00 00:ZIP 文件注释长度
RAR文件格式
RAR 文件主要由标记块,压缩文件头块,文件头块,结尾块组成。
其每一块大致分为以下几个字段:
RAR压缩包的文件头为:52 61 72 21 1A 07 00
其后是标记块(MARK_HEAD),还有文件头(FILE_HEAD)
格式 | 文件头(16进制) | 文件头(ascii) |
---|---|---|
zip | 50 4B 03 04 | PK |
rar | 52 61 72 21 | Rar! |
7z | 37 7A BC AF 27 1C | 7z¼¯’ |
根据zip的文件头50 4B 03 04,rar的文件头52 61 72 21来判断文件头,使用010打开查看
仅适用于密码长度小于等于6位的,大于6位时间会非常的长,可以直接用apchpr爆破
伪加密就是在对应的加密标志位做修改,进而再打开文件时识被别为加密压缩包。上面在讲到文件格式的时候,提到RAR文件块的HEAD_FLAGS和ZIP的核心目录区的通用位标记,这两个就是伪加密的切入点。当拿到文件时,如果压缩文件是加密的,或文件头正常但缺无法正常解压,可先考虑是否为伪加密。通过将标志位修改为0便可解密压缩包。
猜测是Zip伪加密,使用ZipCenOp.jar进行解密
明文攻击是一种较为高效的攻击手段,大致原理是当你不知道一个zip的密码,但是你有zip中的一个已知文件(文件大小要大于12Byte)时,因为同一个zip压缩包里的所有文件都是使用同一个加密密钥来加密的,所以可以用已知文件来找加密密钥,利用密钥来解锁其他加密文件。我们为ZIP压缩文件所设定的密码,先被转换成了3个4字节的key,再用这3个key加密所有文件。如果我们能通过某种方式拿到压缩包中的一个文件,然后以同样的方式压缩,选择不去爆破密码。这种攻击方式便是已知明文攻击。
题目特征:有一个加密压缩包一个未加密压缩包(或者是一个文件)这个文件是加密压缩包的一部分
举个例子,已知明文攻击.zip 中存在的文件 明文.txt,因此将明文.txt 压缩,这里需要判断明文压缩后的CRC32是否与加密文件中的一致,若不一致可以换一个压缩工具。
CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值。由于CRC32产生校验值时源数据块的每一个bit(位)都参与了计算,所以数据块中即使只有一位发生了变化,也会得到不同的CRC32值.
总之每个文件都有唯一的CRC32值,即便数据中一个bit发生变化,也会导致CRC32值不同。若是知道一段数据的长度和CRC32值,便可穷举数据,与其CRC32对照,以此达到暴力猜解的目的。但通常只适用于较小文本文件。zip文件中crc32为未加密文件的校验码,比如这里有一个加密的压缩包,直接双击就可以看见其中信息,而且我知道其中全是数字,便可使用脚本爆破。
注:需要linux环境