zip文件格式
一个ZIP文件由三大部分组成:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志
压缩源文件数据区
数据区主要记录了压缩前后文件的元数据以及存放压缩后的文件,记录格式如下:
- 第0~3个字节:50 4B 03 04,代表了文件头标志
- 第4~5个字节:14 00,代表了解压文件所需的pkware版本
- 第6~7个字节:00 00,代表了全局方式位标记(用来判断有没有加密)
- 第8~9个字节:08 00,代表了压缩方式
- 第10~11个字节:1D 9B,代表了最后修改文件的时间
- 第12~13个字节:3D 56,代表了最后修改文件的日期
- 第14~17个字节:5A 48 63 5C,是zip文件的crc-32校验值
- 第18~21个字节:77 00 00 00,是文件压缩后的尺寸
- 第22~25个字节:B1 00 00 00,是文件未压缩前的尺寸
- 第26~27个字节:10 00,代表文件名长度
- 第28~29个字节:00 00,代表扩展记录长度
压缩源文件目录区
压缩源文件目录区是由一系列压缩源文件目录记录所组成,一条压缩文件目录记录对应数据区中的一个压缩文件记录,压缩源文件目录记录由以下部分构成:
1、第0~3个字节:50 4B 01 02,代表了目录文件头标记
2、第4~5个字节:02 3F,代表了压缩使用的pkware版本
3、第6~7个字节:14 00,代表了解压文件所需的pkware版本
4、第8~9个字节:00 00,代表了全局方式位标记(用来判断是否为伪加密)
5、第10~11个字节:08 00,代表了压缩方式
6、第12~13个字节:1D 9B,代表了最后修改文件的时间
7、第14~15个字节:3D 56,代表了最后修改文件的日期
8、第16~19个字节:5A 48 63 5C,是zip文件的crc-32校验值
9、第16~19个字节:77 00 00 00,是文件压缩后的大小
10、第24~27个字节:B1 00 00 00,是文件未压缩前的大小
11、第28~29个字节:10 00,代表文件名长度
12、第30~31个字节:00 00,代表扩展字段长度
13、第32~33个字节:00 00,代表文件注释长度
压缩源文件目录结束标志
1、第0~3个字节:50 4B 05 06,代表目录结束标记
2、第4~5个字节:00 00,代表当前磁盘编号
3、第6~7个字节:00 00,代表目录区开始磁盘编号
4、第8~9个字节:01 00,代表本磁盘上纪录总数
5、第10~11个字节:01 00,代表目录区中纪录总数
6、第12~15个字节:62 00 00 00,代表目录区尺寸大小
7、第16~19个字节:A5 00 00 00,代表目录区对第一张磁盘的偏移量
8、第20~21个字节:00 00,代表zip文件注释长度
判断加密方式
识别一个zip文件是否加密主要是看压缩源文件数据的全局方式位标记和压缩源文件目录区的全局方式位标记,关键操作在其中的全局方式标记的第一字节数字的奇偶上,其它的不管为何值,都不影响它的加密属性。通常全局方式位标记为2 bytes长度,第一字节数字为偶数表示无加密,例如:00,02,04等;为奇数表示有加密,例如01,03,09等。
无加密
无加密的zip压缩包压缩源文件数据区的全局加密应当为00 00,且压缩源文件目录区的全局方式位标记也为 00 00。
真加密
真加密的zip压缩包压缩源文件数据区的全局加密应当为09 00,且压缩源文件目录区的全局方式位标记应当为 09 00。
伪加密
伪加密的zip压缩包压缩源文件数据区的全局加密为 00 00,且压缩源文件目录区的全局方式位标记为09 00或者01 00。
伪加密解题思路
方法一
拿到一个压缩文件后尝试解压,发现出错。将其拖进winhex中查看
发现压缩源文件数据区的全局加密为 00 00,且压缩源文件目录区的全局方式位标记为09 00。其符合伪加密的特征,将09 00修改为00 00,另存为新的压缩文件即可打开。
方法二
使用ZipCenOp.jar(需要java环境),在cmd中使用,需要将压缩文件和工具放在同一目录下,否则就要加上具体路径。
java -jar ZipCenOp.jar r download.zip
成功后压缩包就可以直接打开了。
方法三
右键属性,查看注释,这题没有给提示,如果有遇到别的题可以试试。
方法四
他们说在kali中用binwalk命令可以直接将文件分离出来,我这里试了binwalk和forem发现都不行,如果你们遇到了也可以试一下。
版权归原作者 红烧大鸡块 所有, 如有侵权,请联系我们删除。