MISC入门---压缩包隐写
前言
压缩包题不只是“猜密码再解压”。附件里可能藏着另一层压缩包,扩展名可能被改过,文件头或目录可能异常,也可能利用 ZIP 的标志位做“伪加密”。还有的题目把线索放在文件名、注释、CRC32、分卷或压缩包前后拼接的数据里。
先记住两个概念:压缩是把数据用更紧凑的方式保存;加密是把数据变成需要密钥才能读懂的形式。一个压缩包可以被压缩但没有加密,也可以同时压缩和加密。看到“压缩包”三个字,不要立刻开始爆破密码,先确认它到底属于哪一种情况。
一、先确认文件是不是压缩包
文件扩展名可以随意改名,题目也可能把 ZIP 命名为图片或文档。先查看真实类型、文件头和目录:
file challenge
xxd -l 32 challenge
7z l challenge
ZIP 常见签名包括:
50 4B 03 04 本地文件头
50 4B 01 02 中央目录文件头
50 4B 05 06 中央目录结束记录
file 根据内容特征猜测格式;xxd 查看开头的十六进制字节;7z l 列出压缩包目录,不直接解压。三个结果相互验证后,再决定是否改扩展名。改名只改文件名,不会修复文件内容;操作前先复制附件。
如果题目给出多个文件,也要检查是否为分卷。例如 ZIP 分卷常有 .z01、.z02 和 .zip 等文件,缺少任何一卷都可能无法正常解压。把所有分卷放在同一目录,并保持原文件名和顺序。
二、ZIP 文件内部大致是什么结构
ZIP 不是简单地把文件粘在一起。一个普通 ZIP 条目通常包含:
- 本地文件头:说明文件名、压缩方式、标志位、大小等信息。
- 压缩数据:真正的文件内容,可能是压缩后的数据,也可能经过加密。
- 中央目录:保存条目的索引信息,供压缩软件快速列出文件。
- 中央目录结束记录:标记目录位置,并可能带有 ZIP 注释。
本地文件头和中央目录都会记录同一条目的部分信息。检查异常时要比较两边,不能只改其中一处。压缩包可以有多个条目,所以每个文件头和目录项都要对应起来。

三、重点概念:什么是 ZIP 伪加密
ZIP 头部有一个通用标志位字段(General Purpose Bit Flag)。它不是密码,而是告诉解压软件应该如何解释当前条目。这个字段的最低位 bit 0 表示该条目是否加密:
- bit 0 为 0:该条目没有设置 ZIP 加密标志。
- bit 0 为 1:该条目声明使用了加密。
伪加密通常指压缩包实际数据并没有被正确加密,但有人只把头部的加密标志位改成了 1。软件看到标志后就误以为需要密码,于是弹出密码框或报错。它看起来“有密码”,实际问题是元数据标记与数据内容不一致。
怎样判断它可能是伪加密
先用 7-Zip 查看目录、尝试列出文件,并结合题目提示判断。若题目明确表示没有密码、压缩包里却显示加密,或某些软件提示密码而其他信息显示内容并未加密,就值得检查标志位。随后用十六进制工具查 ZIP 结构:
- 本地文件头签名是 50 4B 03 04;它后面 4 个字节是“版本”和“通用标志位”,标志位从头部起始位置偏移 +6 开始。
- 中央目录签名是 50 4B 01 02;对应的通用标志位从该记录起始位置偏移 +8 开始。
- 通用标志位占 2 字节,按小端序存放。检查最低位时只看 bit 0,不要把整个字段当成一个密码值。
以标志位字节 09 00 为例,最低位为 1,表示加密标记被设置;其中其他位可能还有别的含义。若确认题目是伪加密,处理时只清除加密标志对应的 bit 0,并让本地文件头和中央目录中的标志保持一致。不要把整个字段粗暴改成 00 00,也不要只改一处,否则可能破坏其他标志或让压缩包前后信息不一致。
伪加密和真正加密的区别
真正加密会对压缩数据进行加密,知道一个标志位并不能恢复内容。ZIP 常见传统加密方式是 ZipCrypto;也有 AES 加密扩展。若文件确实被加密,通常需要正确密码,或者在密码范围很小、题目给出足够线索时尝试受限的恢复方法。真实加密的数据不能靠把标志位改成 0 就“解密”。
伪加密也不是“无论如何改标志就能打开”。文件头和中央目录不匹配、数据损坏、分卷缺失或格式不完整,都可能造成类似报错。先确认是哪一种问题,再在副本上修复。可使用专门的 ZIP 结构检查工具,也可以用 010 Editor / WinHex 对照记录;修复后再次用 7-Zip 测试目录和内容。
四、其他常见压缩包线索
- 扩展名伪装或文件头损坏:用 file、签名和题目提示判断真正格式。若 ZIP 前后还拼了别的文件,binwalk 可能报告嵌入对象和偏移。
- 注释与文件名:查看 ZIP 注释、目录层级和文件名,题目提示可能直接指向密码或下一个附件。
- 嵌套压缩包:解压一层后仍可能得到 ZIP、RAR、图片或文本。每解一层都重新识别文件类型并记录目录。
- 分卷压缩:需要所有分卷齐全,不能只改后缀或单独解其中一段。
- CRC32:每个条目通常有 CRC32 校验值,用于发现数据损坏。它不是加密算法,也不能直接反推出任意长的原文;但若文件只有一两个字符、字符集和长度范围很小,可以枚举候选文本并比对 CRC32。
下面是 WP 中压缩包目录及其 CRC32 字段的截图示例。

五、需要密码时,按线索选择方法
真正加密时,不要对所有字符做无边界爆破。先从题目描述、附件名、作者、日期和密码格式缩小范围:
- 字典尝试:适用于题目暗示常见词、用户名、年份或已知密码习惯的场景。
- 掩码爆破:已知密码结构时,只枚举未知部分。例如已知前缀、固定长度或字符集,范围会小很多。
- 明文攻击:如果压缩包里有一个文件,而且你有完全相同的原始文件,某些加密格式和压缩条件下可尝试利用已知明文。文件只“看起来相似”不够,必须字节内容一致并满足工具要求。
- CRC32 候选匹配:适合极短、范围明确的内容。CRC32 可能碰撞,候选匹配后仍需实际解压和验证,不能把它当成密码学解密。
题目没有提供任何线索时,先检查结构和注释,再决定是否尝试密码恢复。爆破工具的成功与否还受加密算法、密码长度、字符集和硬件速度影响。
六、推荐的入门检查流程
- 复制附件并记录原件大小和哈希。
- 用 file、文件头和 7-Zip 确认真实格式、目录和分卷情况。
- 查看文件名、ZIP 注释、题目提示和条目大小。
- 如果软件说有密码,先区分伪加密、真实加密、文件损坏和缺少分卷。
- 怀疑伪加密时,对照每个本地文件头和中央目录的标志位,只在副本上谨慎处理。
- 确认真实加密后,再根据线索选择字典、掩码、明文或 CRC32 候选检查。
- 解压后重新识别每个文件,必要时继续检查嵌套内容。
常见误区
- 看到密码框就立刻爆破:可能只是伪加密或分卷不全。
- 把 CRC32 当作加密:它是校验值,不是解密算法。
- 只检查本地文件头:中央目录也有对应信息,要一起核对。
- 把通用标志位全部清零:其他位可能有用途;只处理已确认的问题位。
- 改完扩展名就认为文件修好了:扩展名不改变压缩包内部结构。
- 直接修改原件:每次修复或解压都使用副本,保留可复现的原始输入。
总结
压缩包题先分清“格式是什么、为什么打不开、信息藏在哪”。伪加密是元数据标志造成的假象,不等于真实加密;真正加密则需要密码或符合条件的密码恢复方法。检查 ZIP 时同时关注本地文件头、中央目录、CRC32、注释、分卷和嵌套附件,再按题目线索一步步验证,就能把许多看似复杂的压缩包题拆开处理。

浙公网安备 33010602011771号