前言

又又又学习了一次伪加密🔐,我这人记性是真的不好👎,太容易忘记了.所以一篇博客


原理

zip伪加密是在文件头的加密标志位做修改,进而再打开文件时识被别为加密压缩包。

快速操作?👇

压缩源文件目录区全局方式位标记 的 01 00 或 09 00 改为 00 00 就可以去除密码 提示

压缩源文件目录区全局方式位标记 的 00 00 改为 01 00 或 09 00 就可以添加密码 提示

ZIP文件组成

一个 ZIP 文件由三个部分组成:

压缩源文件数据区 + 压缩源文件目录区 + 压缩源文件目录结束标志

三部分的详细介绍(反正我不想看)

1、压缩源文件数据区
在这个数据区中每一个压缩的源文件/目录都是一条记录,记录的格式如下:

​ [文件头+ 文件数据 + 数据描述符]

​ a、文件头结构
​ 组成   长度
​ 文件头标记 4 bytes (0x04034b50)
​ 解压文件所需 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、数据描述符
   组成   长度
  CRC-32校验 4 bytes
  压缩后尺寸 4 bytes
   未压缩尺寸 4 bytes

​ 这个数据描述符只在全局方式位标记的第3位设为1时才存在(见后详解),紧接在压缩数据的最后一个字节后。这个数据描述符只用在不能对输出的 ZIP 文件进行检索时使用。例如:在一个不能检索的驱动器(如:磁带机上)上的 ZIP 文件中。如果是磁盘上的ZIP文件一般没有这个数据描述符。
2、压缩源文件目录区
在这个数据区中每一条纪录对应在压缩源文件数据区中的一条数据
   组成   长度
​   目录中文件文件头标记 4 bytes (0x02014b50)
​   压缩使用的 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、压缩源文件目录结束标志
​    组成   长度
​ 目录结束标记 4 bytes (0x02014b50)
​ 当前磁盘编号 2 bytes
​ 目录区开始磁盘编号 2 bytes
​   本磁盘上纪录总数 2 bytes
​   目录区中纪录总数 2 bytes
​   目录区尺寸大小 4 bytes
​   目录区对第一张磁盘的偏移量 4 bytes
​   ZIP 文件注释长度 2 bytes
​   ZIP 文件注释 (不定长度)

这里拿一张伪加密🔐压缩包的16进制图吧,这个是我做BUUCTF时遇到的.方便后面说明.

image-20220427192029754

16进制文本

50 4B 03 04 14 00 09 00 08 00 50 A3 A5 4A 21 38
76 65 19 00 00 00 17 00 00 00 08 00 00 00 66 6C
61 67 2E 74 78 74 4B CB 49 4C AF 76 4C C9 35 F4
D3 75 32 72 D7 CD 0E D5 0D 8E F2 0C A8 05 00 50
4B 01 02 1F 00 14 00 09 00 08 00 50 A3 A5 4A 21
38 76 65 19 00 00 00 17 00 00 00 08 00 24 00 00
00 00 00 00 00 20 00 00 00 00 00 00 00 66 6C 61
67 2E 74 78 74 0A 00 20 00 00 00 00 00 01 00 18
00 0F F5 04 D5 9A C5 D2 01 46 1F CB 8A 9A C5 D2
01 46 1F CB 8A 9A C5 D2 01 50 4B 05 06 00 00 00
00 01 00 01 00 5A 00 00 00 3F 00 00 00 00 00

压缩源文件数据区:

压缩源文件数据区

50 4B 03 04:这是PK头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
09 00:全局方式位标记(图中代表是有加密🔐,如果是 00 00 就是代表无加密🔐)
08 00:压缩方式
50 A3:最后修改文件时间
A5 4A:最后修改文件日期
21 38 76 65:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
08 00:文件名长度
00 00:扩展记录长度

压缩源文件目录区:

压缩源文件目录区

50 4B 01 02:目录中文件PK文件头标记(0x02014b50)
1F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
09 00:全局方式位标记(图中代表是有加密🔐,如果是 00 00 就是代表无加密🔐)
08 00:压缩方式
50 A3:最后修改文件时间
A5 4A:最后修改文件日期
21 38 76 65:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
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:目录区尺寸大小
3F 00 00 00:目录区对第一张磁盘的偏移量
00 00:ZIP 文件注释长度

伪加密->无密码

方法一

压缩源文件目录区全局方式位标记 的 01 00 或 09 00 改为 00 00 就可以去除密码 提示

压缩源文件目录区全局方式位标记 的 00 00 改为 01 00 或 09 00 就可以添加密码 提示

方法二

使用ZipCenOp.jar清除密码

点我下载ZipCenOp.jar

下载完后,将它与压缩包放在同一个文件夹中.

输入一下命令

1
java -jar ZipCenOp.jar r xxx,zip # 这个填你压缩包的名字

就可以完成文件头的修复.

方法三(未确认)

貌似以前做题的时候,用winrar也可以修复.