CTF-压缩包伪加密技术

1.前文

在做CTF的misc题目时经常会碰到需要密码的zip文件,打开这种需要密码的方法无非就这三种:

(1)根据提示或其他文件解出密码
(2)暴力破解
(3)伪加密修改

2.原理

1.压缩源文件数据区:

​ 50 4B 03 04:这是头文件标记 (0x04034b50)

​ 14 00:解压文件所需 pkware 版本

00 00:全局方式位标记(判断有无加密)

​ 08 00:压缩方式

​ 5A 7E:最后修改文件时间

​ F7 46:最后修改文件日期

2.压缩源文件目录区:

​ 50 4B 01 02:目录中文件文件头标记 (0x02014b50)

​ 1F 00:压缩使用的 pkware 版本

​ 14 00:解压文件所需 pkware 版本

00 00:全局方式位标记(判断是否为伪加密)

​ 08 00:压缩方式

​ 5A 7E:最后修改文件时间

​ F7 46:最后修改文件日期

3.压缩源文件目录结束标志:

​ 50 4B 05 06:目录结束标记

​ 00 00:当前磁盘编号

​ 00 00:目录区开始磁盘编号

​ 01 00:本磁盘上纪录总数

​ 01 00:目录区中纪录总数

​ 59 00 00 00:目录区尺寸大小

​ 3E 00 00 00:目录区对第一张磁盘的偏移量

​ 00 00:ZIP 文件注释长度

3.判断是否加密:

注意:

全局方式位标记的四个数字中只有第二个数字对其有影响,其它的不管为何值,都不影响它的加密属性,即:

第二个数字为奇数时 –>加密

第二个数字为偶数时 –>未加密
1.无加密:
压缩源文件数据区的全局方式位标记应当为00 00 (50 4B 03 04 14 00 后)

且压缩源文件目录区的全局方式位标记应当为00 00 (50 4B 010214 00 后)


image1

2.伪加密:
压缩源文件数据区的全局方式位标记应当为 00 00 (50 4B 03 04 14 00 后)

且压缩源文件目录区的全局方式位标记应当为 09 00 (50 4B 010214 00 后)

image-20241126224735816

3.真加密:
压缩源文件数据区的全局方式位标记应当为09 00 (50 4B 03 04 14 00 后)

且压缩源文件目录区的全局方式位标记应当为09 00 (50 4B 010214 00 后)

image3

4.修改方法:
确定是伪加密后就需要将其修改为无加密,方法很简单,就是将压缩源文件目录区的全局方式位标记从09 00改为08 00。

image-20241126224746089

image-20241126224811073

5.其他途径:
(1)用binwalk-e zipfilename 无视伪加密
(2)在macOS和kali系统中,可以直接打开伪加密zip文件
(3)检测伪加密的工具ZipCenOp.jar
(4)有时用WinRAR的修复功能
6.反例:
这里是本文的重点所在,用winhex判断zip文件是否为伪加密存在问题,如图所示:
image4

按照上述的判断方法可以得出这是一个加密的zip文件,但实际上这是一个伪加密的zip文件,所以仅靠这种方法不能100%准确判断。
(题目来源:BUUCTF在线评测

既然这种方法存在问题,那么书本上的其他方法又如何呢,这里我将每个方法试了一试:

​ (1)用binwalk-e 无视伪加密:
在kali中使用自带的函数binwalk,运行后会出现一个文件夹,里面有一个zip文件和
txt文件,但打开txt文件发现没有任何内容。
image5

image6

(2)在kali中打开:
在kali中直接打开还是需要密码
image7

(3)用ZipCenOp.jar工具:
使用ZipCenOp.jar工具,显示是伪加密
指令:

java -jar ZipCenOp.jar e xxx.zip 加密

java -jar ZipCenOp.jar r xxx.zip 解密

image8

7.总结:
zip伪加密的知识点非常简单,一般来说在winhex中修修改改就能解决问题,但在准确度上,还是用工具ZipCenOp.jar这一方法更胜一筹。

posted @ 2025-12-03 09:31  shinianyunyan  阅读(108)  评论(0)    收藏  举报