zip伪加密是misc中的一种题型。ZIP伪加密是一种特殊的压缩包加密方式,它并不是真正的加密,而是通过修改ZIP文件头的加密标志位来欺骗某些压缩软件认为文件是加密的。 可以使用一些十六进制工具如010 Editor,HxD等来判断是否为伪加密
下面以BUUCTF-MISC-zip伪加密为例具体讲解。
刚开始尝试解压,看到了flag.txt文件,但需要解压密码。暴力破解后没有结果。将文件在010 Editor中打开,分析它的文件格式,修改相关参数。
放进010Editor中如下图
需要了解相关知识
一个zip文件由三部分组成:压缩源文件数据区 压缩源文件目录区 压缩源文件目录结束标志。
1 压缩源文件数据区:50 4B 03 04:这是头文件标记 14 00:解压文件所需 pkware 版本(pk就是压缩包的意思) 00 00:全局方式位标记(判断有无加密) 08 00:压缩方式
2.压缩源文件目录区: 50 4B 01 02:目录中文件文件头标记 (0x02014b50) 1F 00:压缩使用的 pkware 版本 14 00:解压文件所需 pkware 版本 00 00:全局方式位标记(判断是否为伪加密) 08 00:压缩方式
3.压缩源文件目录结束标志: 50 4B 05 06:目录结束标记 00 00:当前磁盘编号 00 00:目录区开始磁盘编号 01 00:本磁盘上纪录总数 01 00:目录区中纪录总数 59 00 00 00:目录区尺寸大小 3E 00 00 00:目录区对第一张磁盘的偏移量 00 00:ZIP 文件注释长度
全局方式位标记的四个数字中只有第二个数字对其有影响,其它的不管为何值,都不影响它的加密属性,即: 第二个数字为奇数时 –>加密 第二个数字为偶数时 –>未加密
1 zip伪加密实现.伪加密的ZIP文件在压缩源文件数据区的全局加密标记上通常保持为00 00,表示数据区本身没有加密。
2.关键在于压缩源文件目录区的全局方式位标记。为了制造伪加密效果,这个标记被修改为09 00(或其他以奇数结尾的两位数字)。这样,当尝试打开这个ZIP文件时,软件会识别为加密文件,并提示输入密码
那为什么是压缩源文件目录区呢?
数据区主要是存储实际的数据内容,而目录区则记录了文件结构信息。 虽然数据区的全局方式位标记也能反映一些加密状态,但目录区的标记对于判断文件是否为伪加密更为直接和关键。因为伪加密通常是通过修改目录区的标记来制造假象,而数据区的标记可能受到其他因素的影响,不如目录区的标记那么具有确定性。
以下几种常见的形式:
未加密:文件头中的全局方式位标记为00 00 目录中源文件的全局方式位标记为00 00
伪加密:文件头中的全局方式位标记为00 00 目录中源文件的全局方式位标记为09 00
真加密:文件头中的全局方式位标记为09 00 目录中源文件的全局方式位标记为09 00
注意也不一定要09 00或00 00,只要是奇数都视为加密,而偶数则视为未加密。
注意如果两个区域都被标记为 09 00 需要进一步分析文件的其他部分来确定文件的真实加密状态。在处理这种情况时,可以尝试将两个位置的标记都改回 00 00 ,然后尝试解压文件,看是否需要密码。如果不需要密码,那么文件可能被错误地标记为加密;如果仍然需要密码,则文件可能是真的加密了。这种分析方法可以帮助确定ZIP文件的真实加密状态。
综上只需要把09 00 改为00 00再打开文件就可以得到flag。flag{Adm1N-B2G-kU-SZIP}