深度理解压缩包伪加密
C3ngH Lv4

压缩包伪加密看似很简单,但其实网上绝大部分教程都没有讲明白,所以准备自己写一篇文章,以zip文件为主。

压缩包文件结构

根据ZIP 格式 - CTF Wiki,我们可以知道一个压缩包被分为三部分,分别为压缩源文件数据区 + 压缩源文件目录区 + 压缩源文件目录结束标志,对应010 Editor变量中的record + dirEntry + endLocator三部分。

image

文件源数据区(record)

HEX 数据 描述 010Editor 模板数据
50 4B 03 04 zip 文件头标记,看文本的话就是 PK 开头 char frSignature[4]
0A 00 解压文件所需 pkware 版本 ushort frVersion
00 00 全局方式位标记(有无加密) ushort frFlags
00 00 压缩方式 enum COMPTYPE frCompression
E8 A6 最后修改文件时间 DOSTIME frFileTime
32 53 最后修改文件日期 DOSDATE frFileDate
0C 7E 7F D8 CRC-32 校验 uint frCrc

文件目录区(dirEntry)

HEX 数据 描述 010Editor 模板数据
50 4B 01 02 目录中文件文件头标记 char deSignature[4]
3F 00 压缩使用的 pkware 版本 ushort deVersionMadeBy
0A 00 解压文件所需 pkware 版本 ushort deVersionToExtract
00 00 全局方式位标记(有无加密) ushort deFlags
00 00 压缩方式 enum COMPTYPE frCompression
E8 A6 最后修改文件时间 DOSTIME frFileTime
32 53 最后修改文件日期 DOSDATE frFileDate
0C 7E 7F D8 CRC-32 校验 uint frCrc

文件目录结束(endLocator)

50 4B 05 06 目录结束标记 char elSignature[4]
00 00 当前磁盘编号 ushort elDiskNumber
00 00 目录区开始磁盘编号 ushort elStartDiskNumber

record区的frFlags和dirEntry区deFlags

实现伪加密

正常情况下并没有伪加密需求(大概没吧),但在CTF比赛中,出题人可能会人为的将record和dirEntry两个区的加密标志位修改成加密状态,实现伪加密。

 评论
评论插件加载失败
正在加载评论插件
总字数 84.7k 访客数 访问量