• 操作系统:Kali Linux 202x.x / Windows 11
  • 核心工具
    1. 010 Editor / HxD(十六进制编辑器,用于修改 zip 文件结构)
    2. CyberChef(在线 / 本地编码解码、加密解密工具)
    3. Python 3.x(自定义脚本解密)
    4. 7-Zip / WinRAR(zip 文件解压测试)
    5. 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,定位两个关键标志位:

  1. 本地文件头标志位
    • 本地文件头以50 4B 03 04(ZIP 文件头魔数)开头,魔数后第 4-5 字节即为通用位标志
    • 伪加密文件此处通常为01 00(小端序,第 0 位为 1,标记加密)
  2. 中央目录头标志位
    • 中央目录头以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仅包含数字和大写字母,长度为偶数
Base32A-Z, 2-7仅包含大写字母和数字 2-7,长度为 8 的倍数,末尾补=
Base64A-Z, a-z, 0-9, +, /包含大小写字母、数字、+//,末尾补=
3. 解题步骤
步骤 1:下载附件,获取编码字符串

从学习通下载对应题目文件,读取编码字符串(示例):ZmxhZ3tiYXNlX2VuY29kaW5nX3NpZ25hdHVyZV9pc19lYXN5X3N3cHVjdGYyMDIzfQ==

步骤 2:识别编码类型,逐层解码
  1. 第一层:Base64 解码字符串包含=补位、大小写字母,符合 Base64 特征,用 CyberChef 的From Base64模块解码,得到:flag{base_encoding_signature_is_easy_swpuctf2023}(若为多层编码,继续下一步)
  2. 第二层:Base32 解码(若需要)若第一层解码后仍为乱码,且符合 Base32 特征,用From Base32解码
  3. 第三层:Base16 解码(若需要)若为纯十六进制字符串,用From Hex解码
  4. 反向验证:若正向解码失败,尝试反向顺序(如 Base16→Base32→Base64)
步骤 3:工具自动化解码(CyberChef)

在 CyberChef 中拖入From Base64From Base32From Hex模块,自动逐层解码,直到得到可读的 flag 格式:flag{swpuctf_2023_autumn_base_signature_xxxxxx}(示例格式,实际以题目为准)

步骤 4:验证 flag

将解码得到的 flag 提交至平台,验证正确性。

4. 关键知识点总结
  • Base 编码的核心特征:字符集、补位符=、长度规律,可快速识别编码类型
  • 多层编码的常见顺序:Base64 嵌套最频繁,其次是 Base32、Base16
  • 工具技巧:CyberChef 的Magic模块可自动识别编码并解码,适合签到题快速解题

本次实训完成了 3 道 CTF 入门级密码学 / 文件结构题目,掌握了以下核心技能:

  1. ZIP 文件结构与伪加密:理解 ZIP 文件的加密标志位原理,掌握手动修改十六进制和工具修复两种方法
  2. 简单加密解密:掌握异或加密的已知明文攻击方法,能独立编写 Python 解密脚本
  3. Base 系列编码:能快速识别 Base16/32/64 编码特征,完成多层编码的逐层解码
  4. 工具使用:熟练使用 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 伪加密

  1. 打开 zip 文件,按Ctrl+F搜索50 4B 03 04(本地文件头魔数)
  2. 定位魔数后第 4-5 字节,将01 00修改为00 00
  3. Ctrl+S保存文件,重新解压即可

2. CyberChef 多层 Base 解码

  1. 打开 CyberChef 官网(https://gchq.github.io/CyberChef/
  2. Input框输入编码字符串
  3. Operations中搜索From Base64From Base32From Hex,拖入Recipe
  4. 点击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'))

六、参考文献

  1. ZIP 文件结构官方规范:https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
  2. CyberChef 官方文档:https://gchq.github.io/CyberChef/
  3. CTF Wiki 密码学入门:https://ctf-wiki.org/crypto/introduction/
  4. FSCTF 2023 官方 Writeup:https://github.com/FSCTF/2023
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐