例题:
http://www.shiyanbar.com/ctf/716
说明:
由于zip文件中是用全局方式位标记来标识有无加密的,所以更改此项就能伪造此zip文件有无加密。
一般情况下,如果文件有加密,压缩源文件数据区和压缩源文件目录去的全局方式位标记都显示有加密(一般是09 00,对于zip具体格式将在下面列出)
如果发现压缩文件数据区显示无加密,而压缩文件目录区显示有加密,则很有可能是伪加密。
解法:
1、将图片下载下来,将图片后缀名改为zip,发现是一个压缩文件,右键点击解压,发现有密码。
2、用winhex打开此压缩文件,找到zip的压缩源文件数据区的头文件标记
50 4B 03 04 然后查看全局方式位标记 00 00
表示无加密(第二位奇数表示加密,偶数无加密)
再往后找到压缩源文件目录区的文件头标志50 4B 01 02 再找到之后的全局方式位标记09 00 即加密状态。和前面的加密状态不符,所以此时很可能是伪加密,可以用ziperello和azpr等跑一下,看看是不是真加密。
对于伪加密的情况,我们可以把09 00 改为00 00 然后即可打开文件。
zip格式
在此附上这一部分的原出处:
http://blog.csdn.net/wclxyn/article/details/7288994
1、压缩源文件数据区(部分)
在这个数据区中每一个压缩的源文件/目录都是一条记录,记录的格式如下:
文件头+文件数据+数据描述符
a、文件头结构
组成 | 长度 |
---|---|
文件头标记 | 4bytes(0x504B0304) |
解压文件所需的pkware版本 | 2 bytes |
全局方式位标记 | 2 bytes |
压缩方式 | 2 bytes |
最后修改文件时间 | 2 bytes |
最后修改文件日期 | 2 bytes |
CRC-32校验 | 4 bytes |
压缩后尺寸 | 4 bytes |
未压缩尺寸 | 4 bytes |
文件名长度 | 2 bytes |
拓展记录长度 | 2 bytes |
文件名 | (不定长度) |
拓展字段 | (不定长度) |
b、文件数据
c、数据描述符(不一定有,需要请自行搜索)
2、压缩源文件目录区
组成 | 长度 |
---|---|
目录中文件文件头标记 | 4bytes(0x504B0102) |
压缩文件所需的pkware版本 | 2 bytes |
解压文件所需 pkware 版本 | 2 bytes |
全局方式位标记 | 2 bytes |
压缩方式 | 2 bytes |
最后修改文件时间 | 2 bytes |
最后修改文件日期 | 2 bytes |
CRC-32校验 | 4 bytes |
压缩后尺寸 | 4 bytes |
未压缩尺寸 | 4 bytes |
文件名长度 | 2 bytes |
拓展记录长度 | 2 bytes |
文件注释长度 | 2 bytes |
磁盘开始号 | 2 bytes |
内部文件属性 | 2 bytes |
外部文件属性 | 4 bytes |
局部头部偏移量 | 4 bytes |
文件名 | (不定长度) |
拓展字段 | (不定长度) |
文件注释 | (不定长度) |
3、压缩源文件目录结束标志
组成 | 长度 |
---|---|
目录结束标记 | 4bytes(0x504B0506) |
当前磁盘编号 | 2 bytes |
目录区开始磁盘编号 | 2 bytes |
本磁盘上纪录总数 | 2 bytes |
目录区中纪录总数 | 2 bytes |
目录区尺寸大小 | 4 bytes |
目录区对第一张磁盘的偏移量 | 4 bytes |
ZIP 文件注释长度 | 2 bytes |
文件注释长度 | (不定长度) |
伪加密貌似只对zip文件有效,对于rar文件楼主没有实验成功。在此附上rar文件格式说明:
https://wenku.baidu.com/view/b7889b64783e0912a2162aa4.html
若有朋友对rar文件试验成功,欢迎一起探讨,谢谢。