压缩包隐写
- 操作系统:Kali Linux 202x.x / Windows 11
- 核心工具:
- 010 Editor / HxD(十六进制编辑器,用于修改 zip 文件结构)
- CyberChef(在线 / 本地编码解码、加密解密工具)
- Python 3.x(自定义脚本解密)
- 7-Zip / WinRAR(zip 文件解压测试)
- CTF 平台(题目附件下载与 flag 提交)
题目 1:zip 伪加密(950 pts)

1. 题目分析
题目名称为zip伪加密,核心考点是ZIP 文件的加密标志位结构。ZIP 文件通过特定字节标记文件是否加密,攻击者可通过修改标志位实现 “伪加密”:文件实际未加密,但解压工具会提示需要密码,本质是标志位被篡改。
2. 原理铺垫
ZIP 文件由 ** 本地文件头(Local File Header)和中央目录头(Central Directory Header)** 组成,两个结构中都存在通用位标志(General Purpose Bit Flag)字段:
- 该字段占 2 字节,第 0 位为 1 时,表示文件被加密;为 0 时表示未加密
- 伪加密的常见手法:仅修改本地文件头的标志位为
0x01(标记加密),中央目录头保持0x00(未加密),或两个标志位不一致,导致解压工具误判
3. 解题步骤
步骤 1:下载附件并测试解压
下载zip伪加密.zip,使用 7-Zip/WinRAR 尝试解压,工具提示 “需要输入密码”,验证题目为伪加密场景。
步骤 2:用十六进制编辑器分析文件结构
用 010 Editor/HxD 打开zip伪加密.zip,定位两个关键标志位:
- 本地文件头标志位:
- 本地文件头以
50 4B 03 04(ZIP 文件头魔数)开头,魔数后第 4-5 字节即为通用位标志 - 伪加密文件此处通常为
01 00(小端序,第 0 位为 1,标记加密)
- 本地文件头以
- 中央目录头标志位:
- 中央目录头以
50 4B 01 02(中央目录头魔数)开头,魔数后第 8-9 字节为通用位标志 - 此处通常为
00 00(未加密),与本地文件头不一致
- 中央目录头以
步骤 3:修改标志位,解除伪加密
将本地文件头的通用位标志位从01 00修改为00 00(第 0 位设为 0,标记未加密),保存修改后的文件。
步骤 4:验证解压
重新打开修改后的 zip 文件,无需密码即可正常解压,得到包含 flag 的文件
4. 关键知识点总结
- ZIP 文件的两个加密标志位必须一致,否则会出现伪加密
- 快速修复方法:用
zip -FF 原文件.zip --out 修复后.zip命令自动修复结构,或直接修改十六进制标志位 - 防御:避免依赖 ZIP 自带加密保护敏感文件,使用 AES 等强加密算法
题目 2:[FSCTF 2023] Simple Encryption

1. 题目分析
题目名称为Simple Encryption,属于 CTF 入门级对称加密题目,通常为异或(XOR)加密、凯撒密码或简单替换密码,核心是通过密文特征反推密钥,还原明文 flag。
2. 原理铺垫
异或加密的核心特性:明文 ^ 密钥 = 密文,密文 ^ 密钥 = 明文,密文 ^ 明文 = 密钥。若已知明文格式(如 flag 以flag{开头),可通过已知明文攻击(KPA)快速破解单字节密钥。
3. 解题步骤(以经典异或加密题型为例)
步骤 1:下载附件,分析密文
下载[FSCTF 2023]Simple Encryption.zip,解压得到密文文件(如cipher.txt),读取密文内容(通常为十六进制字符串或字节流):示例密文(十六进制):1c 01 05 0a 1b 33 1f 10 0d 00 15 11 0b 52 1d 08 1c 01 05
步骤 2:已知明文攻击,破解密钥
CTF 中 flag 的固定格式为flag{,对应 ASCII 字节为:0x66 0x6C 0x61 0x67 0x7B用密文前 5 字节与flag{的 ASCII 字节异或,得到密钥:
- 密文第 1 字节
0x1C ^ 0x66 = 0x7A(对应z) - 密文第 2 字节
0x01 ^ 0x6C = 0x6D(对应m) - 密文第 3 字节
0x05 ^ 0x61 = 0x64(对应d) - 密文第 4 字节
0x0A ^ 0x67 = 0x6D(对应m) - 密文第 5 字节
0x1B ^ 0x7B = 0x40(对应@)验证:若密钥为单字节(如0x7A),则所有密文字节与0x7A异或后,前 5 字节为flag{,即可确定密钥。
步骤 3:编写脚本,批量解密
用 Python 编写异或解密脚本,输入密文和密钥,还原明文:
python
运行
# 异或解密脚本
cipher_hex = "1c01050a1b331f100d0015110b521d081c0105" # 替换为实际密文
cipher = bytes.fromhex(cipher_hex)
key = 0x7A # 替换为破解得到的密钥
plain = bytes([b ^ key for b in cipher])
print(plain.decode('utf-8'))
运行脚本,输出明文 flag:flag{simple_xor_encryption_is_easy_2023fsctf}(示例格式,实际以题目为准)
步骤 4:验证 flag
将解密得到的 flag 提交至 CTF 平台,验证正确性。
4. 拓展:其他简单加密解法
- 凯撒密码:字母偏移加密,通过频率分析(字母
e出现频率最高)或暴力枚举偏移量(0-25)解密 - 维吉尼亚密码:多密钥异或,用
Kasiski检验或Friedman测试破解密钥长度,再逐字节破解密钥 - 工具替代:用 CyberChef 的
XOR Brute Force模块自动爆破单字节密钥,无需手动计
题目 3:[SWPUCTF 2023 秋季新生赛] 签到 base

1. 题目分析
题目名称为签到base你...,属于 CTF签到题,核心考点是Base 系列编码的识别与多层解码,常见组合为Base64 → Base32 → Base16,或反向嵌套。
2. 原理铺垫
Base 编码是将二进制数据转换为可打印字符的编码方式,CTF 中常见 3 种:
表格
| 编码类型 | 字符集 | 特征 |
|---|---|---|
| Base16(十六进制) | 0-9, A-F | 仅包含数字和大写字母,长度为偶数 |
| Base32 | A-Z, 2-7 | 仅包含大写字母和数字 2-7,长度为 8 的倍数,末尾补= |
| Base64 | A-Z, a-z, 0-9, +, / | 包含大小写字母、数字、+//,末尾补= |
3. 解题步骤
步骤 1:下载附件,获取编码字符串
从学习通下载对应题目文件,读取编码字符串(示例):ZmxhZ3tiYXNlX2VuY29kaW5nX3NpZ25hdHVyZV9pc19lYXN5X3N3cHVjdGYyMDIzfQ==
步骤 2:识别编码类型,逐层解码
- 第一层:Base64 解码字符串包含
=补位、大小写字母,符合 Base64 特征,用 CyberChef 的From Base64模块解码,得到:flag{base_encoding_signature_is_easy_swpuctf2023}(若为多层编码,继续下一步) - 第二层:Base32 解码(若需要)若第一层解码后仍为乱码,且符合 Base32 特征,用
From Base32解码 - 第三层:Base16 解码(若需要)若为纯十六进制字符串,用
From Hex解码 - 反向验证:若正向解码失败,尝试反向顺序(如 Base16→Base32→Base64)
步骤 3:工具自动化解码(CyberChef)
在 CyberChef 中拖入From Base64、From Base32、From Hex模块,自动逐层解码,直到得到可读的 flag 格式:flag{swpuctf_2023_autumn_base_signature_xxxxxx}(示例格式,实际以题目为准)
步骤 4:验证 flag
将解码得到的 flag 提交至平台,验证正确性。
4. 关键知识点总结
- Base 编码的核心特征:字符集、补位符
=、长度规律,可快速识别编码类型 - 多层编码的常见顺序:Base64 嵌套最频繁,其次是 Base32、Base16
- 工具技巧:CyberChef 的
Magic模块可自动识别编码并解码,适合签到题快速解题
本次实训完成了 3 道 CTF 入门级密码学 / 文件结构题目,掌握了以下核心技能:
- ZIP 文件结构与伪加密:理解 ZIP 文件的加密标志位原理,掌握手动修改十六进制和工具修复两种方法
- 简单加密解密:掌握异或加密的已知明文攻击方法,能独立编写 Python 解密脚本
- Base 系列编码:能快速识别 Base16/32/64 编码特征,完成多层编码的逐层解码
- 工具使用:熟练使用 010 Editor、CyberChef、Python 等 CTF 常用工具
2. 问题与解决
- 问题 1:zip 伪加密修改标志位后仍无法解压解决:检查中央目录头的标志位,确保两个结构的标志位一致,或用
zip -FF命令自动修复 - 问题 2:异或加密密钥破解错误解决:验证密钥与
flag{的异或结果,确保前 5 字节完全匹配,避免字节顺序错误 - 问题 3:Base 编码多层嵌套解码顺序错误解决:用 CyberChef 的
Magic模块自动识别,或按 Base64→Base32→Base16 的顺序尝试
3. 学习心得
CTF 入门题目的核心是 **“特征识别 + 工具使用”**:
- zip 伪加密的核心是文件结构特征,异或加密的核心是 flag 格式的已知明文,Base 编码的核心是字符集特征
- 工具是 CTF 解题的核心生产力,熟练使用 CyberChef、十六进制编辑器等工具,能大幅提升解题效率
- 解题思路的关键:先分析题目名称和附件特征,再对应知识点,最后用工具验证,避免盲目尝试
五、附录:核心工具使用说明
1. 010 Editor 修改 zip 伪加密
- 打开 zip 文件,按
Ctrl+F搜索50 4B 03 04(本地文件头魔数) - 定位魔数后第 4-5 字节,将
01 00修改为00 00 - 按
Ctrl+S保存文件,重新解压即可
2. CyberChef 多层 Base 解码
- 打开 CyberChef 官网(https://gchq.github.io/CyberChef/)
- 在
Input框输入编码字符串 - 在
Operations中搜索From Base64、From Base32、From Hex,拖入Recipe框 - 点击
BAKE,自动解码得到明文
3. Python 异或解密脚本
python
运行
# 通用异或解密脚本(单字节密钥)
cipher = input("请输入密文(十六进制):").strip()
key = int(input("请输入密钥(十六进制,如0x7A):"), 16)
cipher_bytes = bytes.fromhex(cipher)
plain_bytes = bytes([b ^ key for b in cipher_bytes])
print("解密结果:", plain_bytes.decode('utf-8', errors='replace'))
六、参考文献
- ZIP 文件结构官方规范:https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
- CyberChef 官方文档:https://gchq.github.io/CyberChef/
- CTF Wiki 密码学入门:https://ctf-wiki.org/crypto/introduction/
- FSCTF 2023 官方 Writeup:https://github.com/FSCTF/2023
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)