zip伪加密

oka~今天要看的是什么奇怪小知识呢~~a,是zip!

zip相关内容

zip文件主要由三部分构成:压缩源文件数据区+核心目录+目录结束标识

压缩源文件数据区

  • 0~3(四个字节) 50 4B 03 04:这是头文件标记0x04034b50
  • 4~5(两个字节) 14 00:解压文件所需 pkware 版本
  • 6~7 00 00:全局方式位标记(有无加密)
  • 8~9 08 00:压缩方式
  • 10~11:最后修改文件时间
  • 12~13:最后修改文件日期
  • 14~17:CRC-32校验
  • 18~21:压缩后尺寸
  • 22~25:未压缩尺寸
  • 26~27:文件名长度
  • 28~29:扩展数据长度
  • 30~30+n(n个字节):文件名
  • 30+n~30+n+m(m个字节):扩展数据

核心目录

  • 0~3 50 4B 01 02:目录中文件文件头标记0x02014b50
  • 4~5 3F 00:压缩使用的 pkware 版本
  • 6~7 14 00:解压文件所需 pkware 版本
  • 8~9 00 00:全局方式位标记(有无加密,有无进行伪加密)
  • 10~11 08 00:压缩方式
  • 12~13:最后修改文件时间
  • 14~15:最后修改文件日期
  • 16~19:CRC-32校验
  • 20~23:压缩后尺寸
  • 24~27:未压缩尺寸
  • 28~29:文件名长度
  • 30~31:扩展字段长度
  • 32~33:文件注释长度
  • 34~35:磁盘开始号(一般为0)
  • 36~37:内部文件属性(一般为0)
  • 38~41:外部文件属性
  • 42~45:局部头部偏移量

目录结束标识

  • 0~3 50 4B 05 06:目录结束标识标记0x06054b50
  • 4~5:当前磁盘编号
  • 6~7:目录区开始磁盘编号
  • 8~9:本磁盘上纪录总数
  • 10~11:目录区中纪录总数/即zip压缩包中的文件总数
  • 12~15:目录区尺寸大小
  • 16~19:目录区对第一张磁盘的偏移量
  • 20~21:ZIP 文件注释内容的长度
  • 22~22+n(n个字节):注释内容

伪加密

目录区域的全局方位标记第二位数字的奇偶决定是否加密,若将其改为奇数则判定为加密(此时数据区的全局方位标记第二位是偶数时,实际是伪加密),偶数则判定为未加密。未加密的文件将数据区和目录区都改动也能产生伪加密效果,所以根据目录区判断是否为伪加密不一定准确。

解法

使用16进制编辑器打开zip文件,将全局方位标记第二位改成0,此时zip就回到了未加密状态。
或者使用binwalk、ZipCenOp.jar等工具,最终也能打开伪加密zip文件。
注:mac系统不受伪加密影响,能直接打开伪加密zip文件sa~
(似乎部分Linux系统面对zip伪加密也能做到和mac一样的效果?)