深度理解压缩包伪加密
压缩包伪加密看似很简单,但其实网上绝大部分教程都没有讲明白,所以准备自己写一篇文章,以zip文件为主。
压缩包文件结构
根据ZIP 格式 - CTF Wiki,我们可以知道一个压缩包被分为三部分,分别为压缩源文件数据区 + 压缩源文件目录区 + 压缩源文件目录结束标志,对应010 Editor变量中的record + dirEntry + endLocator三部分。
文件源数据区(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两个区的加密标志位修改成加密状态,实现伪加密。
评论
评论插件加载失败
正在加载评论插件