2026年“美亚杯”CTF专题"

admin 2026-10-16 05:39:34 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

2026年“美亚杯”CTF专题

原创

小谢
小谢

小谢取证

2026年10月1日 15:34
福建

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

AI 取证实战 · 第 21 期

美亚杯 CTF 专题:五届 88 道隐写与密码学题全拆解

先讲清概念,再按届拆题——图片隐写、编码链、古典密码、加密容器与逆向解密,以及真题里真正用到的工具与用法

这是一篇专题长文,建议收藏后按章节看:第二章是零基础概念(含形象类比),第三至七章按届拆解题思路,第八章盘工具用法,第九至十一章给你重复考点、易错点和一张能力自测表。全文所有题目都标了届次+题号,可直接回题解原文核对。

一、五届 88 道 CTF 题:一张表看清它的分量

美亚杯办到第十一届,虚拟货币是一条明线,CTF(Capture The Flag 式的解谜考点)是一条暗线。它不像手机取证那样成建制地出题,而是散落在各个检材里:一张照片、一个压缩包、一段流量、一个 exe,你以为在考取证,其实在考解码。

我把 2021—2025 五届个人赛与团体赛的公开题解逐题过了一遍,凡是考点落在隐写、编码、密码学、逆向解密上的题全部挑出来——一共 88 道。这篇文章做三件事:先讲清概念,再把 88 道题按届拆开讲思路,最后把重复考法、易错点和能力清单汇总成表。

i 这篇的统计口径

只统计考点本身落在隐写/编码/密码学/逆向解密上的题,一共 88 道,分三类:图片与文件隐写 42 道(含二维码、EXIF 元数据、尾部附加、备用数据流、白字隐写、音频倒放)、密码学与编码 33 道(含古典密码、编码链、哈希识别、现代加密算法、加密容器与密码来源)、逆向解密 13 道(程序绕过 + 解密)。
只看哈希值(MD5/SHA256)当标识符的题、时间戳换算、硬盘分区分析、纯网络协议字段题,都不计入——那些是取证常规操作。
另有 2025 团体赛第 47 题(TrueCrypt 容器)题解中未单列,不计入 88 道,正文第七节会单独说明。
每一题都标了届次与题号,可以直接回题解原文核对。

届次 个人赛 团体赛 小计 当年的 CTF 焦点
2021 第七届 1 题 Q36 5 题 Q25/Q27/Q28/Q29/Q43 6 二维码开始出现;PHP 编码链(gzinflate + base64);勒索病毒的文件扰乱方式
2022 第八届 3 题 Q21/Q23/Q29 3 题 Q1/Q17/Q18 6 音频倒放首次出现;RSA 公私钥文件识别;EXIF 被篡改的照片
2023 第九届 1 题 Q59 11 题 Q55/Q56/Q78—Q79/Q83/Q85/Q88—Q92 12 OpenStego 图片隐写 + openssl AES 解密接力;Playfair 古典密码;iTunes 备份密码爆破
2024 第十届 9 题 Q19/Q45/Q72/Q74/Q76—Q80 14 题 Q19/Q42—Q48/Q52/Q65/Q67—Q68/Q129—Q130 23 PBKDF2 + AES 加密脚本逆向解密(连打 7 题);exe 逆向 patch 绕过登录
2025 第十一届 14 题 Q30/Q35—Q36/Q40/Q63—Q66/Q69/Q80—Q81/Q84—Q85/Q91 27 题 Q2—Q4/Q98/Q161—Q164/Q166/Q168/Q214—Q215/Q246—Q251/Q255—Q264 41 PDF 白字隐写、图片尾部隐写 + 凯撒 + 位移推导;PDFStego 工具;SecretSeed.exe 逆向解 AES

✓ 读表先记一个结论

CTF 题在五届里的曲线是 6 → 6 → 12 → 23 → 41,一路往上,而且 2024、2025 两届占比明显抬升。早期的 CTF 题是「送分小点」(扫个二维码、认个哈希长度),2024 之后变成「一整个检材主线」——2025 年甚至用 9 道题围着一个 SecretSeed.exe,从找账号密码一路做到逆向解开助记词。

再看三类题的分布,能看出美亚杯的口味:图片与文件隐写 42 道(最多,且几乎每届都考)、密码学与编码 33 道(古典到现代都考)、逆向解密 13 道(集中在最近两届)。

换句话说:隐写是基本盘,密码学是提分项,逆向是 2024 年之后新增的大分模块。如果你只准备一个方向,优先把隐写和编码练熟——它占了近一半。

二、先补齐概念:用最土的话讲一遍

这一章不涉及任何检材,全是概念。CTF 题最气人的地方在于:你不是不会操作工具,而是看到一串字符不知道它是什么。先把下面六组概念过一遍,再去看题目,会顺很多。

2.1 四个最容易混的词:隐写、编码、加密、哈希

词 一句话理解 形象类比 关键特征
隐写 Steganography 把信息藏在别的东西里,让别人不知道有信息 把纸条塞进一本厚书里,书还是那本书 载体看不出异样;目的不是让人看不懂,而是让人不知道
编码 Encoding 换一套表示方法,没有钥匙,谁都能还原 把中文翻译成拼音,规则公开 Base64、URL 编码、十六进制;看到就解,秒出
加密 Encryption 把信息锁起来,要有钥匙才能看 上锁的箱子,钥匙在谁手里谁才能开 AES、RSA、凯撒;有密钥参数,错了就是乱码
哈希 Hash 单向 的指纹,指不能倒推回人 指纹——能证明是你,但从指纹画不出你 MD5/SHA 系列;只能比对,不能「解密」

! 这组区分为什么重要

2024 团体赛 Q52 就是拿这四个词做文章:题目问「Ben 用什么技术保护他的 webshell 脚本」,标准答案是 代码混淆,而不是很多人以为的「加密」或「隐写术」。如果你分不清这三个词的区别,这道题就会凭感觉选错。

2.2 文件也有「身份证」:文件头与魔数

每个文件的开头几个字节是固定的,叫文件头(File Signature / Magic Number)。系统靠它判断文件到底是什么,而不是靠扩展名。改扩展名是最廉价、也最常用的伪装手段。

文件类型 文件头(十六进制) ASCII 特征
JPEG 图片 FF D8 FF ———
PNG 图片 89 50 4E 47 ‰PNG
PDF 25 50 44 46 %PDF
ZIP / Office 2007+ / APK 50 4B 03 04 PK..
RAR 52 61 72 21 Rar!
GIF 47 49 46 38 GIF8
老版 Office(97-2003) D0 CF 11 E0 ———

2022 个人赛 Q29 就考了这个:一个扩展名写着 .pdf 的文件,文件头却是 D0 DF 11 E0——它其实是 2007 版之前的老 Office 文档(OLESS 结构),跟现在常见的 OOXML 格式完全不是一回事。先看头,再看名,这是做这类题的第一反应。

2.3 EXIF:照片自带的「体检报告」

手机拍照时,会往图片里写一组元数据:拍摄时间、相机型号、镜头、光圈快门 ISO、GPS 经纬度、方向(Orientation)、甚至软件名。这组数据叫 EXIF。它是美亚杯最高频的考点之一,五届都在考。

  • 拍摄时间

:2025 个人赛 Q66 问 IMG\_0022.JPG 的创建时间,答案直接读 EXIF 的 2025:05:16 11:33:15。
* 相机型号

:2024 个人赛 Q45(LG-H930)、2025 个人赛 Q63(iPhone SE 3rd generation)都是从 EXIF 里读。
* GPS 经纬度

:2024 团体赛 Q129、2025 个人赛 Q40 都是给坐标选项让你挑。
* 方向 Orientation

:2025 个人赛 Q65,EXIF 写 Right top,意思是「手机右边框在顶部」,换算过来是逆时针旋转 90 度。

! 最容易踩的坑:EXIF 里没有怎么办

2025 个人赛 Q64 问 IMG\_0005.JPG 的坐标,题解明确写着:「源文件中的 EXIF 信息不包含 GPS 信息,需要在 Photos.sqlite 中查看」。也就是说,EXIF 不是唯一的元数据源——iOS 会把一份副本写进 Photos.sqlite 的 ZEXTATTR 表(对应字段 ZLATITUDE / ZLONGITUDE),2025 个人赛 Q40 更是要靠对比同批照片才能判定「ZEXTATTR 表里的才是真实值」。只翻 EXIF 就放弃,这两题都会丢分。

2.4 二维码:最朴素的「图片藏信息」

二维码本身不是隐写,但把二维码印在照片里、或者当成素材藏在图片堆里,就是隐写题的常见形态。美亚杯从 2021 考到 2025,一年没落:

  • 2021 团体赛 Q29:按拍摄时间过滤图库,扫二维码得到「忠誠勇毅」。
  • 2023 团体赛 Q83:用激光雕刻机打印过二维码的文件名(要查打印机 App 的数据库)。
  • 2025 团体赛 Q98:NAS 里同名文件中的二维码,资讯值是一串钱包地址。
  • 2025 团体赛 Q214:问到有几个 jpg 里的二维码藏着指定字符串——答案是 4 张,需要顺着路径把同类图片全找出来,是「数量题」,漏一张就错。

2.5 古典密码:凯撒与 Playfair

古典密码是用纸笔就能解的密码,美亚杯考过两种:

密码 原理 形象类比 美亚杯出处
凯撒密码 Caesar 每个字母按固定位数平移(+3 就是 A→D) 把字母表的转盘整体拧几格 2025 团体赛 Q215、Q255
Playfair 把字母两两分组,按 5×5 方阵做替换 两个人对着方阵表报坐标 2023 团体赛 Q89

凯撒密码在 2025 年考了两次,而且都不是「傻解」:Q215 是先用隐写取出文本、再用 CyberChef 做凯撒解密;Q255 更绕——题干给了一条「+3」的线索,但另外还隐含了一个「-5」(因为 MIDI 里 60 代表 A,而 ASCII 里 A 是 65,两者差 5),两个位移叠加才是真正的位移。这就是美亚杯的典型手法:它不考你会不会用工具,考你能不能把多个线索串成一条。

2.6 现代密码:三件套 + 两个参数

现代加密的题,考来考去是三件套和两个参数:

概念 一句话 出现在哪
对称加密 AES 加密解密用同一把钥匙;最常见的是 AES-CBC、AES-GCM 2023G-Q92、2024G-Q42/Q43/Q65、2025G-Q260/Q261
非对称加密 RSA 公钥加密、私钥解密 ,两把钥匙成对出现 2022G-Q17、2022G-Q18
密钥派生 PBKDF2 把用户密码反复摔打变成一把真正的钥匙(防暴力破解) 2024G-Q42/Q45/Q46
初始向量 IV 让相同明文每次加密结果都不同;通常放在密文最前面 2024G-Q43
盐值 SALT 防止相同密码算出相同钥匙;跟着密文一起存 2024G-Q44

2024 团体赛 Q42—Q48 是这条线的完整示范:给了加密脚本,要你先读懂「文件前 16 字节是 IV、接着 32 字节是 SALT、后面才是密文」的结构,再用 PBKDF2 按脚本参数重算 key,最后解出 Excel。读懂脚本比会点工具更重要——这一点第八、九章还会反复说。

2.7 加密容器与压缩包:两道门

题目里出现的「加密文件」通常是两种东西之一,处理方式完全不同:

  • 压缩包加密(ZIP/RAR/7z)

:密码错就解不开。但别急着跑字典——先看题干有没有直接给、检材别处有没有、选项里是不是就摆着候选,几条路都不通才上字典(完整顺序见 8.5 节)。2025 团体赛 Q246 是那种真需要爆破的:先试六位数字失败,改用 Kali 自带的 rockyou.txt 才跑出 pass1234;2023 团体赛 Q85 的 iTunes 备份密码则要先 itunes_backup2hashcat 提取哈希,再交给 Hashcat 跑数字字典;图形化路线则用 Passware Kit 直接吃 Manifest.plist,两条路都能跑到 123456。
* 加密容器(TrueCrypt/VeraCrypt/BitLocker/加密 dmg)

:它本身是一个虚拟磁盘,挂载后才能看到里面的文件系统。2025 个人赛 Q84 的 xcontainer 加密算法是 AES(Twofish),2025 团体赛 Q47 用的是 TrueCrypt,2023 团体赛 Q56 是 macOS 的加密 .dmg。注意两点:一是容器题经常配一个密钥文件(不是密码),比如 2025 个人赛 Q84 的 vera_key;二是解容器的密码同样多数来自线索——2024 团体赛 Q68 的 BitLocker 密码,就是上一题从图片尾部解出来的那个 Word 里写着的。

2.8 逆向题的三个固定动作

2024 之后的逆向题,解法高度套路化,就三个动作:

  • ① 搜字符串

——找 Invalid username or password 这类提示语,它附近十有八九硬编码着正确的账号密码(2025 团体赛 Q256/Q257 就是这个思路,直接捞到 manson 和 manson@MFI)。
* ② 看条件跳转

——程序判断「能不能解密」靠的是一个标志位,汇编层面就是一条 JZ/JNZ(2025 团体赛 Q262 问的正是这个,答案是 JZ)。
* ③ 打补丁

——把跳转改成不跳(patch 成 NOP),或者把那个标志位改成非零,程序就乖乖把明文吐出来(2024 个人赛 Q74/Q79、2025 团体赛 Q260 都是这么做的)。

还附带一个必考的小算术:地址换算偏移量。IDA 里看到的地址是从镜像基址算起的,2024 个人赛 Q78 的 byte_14000808C 减去基址 0x140000000,得到偏移 0x808C;2025 团体赛 Q264 同理,0x140005704 - 0x140000000 = 0x5704。看到 0x140 开头的地址,先减基址,这就是答案。

三、2021(第七届):二维码、编码链与勒索病毒

第七届的 CTF 题只有 6 道,形态很朴素,但奠定了几条沿用至今的考法:二维码从这一届开始出现,编码链从这一届开始考,文件被加密扰乱也从这一届开始问。

3.1 二维码的第一次登场(团体赛 Q29)

题目:「特普的电话中一张于 2021 年 09 月 30 日 10:45:12 拍摄的相片包含以下哪些字?」选项是「精忠/报国/忠诚/勇毅」。

题解只写了一句:「在图库中过滤时间,扫描二维码得到:忠誠勇毅」。看似简单,但这里面有三个动作,缺一不可:

  • 按时间过滤

——照片那么多,先锁定时点;时间本身来自 EXIF 或相册数据库。
* 把原图导出

——不能在缩略图上扫,缩略图往往裁掉了边缘。
* 扫码

——题目给的是繁体字选项,实际扫出来也是繁体「忠誠勇毅」,答题时要照着题目的字形写,简繁转换有时会丢分。

3.2 PHP 编码链:gzinflate(base64\_decode())(团体赛 Q25/Q27/Q28)

这一组题问的是网页服务器上一个可疑档案:译码函数是什么、解压后脚本有什么功能、用的什么解压方法。标准答案是一条 PHP 里的经典组合:

gzinflate(base64\_decode($x))

拆开看就是两层:先 Base64 解码,再 gzinflate 解压。这是 webshell 免杀最常用的手法——Base64 把二进制变可打印字符,gzinflate 再压一层让特征码更难匹配。做题时的顺序是从内到外:先解 base64,再解压,解出来的才是一段可读脚本。

✓ 这类题的通用解法

看到一长串以 = 结尾的可打印字符,先试 Base64;解出来如果还是乱码但看得出有规律(比如以 eJ 开头),那就是 zlib 压缩,丢进 CyberChef 加一个 Raw Inflate 步骤即可。PHP 里的 gzdecode/gzinflate/gzuncompress 三个函数对应三种不同的压缩方式,本题答案是 gzinflate,不要选 gzdecode——这是最常见的错项。

3.3 勒索病毒是怎么「扰乱」文件的(团体赛 Q43)

题目问:「特普的计算机可能中了病毒,病毒扰乱文件方法是甚么?」选项是 +3 / XOR5 / +4 / −4。

这类题的判断方法很直接:拿一个被破坏的文件和一个已知原文比对。如果每个字节都加了同一个数,就是「位移加密」(+3 表示每个字节加 3);如果每个字节都跟同一个值做了异或,字节会在两个「镜像位置」之间跳动,那就是 XOR。

手法 字节变化特征 恢复方式
位移(如 +3) 整体偏移,可打印字符会整体「挪」到另一个区间 逐字节减 3
异或 XOR 5 字节成对跳动,同一位置异或两次恢复原值 再异或一次同一个值

2021 年这一题只是问「用了哪种方法」,到了 2024、2025 年就升级成了「自己写出解密脚本把它还原出来」——同一个知识点,难度两级跳。

3.4 原图、缩略图与哈希(个人赛 Q36)

题目给了一张 IMG_0056.HEIC 和一张 5005.JPG(附 MD5),问它们「看似同一张相片,在电子数据取证分析下哪个描述正确」,答案是多选 BCD。考点是 iOS 的图片机制:

  • HEIC 是原图

,JPG 是系统生成的缩略图(在 iOS 里通常以 5005.JPG 这类固定名出现在相册数据库目录下)。
* 两者哈希必然不同

——格式不同、压缩参数不同,内容一样也不影响哈希不同。
* 它们存在不同的 .db 里

,因为一个是相册资产、一个是缩略图缓存。

这个考点在 2024 个人赛 Q19 又原样考了一次(这次是 IMG_0008.HEIC 与 5005.JPG)。看到「5005.JPG」这个固定名,直接想到 iOS 缩略图,是能省时间的一条经验。

3.5 这一届的易错点

  • 扫出来的字符要照题目给的字形抄(繁体就是繁体),别自己转简体。
  • gzinflate

与 gzdecode 只差一个词,但答案只有一个。
* HEIC 与 JPG「同一张图」不代表哈希相同——哈希比的是字节,不是画面。
* 位移加密与异或加密的选项经常同时出现,先比对字节再选,不要凭印象。

四、2022(第八届):音频倒放、RSA 密钥与「被改过的照片」

第八届也是 6 道,但花样变了:出现了音频隐写,出现了非对称加密的密钥文件,还第一次考了「照片的元数据被人动过」。

4.1 音频倒放:把声音倒过来听(团体赛 Q1)

题目:「在朗尼手机 2022 年 9 月 30 日的 WhatsApp 对话里,有一段音讯提到王景浩会给朗尼现金多少作为租用 VPN 的租金?」题解写得很生动:「呃呃,写到这题属实绷不住了。倒放是吧。」并给了一个在线音频倒放工具。答案是 HKD 3000。

这就是音频隐写最基础的形态:信息就在音频里,但被倒着录了进去,正常播放听不出人话,倒放就清楚了。同类手法还有:把信息藏在某个频段(要频谱图)、藏在双声道的一侧、藏在静音段里。

✓ 音频题的三板斧

① 倒放(很多工具一键完成);② 看频谱图——把音频丢进 Audacity 切「频谱图」视图,藏进去的文字或图形会直接显形;③ 看声道——有些题只用左声道或右声道携带信息。本题只要第一招,但后面两招在其它赛事里很常见。

4.2 RSA 密钥文件长什么样(团体赛 Q17/Q18)

这一组题给了一个 Data 文件夹,里面有 P1~P4 四个密钥文件,问:存的是哪一种密钥文件、被加密的档案用了哪种密钥类型。

题解的做法很有参考价值:文件夹里还有一份 Notes 教程和一个 rtf 文档,说明当事人正在自学加密,教程里给了生成密钥的 Python 代码:

import rsa public\_key, priv\_key = rsa.newkeys(1024) with open(filename, 'wb') as f:     if filename == 'P1':         f.write(public\_key.save\_pkcs1('PEM'))     elif filename == 'P2':         f.write(priv\_key.save\_pkcs1('PEM'))

代码里出现 PEM,所以第一问答案是 pem;而 P1(公钥)与 P2(私钥)是一对,加密档案用的是 RSA。

更值得学的是题解的验证思路:「找到 private 和 public 关键字的两组文件,然后依次加密解密找到匹配的一组」——也就是把公钥加密、私钥解密真的跑一遍,配对成功的才是一对。不要靠文件名猜,要跑一遍验证。

密钥文件格式/类型 特征 用途
PEM 文本形式,以 -----BEGIN ... KEY----- 开头结尾 最常见的密钥交换格式
Symetric / AES / Twofish 对称密钥,只有一把钥匙,加解密都用它 速度快,常用于文件加密
RSA / PGP 非对称,公钥私钥成对 加解密、签名、邮件加密

4.3 Office 文档也会加密(个人赛 Q21)

题目:「李大辉手机里有一个 order.xlsx 的档案被加密了,解密钥匙是」,四个选项是 Nov2022!/2022_Nov!/20221101/P@ssw0rd!,答案 Nov2022!。

这道题的密码既不是猜出来的,也不是爆破出来的,而是写在检材里的便签上——把当事人手机里的便签/记事翻一遍,密码就摆在里面。题解本身只列了选项与答案、没有展开过程,所以性质要说清楚:它属于「密码藏在另一份检材里」这一类,不是「考你熟不熟悉常见口令的命名习惯」。

这一点很关键。四个选项 Nov2022!、2022_Nov!、20221101、P@ssw0rd! 形态高度相似,如果按「哪个更像常见弱口令」去推,很容易在 A 和 D 之间反复摇摆;而只要先在检材里翻到那张便签,四个选项的干扰就全部消失了——先找线索,再谈其他。

Office 文档的加密(97-2003 的 RC4、2007+ 的 AES)在取证里有三条路,按这个顺序试:① 题干/案件描述里直接给;② 从检材里找线索(便签、备忘录、聊天记录、壁纸、文档属性);③ 以上都落空,才用 Passware Kit/Hashcat 这类工具去跑。美亚杯里前两条占多数,跑字典反而是最后手段——完整判断顺序见第八章 8.5 节。

4.4 被改过的照片(个人赛 Q23/Q29)

第八届个人赛有两道很典型的「元数据题」:

  • Q23

:问「有一张由该手机拍的照片,照片的元资料曾被修改,这张照片的档案名是什么」,答案是 20220922_152622.jpg。判断方法是对比文件名里的时间与 EXIF 里的时间是否一致——文件名说 9 月 22 日,EXIF 却是另一个时间,就说明被动过。
* Q29

:问「王晓琳发给林浚熙的 PDF 档案的文件签名是什么」,答案是 D0 DF 11 E0。前面第二章讲过,这是老版 Office 的 OLESS 结构——扩展名写着 PDF,内容根本不是 PDF。

! 这两题为什么容易错

Q23 的坑在于:文件名的时间是「看起来」的时间,EXIF 才是相机写的。两者不一致,就说明有人改过其中一个(通常是文件名,因为它更容易改)。Q29 的坑在于:只看了扩展名就下结论。做题顺序永远是「先看文件头,再看扩展名」,这两个顺序反了,题就错了。

4.5 这一届的易错点

  • 音频听不出人话,先试倒放,不要急着判定「没有信息」。
  • 密钥文件格式题:先读文件内容找关键字(PEM/public/private),别猜。
  • 文件签名题:永远先看头几个字节,扩展名只能当参考。
  • EXIF 时间与文件名时间冲突时,以 EXIF 为准,并把它当作「被篡改」的证据。

五、2023(第九届):OpenStego 与 openssl 的接力

第九届的 CTF 题涨到 12 道(其中 11 道在团体赛),而且第一次出现了「一条链走到底」的设计:先从一个 bmp 图片里把密码隐写取出来,再用这个密码去解密一个 Word 文档。这一届还考了 Playfair 古典密码,以及五届里少数真正需要爆破的 iTunes 备份密码。

5.1 base64 编码链里的一个坑(团体赛 Q55)

题目给了四个文件 f.rtf、a.rtf、f1.txt、a1.txt,要求给出它们的内容。线索藏在 zsh 的 shell 历史里:

echo f.rtf | base64 > key-a.txt echo a.rtf | base64 > key-b.txt textutil -convert txt -stdout f1.rtf | base64 > key-c.txt textutil -convert txt -stdout a1.rtf | base64 > key-d.txt

关键差异在有没有 textutil 这一步:

输出文件 实际内容 解码后得到
key-a.txt Base64(字符串 \"f.rtf\") 文件名本身 f.rtf——不是文件内容
key-b.txt Base64(字符串 \"a.rtf\") 文件名本身 a.rtf——不是文件内容
key-c.txt Base64(f1.rtf 的正文) 真正的密钥内容
key-d.txt Base64(a1.rtf 的正文) 真正的密钥内容

! 这道题的陷阱

echo f.rtf | base64 编码的是四个字符的文件名,而 textutil -convert txt -stdout f1.rtf | base64 才是编码文件内容。题解原话:「key-a 和 key-b 存在问题,这两个文件中并不包含 f.rtf 或 a.rtf 文件内容」。看到 shell 历史里的编码命令,先确认它编码的是「文件名」还是「内容」——这是这道题唯一的难点,也是最容易忽略的地方。

5.2 OpenStego:图片里藏了一段文字(团体赛 Q90/Q91)

这一组题是 2023 年最完整的一条隐写链。题目问:「李哲图曾执行一个程序在 key.bmp 的图片文件中隐藏一段文字,请问他是用哪一个程序」,选项有 Steganography Studio、OpenStego、Steghide、S-Tools,答案 OpenStego。

题解的取证路径很清楚:在李哲图的电脑里找到 /Users/chris/Downloads/openstego-0.8.6.zip——工具包本身就躺在检材里;同时在 /Message/input/Message.txt 里存有隐写用的密码 P@ssw0rd。

OpenStego 是最常用的开源隐写工具之一,基本用法就三步:

  • ① 选模式

:Hide Data(藏数据)或 Extract Data(取数据)。
* ② 选载体

:载体是图片(BMP/PNG 最稳,JPEG 有损压缩容易破坏数据)。
* ③ 填密码

:密码正确才能取出信息。

✓ 为什么是 BMP

本题的载体是 key.bmp。隐写算法常改到像素的最低位(LSB),而 JPEG 是有损压缩,重新编码会把低位改回去,所以隐写多用 BMP/PNG。看到题目里的载体是 bmp 或 png,就该往 LSB 隐写上想。

5.3 openssl 解密 Word:隐写出来的密码派上用场(团体赛 Q92)

承上题,隐写取出的 P@ssw0rd 就是用来解密一个加密 Word 的。线索来自 PowerShell 的历史文件(PSReadLine 记录):

openssl enc -aes-256-cbc -salt -a -e -in Data.docx -out encrypted.docx runas /user:Administrator cmd

反向操作就是解密:

openssl enc -aes-256-cbc -salt -a -d -in \"encrypted.docx\" -out \"decrypted.docx\"

参数逐个拆开:-aes-256-cbc 是算法(AES-256-CBC)、-salt 表示加了盐、-a 表示输入输出用 base64、-d 是 decrypt(解密,加密是 -e)。把 -e 改成 -d,其余的照抄,就是解密命令——这是这类题最省力的做法,不需要自己推导参数。

解出来的 Word 里要回答「李美玲的年龄」,答案是 25。整条链是这样的:找工具包 → 找到隐写密码 → OpenStego 取出文本 → 用文本当密码 openssl 解密 → 读答案。

i 这条链子的意义

2023 年的这道题,把「隐写」和「加密」串成了一条线。两年后的 2025 年,美亚杯把这条线拉得更长(PDF 白字隐写 → 压缩包密码 → 容器挂载 → 助记词),但基本骨架没有变。练熟这一届的链条,2025 的题就是加长版。

5.4 Playfair 古典密码(团体赛 Q89)

题目线索藏在一张命名为 use this.png 的图片里——它其实是一张 Playfair 加密的方阵图加上密文。题解给了解密四步:

1) Split : RN RY EY PS FL RZ SB NT MW MW 2) Decode: PA SX SW OR DF OX OT BA LX LX 3) Merge : PASXSWORDFOXOTBALXLX 4) Remove Bogus: PASSWORDFOOTBALL

最后推测密码为 FOOTBALL(题解也补了一句「爆破跑字典也能很快跑出来」)。Playfair 的规则是两两分组、按 5×5 方阵做替换,解密结果里会插入无意义的填充字母(本题的 X),要先合并再删掉填充字符。

古典密码 分组方式 解密要点 工具
凯撒 Caesar 单字母 试 26 种位移,或按线索算位移量 CyberChef 的 ROT13/凯撒
Playfair 两字母一组 需要 5×5 方阵;注意填充字符 手工按方阵推解(题解即手算四步)
维吉尼亚 Vigenère 单字母 需要关键词 CyberChef(Vigenère Decode)
栅栏 Rail Fence 按行重排 试栏数 CyberChef

5.5 哈希识别与 iTunes 密码爆破(团体赛 Q79/Q85)

Q79 问 true-ubuntupassword.txt 里的哈希是哪一种,答案是 MD5——题解的理由只有一句:「长度 32 位(MD5)」。所以哈希长度表是必须记住的:

算法 长度(十六进制字符)
MD5 32
SHA-1 40
SHA-256 64
SHA-512 128

Q85 更进一步:「陈大昆的手机被一个 iTunes backup 密码加密保护,这个密码是什么」,答案是 123456。注意这是五届里少数需要真正爆破的题,而且题干已经把范围缩小了——题解写「根据答案格式,密码应该由数字组成」,先被缩到数字,才上的数字字典,不是漫无目的地跑。完整流程是:

  • 从 Manifest.plist 里提取哈希——用工具 itunes_backup2hashcat。
  • 得到形如 $itunes_backup$*10*...*10000*...*10000000*... 的哈希串(注意里面的迭代次数参数)。
  • 丢给 Hashcat,配数字字典(常见弱口令 + 生日)。
  • 跑出密码 123456。

✓ 这一步为什么不能跳过工具

iTunes 备份的密码不是明文存的,而是经过多轮 PBKDF2 派生后的哈希。所以必须先把哈希格式转成 Hashcat 认识的格式,再爆破。直接上手猜密码是没用的——这是「先转换格式、再交给爆破工具」的标准两步走。嫌转格式麻烦的话,图形化工具能一步把这两件事做完。

上面这条是命令行路线。同一道题还有图形化路线:用 Passware Kit 直接把 Manifest.plist 导进去,选好字典或掩码就能跑,不需要先转哈希格式。2025 个人赛的题解就是把两者并列写的:「可以通过 Passware 或 HashCat 等密码爆破工具结合弱口令字典或 4 位数字掩码进行爆破」——是并列的两把工具,不是谁替代谁。两条路的关系有点像螺丝刀和电钻,都拧得动螺丝,看你手上有什么、赶不赶时间:

路线 怎么做 什么时候用它
命令行 :itunes_backup2hashcat + Hashcat 先从 Manifest.plist 提取哈希、转成 Hashcat 认识的格式,再跑字典或掩码 想精确控制参数、要把过程写进报告时
图形化 :Passware Kit 直接导入 Manifest.plist(或加密文档、加密容器),选字典/掩码即可开跑 考场求快、不想记格式与 -m 编号时

本题(Q85)题解走的是命令行那条;图形化那条是你实操里可以走的替代路径,答案一样是 123456。

拿这一届的另一处密码对照一下就很清楚:Q88 从 ADS 里取出的内容也是一个哈希(MD5),用的办法却是在线查表,题解原话是「离线环境下,大部分的弱口令字典应该也都爆不出来吧」。同样是「以哈希的形式出现」,一个查表、一个爆破——判断顺序统一写在第八章 8.5 节,别见到哈希就上字典。

5.6 备用数据流与邮件附件(团体赛 Q78/Q88/Q83)

Q78 问:「潘志辉应用了哪一个技术把 true-ubuntupassword.txt 隐藏在 ubuntupassword.txt 中」,答案是 备用数据流(Alternate Data Stream, ADS)。

这是 NTFS 文件系统的一个特性:同一个文件名下可以挂多股「数据流」(形如 文件.txt:隐藏流名),用普通打开方式只看得到默认的那一股。形象点说,像一本书有夹层——在外层书名下还藏着一层内容。

另两道题也值得记住:Q88 要你从 Thunderbird 的邮件存储文件里把 Base64 编码的附件提取出来再解码保存(题目答案是 New Target.rar 和 use_this.png);Q83 问激光雕刻机打印二维码用的是哪个文件,答案要从打印机 App 的数据库 com.hingin.l1.hiprint/databases/hiPrint 里查打印记录。

5.7 加密 dmg 与图片元数据(团体赛 Q56/个人赛 Q59)

Q56 考的是 macOS 的加密磁盘镜像:从 zsh 历史里看到两条 hdiutil 命令,create -encryption -stdinpass 表示「创建时要求输入密码」:

hdiutil create -encryption -stdinpass -fs ExFAT -volname funnystuff -o funnystuff.dmg -size 100M hdiutil create -encryption -stdinpass -fs ExFAT -volname auto -o auto.dmg -size 256M

密码则来自另外两个文件:当事人用 textutil 把 rtf 转成文本、再 Base64 存成 key-c.txt/key-d.txt。解密后得到 funnystuff 与 autogpt。题解还给了三条打开 dmg 的路径:macOS 直接挂载、hfs explorer(仅限 HFS 文件系统)、以及 encrypteddmg 的 readencrcdsa 脚本——本题因为文件系统是 exFAT,只能用第三种。

个人赛 Q59 则是 iOS 相册数据库题:问 IMG_0008.HEIC 的哪项描述是错的(答案 ABCD)。考点是 Photos.sqlite 里那几张关联表(ZASSET/ZEXTATTR)分别记录了拍摄来源、是否被修改、前后镜头、ISO、经纬度。图片的元数据不只在 EXIF 里,这一点第二章已经强调过,2025 年考得更狠。

5.8 这一届的易错点

  • shell 历史里的编码命令,先分清编码的是「文件名」还是「文件内容」(Q55 的全部难点)。
  • OpenStego/Steghide/S-Tools 是四个不同工具,别只认名字眼熟的——要回检材里找工具包。
  • openssl 解密:把加密命令的 -e 换成 -d,参数照抄,别自己重写。
  • 哈希识别只数长度:32=MD5、40=SHA-1、64=SHA-256、128=SHA-512。
  • iTunes 备份密码有两种跑法:命令行要先转成 Hashcat 格式,图形化的 Passware Kit 可直接导入 Manifest.plist。
  • ADS(备用数据流)是 NTFS 特性,答案是四个选项里唯一的「文件系统层面」的技术。

六、2024(第十届):读懂加密脚本,再逆向一个 exe

第十届的 CTF 题跳到 23 道,而且性质变了:不再是「解一个点」,而是「读懂一段逻辑」。这一年最有代表性的两组题,一组是给一个加密脚本让你反推解密(Q42—Q48),另一组是给一个 exe 让你 patch 掉判断(个人赛 Q74—Q80)。

6.1 加密脚本题的读法:文件结构先看清楚(团体赛 Q42/Q43/Q44)

题目给了 secretExcel.encrypted 和它的加密脚本。Q42 问「解密这个文件的第一步应该是什么」,答案是「打开加密文件并读取文件的前 16 个字节」。为什么是前 16 字节?看加密脚本的写入顺序:

salt = get\_random\_bytes(32) key = PBKDF2(password, salt, dkLen=32, count=100000000) output\_dir = os.path.dirname(file\_path) output\_dir = os.path.dirname(file\_path) cipher = AES.new(key, AES.MODE\_CBC) f\_out.write(cipher.iv)      # 先写 IV(16 字节) f\_out.write(salt)           # 再写 SALT(32 字节) f\_out.write(encrypted\_data) # 最后才是密文

所以这个加密文件的布局是三段拼接:

位置 长度 内容 对应题目
第 0—15 字节 16 字节 IV (初始向量) Q43 答案 64f4e21c1e4cc3a60137da79e75bf973
第 16—47 字节 32 字节 SALT (盐值) Q44 答案 5d5ca840accf...2efd05cc436c4a5424
第 48 字节起 剩余全部 密文 Q46 用它算 key 后解密

✓ 「第一步是什么」这类题的通解

给一个加密文件问你「第一步」,答案几乎总是「读文件头,确认参数放在哪、各占多少字节」。因为解密需要三样东西:算法、钥匙、参数(IV/SALT)。算法和参数结构都写在加密脚本里,所以先读脚本,再读文件头,顺序不能反。

6.2 三个参数分别在干什么(团体赛 Q45/Q46)

Q45 问:「如果更改 PBKDF2 的 count 参数会产生什么影响」,答案是「同时影响所需的计算性能和安全性」。题解的注解很到位:「相同算法情况下,牺牲性能提高安全性」。

参数 作用 改了会怎样 类比
算法 决定怎么锁 换了算法,密文完全不同 换一把锁
密钥 password 真正的钥匙来源 错了就解不开 钥匙
IV 让相同明文加密结果不同 缺失会导致密文可预测 每次上锁的随机「起始位置」
SALT 防止相同密码算出相同 key 缺失会导致彩虹表攻击可行 给密码撒一把盐
count PBKDF2 反复迭代次数 越大越安全,但越慢 把密码摔打很多遍才变成钥匙

Q46 要你真正算出 key 的值(答案是一串 32 字节的二进制)。做法就是照着重写一遍解密脚本、把 key 打出来:读 IV → 读 SALT → 用同样的 password 与 count 调 PBKDF2 → 得到 key。题解原话:「在解密脚本中输出密钥值即可」。拿到 key 之后 Q47/Q48 就是顺水推舟,解密出的 Excel 里查电话号码与人名。

6.3 代码混淆:一个容易选错的选项(团体赛 Q52)

题目问:「Ben 准备了几个用于黑客攻击的脚本,他采用了什么技术来保护代码」,选项是加密/代码混淆/隐写术/编译,答案是 代码混淆。

题解解释了原因:那个脚本是 weevely3 生成的 webshell,「为了免杀,大多数 webshell 都要经过混淆」。为什么不是「加密」?因为混淆后的代码本身还能被浏览器/解释器正常执行——它只是把变量名改乱、把逻辑绕弯,没有任何密钥参与。

技术 代码还能直接运行吗 有没有密钥 典型用途
加密 不能,必须先解密 有 保护数据
混淆 能 没有 免杀、防止别人读懂源码
隐写 不适用(藏的是数据不是代码) 可能有 把数据藏进载体
编译 编译后是二进制,不是源码 无 把源码变成可执行文件

! 这道题的教训

「保护代码」四个字很容易让人往「加密」上想,但判断依据是「要不要密钥才能跑」。混淆后的脚本不需要任何密钥就能执行,所以它不是加密。这是 2024 年最典型的「概念题」,也是本专题第二章那四个词的意义所在。

6.4 一张图里塞了一个 Word(团体赛 Q67/Q68)

题目问:「是什么导致了『满汉全席.jpg』和『满汉全席Secret.jpg』之间的大小差异」,答案是「档案嵌入其中」。题解的推理很干脆:「对比一下文件,明显是隐写了一个 office 文档」。

手法是尾部附加(Append):JPEG 有明确的结束标志 FF D9,在它后面再追加一段数据,图片照样能正常打开、看不出任何异常——因为看图软件读到 FF D9 就停了。

满汉全席.jpg         ← 正常图片,到 FF D9 结束 满汉全席Secret.jpg   ← FF D9 之后又跟了一个完整的 Office 文档

取出方法也很朴素:把文件扩展名改成 .zip 或 .7z 直接解压(Office 2007+ 的文档本质就是一个 zip 包),解出来就是文档。本题解出来的是一份 BitLocker 恢复密钥,还附了一行密码——这个密码紧接着在 Q68 里用于解密 SD 卡(IamRich123!)。

✓ 尾部附加题的三个信号

① 两张「同名不同大小」的图片放在一起对比——这是出题人给的最强暗示;② 用十六进制编辑器搜 FF D9,看后面还有没有数据;③ 拿 binwalk/foremost 扫一遍,看看嵌了什么。本题就是第 ① 种。

6.5 逆向一个 exe:把跳转打掉(个人赛 Q74/Q76—Q80)

第十届个人赛藏了一组完整的逆向题,围绕一个 Bitlocker.exe:它要求输入账号密码,验证通过才吐出 BitLocker 恢复密钥。一共 7 道题,正好是第二章 2.8 节那三个动作的展开。

第一步:找账号密码

答案是用户名 david1337、密码 1337david。题解说明:「先比对用户名,再比对密码」——程序里两段判断是顺序执行的,跟着判断逻辑就能读到两个硬编码字符串。

第二步:看它怎么决定「显示成功还是失败」

Q77 问程序用什么途径决定显示哪条消息,答案是「通过检查每个寄存器的值来决定跳转到不同的汇编代码区段」。题解补了一句关键细节:「代码通过检查 eax 寄存器的值来决定跳转」。这就是逆向题的通用形态——一个值 + 一条条件跳转 = 一个开关。

第三步:找到那个开关,改掉它

Q78 问「决定能否解密 BitLocker Key 的字节的内存偏移量」,答案是 0x808C。题解的推算过程值得背下来:

判断的条件来自 byte\_14000808C 它的地址是 0x14000808C,基址是 0x140000000 偏移 = 0x14000808C - 0x140000000 = 0x808C

Q79 问「拿到偏移量后该怎么用」,答案是「把该偏移量处的值改为 1(true),以启用解密过程」。题解给了两种改法:用十六进制编辑器(010 Editor、ImHex)或者用 IDA。

Q74 则从另一条路问:「如何修改汇编代码来绕过检查,达到任意输入都成功登录」,答案是「修改 TEST 指令后的跳转指令 JNE 为 NOP,使跳转指令失效」。也就是把「不相等就跳走」的那条指令直接抹掉,程序无路可跳,只能顺着走成功分支。

思路 改什么 效果 对应题
改数据 把标志位字节改成非零(1) 让程序认为「条件满足」 Q79/Q78
改指令 把 JNE 改成 NOP(空操作) 让跳转指令失效,走不到失败分支 Q74
改比较 改 CMP/TEST 的比较结果 让比较永远相等 Q74 的干扰项

i Q80 的四种解法

最后的 Q80 要给出解密后的 BitLocker 恢复密钥,题解列了四条路:① 完成 Q79 的 patch,输入账号密码直接看到;② 用 Elcomsoft Forensic Disk Decryptor(EFDD) 或 Volatility3 的 LiME 插件扫内存镜像;③ U 盘里的图片上也写着恢复密钥;④ 实在不行挨个试。「同一个答案有多个来源」是美亚杯的常见设计——做题时如果一条路走不通,先看别的检材。

6.6 图片元数据的两类考法(团体赛 Q19/Q129/Q130、个人赛 Q19/Q45/Q72)

2024 年把图片元数据考得很透,分成两小类:

小类 问什么 从哪读 具体题
拍摄信息 相机型号、GPS 坐标、拍摄地点 EXIF(或相册数据库) 团体 Q129/Q130(GPS 与地点)、个人 Q45(LG-H930)、个人 Q72(SAMSUNG SM-A4260)
来源判断 这张图是拍的、截图、还是下载的 相册数据库的来源字段 团体 Q19(IMG\_0011.PNG → SpringBoard 截图)、个人 Q19(HEIC 与 5005.JPG 的关系)

团体赛 Q19 的答案特别值得记:题解在 Photos.sqlite 的 ZCLOUDMASTER 表里看到图片来源是 SpringBoard,而「SpringBoard 是 iOS 系统的截图组件」,因此判定为手机截图。个人赛 Q72 更绕——要判断「已删除图像是用哪个手机拍的」,图片在内存镜像里,仍然要读它的 EXIF 才能得到型号。

6.7 顺带一题:日志里的加密算法(团体赛 Q65)

Q65 问「他使用了哪种算法加密密码」,答案 AES-256-GCM。题解的方法只有一句:「在日志里搜索 cipher 可以看到」。这提示了一个省力的习惯:程序日志往往会直接打印它用的加密算法名称,比逆向量级低得多——先搜日志,再考虑逆向。

6.8 这一届的易错点

  • 「第一步」永远先读加密脚本 + 读文件头,确认参数布局。
  • PBKDF2 的 count 是「性能换安全」,别选成「只影响其中一个」。
  • 「保护代码」的技术要分清混淆 ≠ 加密(有没有密钥是关键)。
  • 两张同名图片大小不同,先想尾部附加,再想别的。
  • 0x140 开头的地址要减去基址 0x140000000

才是偏移量。
* JNE 改成 NOP 是「让跳转失效」,不是「改成 JE」——两者效果不同。
* EXIF 读不到 GPS 时,去相册数据库找,别直接放弃。

七、2025(第十一届):从 PDF 白字到 SecretSeed 逆向

第十一届的 CTF 题 41 道(个人赛 14、团体赛 27),是五届里最重的一届。这一年的题型有两个明显特征:隐写手法更「聪明」(不再只是尾部附加,而是白字、位移推导),以及一条主线贯穿多道题(9 道题围着同一个 exe)。

7.1 PDF 里的白字:最容易漏的一种隐写(个人赛 Q69)

题目:「在 WhatsApp 某群组里,机主于 2025-04-29 08:31:02 传送了一个 PDF 文件,该 PDF 的内容是什么」,答案是 0xe36D4bCf0132B8Dc7317C2Fb9bfa1845629F6638——一个钱包地址。

题解的解法有两种,都非常朴素:

  • ① 用 PDF 编辑器编辑文本

,就能看到被设成白色的文字(白底白字,肉眼看不见);
* ② 打开文档后直接 Ctrl+A 全选再复制

,选中的范围会把隐形文字一起带出来。

✓ 白字隐写为什么容易漏

因为它不改变文件结构——文件大小正常、图片正常、用 PDF 阅读器看上去一片干净。如果按「隐写 = 文件大小异常」的老思路去找,这道题会永远找不到。遇到 PDF 里「说好的信息找不到」,先 Ctrl+A 全选看一眼,成本极低。

7.2 密码藏在壁纸里(个人赛 Q81)

题目:U 盘上有个加密压缩包,「该压缩文件的解压密码是多少」,答案是 54d#e(nm。线索位置很妙:/WEPE/WALLPAPER.JPG——题解解释:「启动 WinPE 之后,该图片会被设置为系统桌面」,也就是密码就明明白白写在壁纸上。

这类题考的是「线索意识」而不是技术:压缩包解不开时,把同一目录、同一批检材的图片全部看一遍,往往密码就写在某张图上。这道题从头到尾没有爆破——密码是「看」出来的。同届 Q80 还考了这个压缩包的存在性与创建时间,作用也是先把检材摸清、为找密码铺路,而不是为跑字典做准备。

而压缩包解开之后里面是什么?题解写了:VeraCrypt、TorBrowser 和 1 个容器文件。主线立刻转到下一环——加密容器。

7.3 VeraCrypt 容器:容器题怎么答(个人赛 Q84/Q85/Q91)

这三道题围绕一个叫 xcontainer 的文件:

题目 问什么 答案 怎么知道
Q91 U 盘里那个加密文件用的是什么加密软件 VeraCrypt 识别容器的特征(或从上下文)
Q84 文件 xcontainer 的加密算法是什么 AES(Twofish) 用 vera_key 作为密钥文件挂载容器后,查看属性
Q85 容器属性哪个描述正确(多选) 只有 ii) 和 iv) 容器大小 4980736 字节 ≠ 选项给的 4943872;文件系统为 FAT ✓; Embedded Backup Header 为 Yes(选项说没有 ✗);块大小 128 bits ✓

i 容器题的固定流程

① 确认它是容器(VeraCrypt/TrueCrypt/BitLocker 的头部特征);② 找密钥来源——本题是删除后又导出的 vera_key密钥文件,注意密钥文件与密码是两回事;③ 挂载(VeraCrypt 里选「使用密钥文件」);④ 看属性——算法、块大小、备份头、文件系统,答案基本都在属性页里。Q85 那种多选「描述正确的是」,逐项回属性页核对数字即可,不用推理。

7.4 二维码的三道题:从「找到」到「数清」(团体赛 Q4/Q98/Q214)

2025 年把二维码考出了层次:

  • Q4

:问哪两个附件的图片里藏有指定的钱包地址,答案是 IQ_1.jpg 和 7b3e4512-1d8d-4d54-AA1c-5b004ce23A6f.jpeg——要在邮件附件里把这两张图找出来。
* Q98

:NAS 服务器里同名文件中的二维码,资讯值就是那串地址。
* Q214

:问一共有几个 jpg 里的二维码藏着这个地址,答案是 4。题解给了找法:「在仿真好后点开开始菜单,就能在 Recommended 部分看到一个命名为 IQ_1.jpg 的图片……然后再顺着路径去找其他图片」。

! 「数清」类题最危险

Q214 是选项题(1/2/3/4/5),只要漏一张就全错。题解的做法是「先找到一张 → 顺着它的路径把同类图片全捞出来」,而不是漫无目的地搜索。找到第一张之后,它的所在目录就是最可能的答案区域。

7.5 尾部隐写 + 凯撒:一条两步走的小链(团体赛 Q215)

题目问:「请列出加密文件 Manson 内藏的是什么文件」,答案是 login.xlsx。题解把过程写得很清楚:

① 搜索 manson → 找到加密文件与 manson.jpg ② manson.jpg 做隐写分析 → 识别为【尾部隐写】,取出一段文本 ③ 该文本是【凯撒加密】→ 用 CyberChef 解密 → 得到密码 Ocean\_Park ④ 用 TrueCrypt 挂载 → 需要密码 → 输入 Ocean\_Park → 看到 login.xlsx

题解还特意注明「过程同团体赛 47 题」,而 47 题正是这一届里交代「采用 Truecrypt 加密」的那一道(该题题解中未单列,本节按 Q215 的说明还原,因此不计入 88 道统计)。把 47 与 215 连起来看,就是同一条链的两端。

✓ 这条链的复用价值

尾部隐写取文本 → 凯撒解密 → 密码 → 容器挂载,这五步是 2025 年的高频骨架。同届 Q255 是它的升级版(多了一层位移推导),Q246—Q251 是它的另一个变体(换成 ZIP 与 PDF)。把这个骨架背下来,2025 的隐写题基本都能套。

7.6 最经典的一道:位移叠加(团体赛 Q255)

这一题我认为是五届里最能体现美亚杯出题思路的一道。题目要求「综合上述你发现的文件,请列出这些文件隐藏了什么信息」,答案是 book cat drum earth fire glatt heart ink joy king moon nest。

线索是三个文件:MIDI Table.txt、MIDI Table.jpg、Caesar's Cipher+3.jpg。其中第三个文件用 010Editor 打开,能在文件尾看到一串十六进制:

Can You Find It (Caesar's Cipher+3) : 64 77 77 73 65 63 82 66 80 83 75 67 63 80 82 70 68 71 80 67 69 74 63 82 82 70 67 63 80 82 71 76 73 72 77 61 73 71 76 69 75 77 77 76 76 67 81 82

接下来是这道题真正的难点——位移量不是 3,而是 -2。题解的推导:

  • 图片 Caesar's Cipher+3.jpg 上写着 C4=60=A,意思是「MIDI 里 60 代表 A」。
  • ASCII 里 A 是 65。用 MIDI 的 60 去对应 ASCII 的 65,相当于把密文整体往小数点方向挪了 5,也就是凯撒位移 −5。
  • 文件名明示的位移是 +3。两个位移叠加:+3 + (−5) = −2。
  • 所以真正的位移量是 −2,而不是文件名暗示的 +3。

按 −2 位移解出来得到 BOOKCATDRUMEARTHFIREGLATTHEARTINKJOYKINGMOONNEST,再自己分词成 12 个单词。题解还诚实地吐槽了一句:「题干中则严格表明需要注意空格和区分大小写,此题描述并不严谨」——因为正常解密只能得到大写、也不一定会想到自己分词。

! 这题的三层坑

① 信息在文件尾,不在图片本身,要用十六进制编辑器往下翻;② 位移量要自己算——文件名是钓饵,真正的位移是「明示位移 + 进制差」;③ 解出来还要分词,题干里的「注意空格和区分大小写」就是提示。这三层任何一层没想到,题就做不出来。这也是为什么它值得当典型题反复练。

7.7 PDFStego 与 ZIP 爆破(团体赛 Q246—Q251)

这一组题把「容器里的容器」考到了极致。流程是:

① PDFStego-master (2).zip —— 加密压缩包 → 爆破密码 pass1234 ② 解压后得到一个 PDF —— PDFStego 检测出内藏文件 ③ 逐个试 Recovery Seed1~4.pdf → 选 Recovery Seed (4).pdf ④ 再要一个密码 → 字典攻击 → DuncanFung ⑤ 解出助记词 → apple banana cherry dog

每一步的细节都值得记:

题目 任务 答案 关键做法
Q246 压缩包密码 pass1234 先试六位数字爆破(失败)→ 改用字典攻击 ,用 Kali 自带的 /usr/share/wordlists/rockyou.txt
Q247 内藏文件的 PDF 的 SHA256 37422CE2...7BB8A6BA 用检材里给的程序 pdfstego,按 README 用即可; 判断方法很粗暴:没有隐写会抛异常,反之不会
Q249 该借助哪个 PDF 解密 Recovery Seed (4).pdf 把选项给的 PDF 逐一尝试
Q250 PDFStego 的密码 DuncanFung 密码来源是选项枚举——题解写「根据选项给出的密码逐一尝试即可」,不必真跑字典
Q251 助记词内容 apple banana cherry dog 解密后 cat 查看

i PDFStego 是什么

它是一款把文件藏进 PDF 里的工具(PDF 隐写),特点是载体 PDF 仍然可以正常打开,藏进去的文件要通过它才能取出来。本题附带了源码压缩包与 README,按文档操作即可——美亚杯经常把工具直接放进检材,遇到不认识的工具先找它自带的说明文档。

7.8 九道题围着一个 exe:SecretSeed.exe 逆向(团体赛 Q256—Q264)

这是 2025 年分数最集中的一组题,也是本专题里最适合当「逆向入门范例」的一组。目标程序 SecretSeed.exe 要求输入账号密码,验证通过后解密并显示虚拟钱包的助记词。九道题正好把逆向的固定动作走了一遍:

题号 问什么 答案 方法
Q256 正确账号 manson 搜索 username 字符串 ,在 Invalid username or password 附近找到硬编码的账号密码
Q257 正确密码 manson@MFI 同上
Q258 为什么输入对了还不解密 存储器中的一个旗标未被启用,导致条件跳转跳过解密 判断 byte_140005704 的值来决定是否执行解密代码
Q259 解密后怎么显示明文 经 UTF-8 转宽字符后用 MessageBoxW 显示 解密后调用 MultiByteToWideChar,再传给 MessageBoxW
Q260 助记词明文 cloud,deer,echo,fish,hawk,idea,juice,leaf,mirror,ocean,puzzle,rose patch 掉跳转指令 (IDA patch/调试器改值/frida hook),让程序跑到解密代码
Q261 AES 密钥字符串 12345678901234567890123456789012 32 字节,正好一串数字
Q262 哪种条件跳转造成不解密 JZ (条件为零时跳转) 四个选项里只有 JZ 是条件跳转
Q263 密文以什么形式存储 以 ASCII 字符串形式硬编码在 .rdata 或 .data 区段 反汇编查看
Q264 内部变量的偏移量 0x5704 0x140005704 − 0x140000000 = 0x5704

题解在 Q260 里把两种解法讲得很清楚,值得照抄这个判断:

方法 怎么做 题解评价
静态分析 看懂解密代码逻辑,再用 CyberChef 或 Python 脚本按同样逻辑解出密文 「比较麻烦,一般不推荐,除非程序里只有加密部分、只能这样分析出解密逻辑」
动态分析 用静态 patch、hook 或调试器篡改原代码逻辑,直接运行程序自带的解密代码 「比较简单,我这里也是用这种方法」

✓ 这一组题的考点清单

搜字符串找硬编码凭据 → 定位标志位 → 识别条件跳转(JZ)→ patch 掉跳转 → 读 AES 密钥 → 确认密文存储位置 → 算地址偏移。七件事,覆盖了逆向题的绝大部分套路。特别是 Q264 那个减法:IDA 里的地址减去基址 0x140000000 才是偏移——2024 个人赛 Q78 考过一次,2025 又考一次,连考两年。

7.9 邮件编码与图片来源:2025 的两类「冷门但必考」(团体赛 Q2/Q3、Q161—Q168)

团体赛开头有一组邮件题,问的是 MIME 编码:

  • Q3

:问「哪一种内容编码未被使用」,答案 binary。题解把四种编码都解释了一遍:7bit(ASCII 是 7 位编码)、8bit(UTF-8 是 8 位)、quoted-printable(标志是 ?Q?,非 ASCII 内容用十六进制表示、每字节以 = 开头)、base64(明显可见)。而 binary 「在 MIME 中都会被 base64 编码后发送,以免出现问题,binary 被严格限制」。
* Q2

:问附件结构的描述哪个正确,答案 E(以上皆不正确)。题解逐项排除:用 pdfid 看,PDF 里没有 JS 代码块;看图片 EXIF,不含地理位置;附件都在 Content-Disposition: attachment 里独立传输;没有 Content-Type: text/plain 的附件,且附件都是 base64 传输、不属于标准 ASCII 编码系统。

然后是 Q161—Q168 这一组「图片来源溯源」题,考法很细:

题目 问什么 答案 判断依据
Q161 图片通过什么方法生成 由 iCloud 同步 云端文件名 C6735068-....jpg 与本地 IMG_0001.JPG 不同, 且云端创建时间早于本地
Q162 原文件名称 C6735068-8DB3-4C08-AB16-4B792FF2A715.jpg 同上
Q163 原图片如何生成 由苹果手机拍摄 EXIF 里显示 iPhone 11
Q164 哪些图片不是本机拍摄 IMG_0097.JPG 把相册数据库查询结果导出为 CSV,按 ZEXTATTR-CAMERA MODEL 筛选, 排除掉索尼相机与 iPhone 14 Pro MAX 的记录
Q166 图片如何生成(另一张) 通过 Safari 浏览器下载 图片来源字段
Q168 原文件完整名称 IMG_0097.JPG 文件名未修改过

✓ 「图片来源」这种题怎么想

记住 2025 年出现的四种来源:本机拍摄(EXIF 有相机型号)、本机截图(来源为 SpringBoard)、云同步(云端文件名是 UUID、创建时间更早)、网络下载(来源为 Safari)。题解的通用做法是:把数据库查询结果导成 CSV,再按字段筛选——比一条条翻记录快得多。

7.10 这一届的易错点

  • PDF 找不到信息时,先 Ctrl+A 全选——白字隐写不改变文件大小。
  • 压缩包解不开,把同批图片看一遍,密码可能写在壁纸上。
  • 容器题的答案基本都在属性页里,逐项核对数字,不要推理。
  • 「有几个」类题目,找到第一张后顺着它的目录扩大范围。
  • 位移类密码:文件名给的位移量可能是钓饵,要结合所有线索算总位移(Q255 是 +3 与 −5 叠加)。
  • 先爆破六位数再上字典——别一上来就啃字典(Q246 的题解顺序就是这样)。
  • 看到 0x140 开头的地址,先减 0x140000000。
  • 逆向优先用动态 patch(直接跑程序自带的解密代码),静态重写解密逻辑只在没办法时用。

八、工具链:每个工具负责哪一步,怎么用

CTF 题的工具不多,但每个都对应一个固定动作。这一章按「考场上先摸哪个」的顺序排,先讲题解里真正出现过的工具,再补几个同类的常用工具。

i 先说清一件事:工具的选择依据

题解里出现过的工具(CyberChef、010 Editor、OpenStego、PDFStego、pdfid、binwalk、Hashcat、Passware、openssl 等)是真题实战验证过的;像 StegSolve、ExifTool 这些,五届题解里没有点名,但属于 CTF 圈通用工具,作为备选与加速器推荐。两类我分开写,你可以按需取用。

8.1 CyberChef:题解里出现最多的那个「万能厨房」

五届题解里,CyberChef 是被点名最多的工具(出现 7 次)。它的定位是「网络版的瑞士军刀」——把各种编码、解码、加密、转换操作当成食材,拖进一个叫 Recipe(配方) 的面板里串起来,一步接一步执行。

界面就三块:左上选操作、中间拖成配方、右边看输入输出。它的杀手级功能是 Magic(智能识别):把一串来历不明的字符丢进去点 Magic,它会自动尝试常见编码并高亮可能的结果。

题解里实际用到的四种场景:

场景 配方怎么搭 出处
凯撒解密 拖入 ROT13 或 Caesar 操作,调整位移量,看输出是否成词 2025G-Q215(解出密码 Ocean\_Park)
反转义 + JSON 美化 拖入 Unescape 相关操作 + JSON Beautify 2025G-Q145 附近的标签内容处理
Protobuf 解码 把十六进制字符串丢进去,用 Protobuf Decode 看结构 2025I(投票记录)
基础解码 Base64/Hex/URL 等按需串接,一步不行就再加一步 2024I、2025I 多处

✓ CyberChef 的两个使用要点

① 它是「流水线」思维——解不出来不是它不行,是配方顺序错了。比如 Base64 解完还要解压,就得再加一个 Inflate 操作,而不是重来。② 它能离线用:下载单文件 HTML 版本,断网也能跑,而美亚杯的赛场环境经常是断网的(这也是为什么官方爱给离线工具)。

题解里还有一句评价很值得记:在 Q260 那道逆向题里,「静态分析:看懂解密代码逻辑,然后用 CyberChef 或者 Python 脚本按照一样的逻辑把密文解密出来」——这说明 CyberChef 不只是「解码工具」,它还能当作手工执行加密算法的替身,在不想写脚本的时候顶上去。

8.2 010 Editor:看文件头、翻到文件尾

这是十六进制编辑器里最常用的一个(题解出现 5 次,每届的工具清单里都有它)。CTF 题里它的用途只有两个,但都不可替代:

  • 看文件头

——确认文件的真实类型(第二章 2.2 节的文件签名表)。2025 团体赛 Q52 分析流量包接口时,题解就是「用 010 打开也已经验证了猜想」。
* 翻到文件尾

——找尾部附加的内容。2025 团体赛 Q255 就是「使用 010Editor 打开 Caesar's Cipher+3.jpg,可以发现文件尾藏着字符串」,那一串十六进制就是这么看到的。

✓ 一个操作技巧

找尾部附加时,不要从头发呆地往下滚——直接跳到文件末尾,或者用搜索功能找 FF D9(JPEG 结束标志),看后面还有没有内容。同样的思路对 PNG(49 45 4E 44 AE 42 60 82)、ZIP/Office(找第二个 50 4B 03 04)都适用。

8.3 openssl:命令行里的加密与哈希

这是题解里唯一一个给了完整命令行的工具(五届共出现 4 次,集中在 2023 团体赛)。它管两件事:对称加密/解密与算哈希。命令行最大的好处是——线索往往就写在检材里,你照着改一个参数就能跑起来。

最典型的一道题:检材里有个加密的 Word,得先从 PowerShell 的历史记录(PSReadLine)里翻出加密时用的那条命令,再把它反着解回来。

① 检材里的加密命令(来自 PSReadLine 历史) openssl enc -aes-256-cbc -salt -a -e -in Data.docx -out encrypted.docx  # ② 解密:把 -e 改成 -d,其余照抄 openssl enc -aes-256-cbc -salt -a -d -in encrypted.docx -out decrypted.docx

四个参数的含义,以及「改错了会怎样」,值得背下来:

参数 作用 改错了会怎样
-aes-256-cbc 指定算法:AES-256 的 CBC 模式 算法不匹配 → 直接报错
-salt 加盐(随机扰动,抗彩虹表) 一端加、一端不加 → 密钥派生结果不同,解不开
-a 密文以 Base64 文本形式读写 去掉后按二进制处理,密文容易被截断
-e / -d 加密 / 解密 解密就是把 -e 改成 -d ,这类题最省力的一步

它还有第二个高频用途:算哈希——openssl dgst -md5 文件、openssl dgst -sha256 文件。题目问「这个哈希是哪种算法」时,最快的判断依据是长度(MD5 32 位、SHA-1 40 位、SHA-256 64 位、SHA-512 128 位,见 5.5 节那张表)。

✓ 它和 CyberChef 怎么分工

两者解决的是同一类问题,区别在「文件要不要挪地方」:CyberChef 是网页/本地 HTML,适合把一串文本黏进去反复试;openssl 是本地命令行,直接对检材文件原地操作,更适合「加密文档、要算哈希的原始文件」这种不能随便挪动的检材。一句话:试编码用 CyberChef,动文件用 openssl。

8.4 隐写专用工具:OpenStego 与 PDFStego

工具 藏什么 基本用法 出处
OpenStego 文件或文本藏进图片(推荐 BMP/PNG) 三步:选 Hide/Extract → 选载体图片 → 填密码。 命令行或图形界面都行 2023G-Q90/Q91(key.bmp 藏了一段文字,取出 P@ssw0rd)
PDFStego 文件藏进 PDF,载体 PDF 仍可正常打开 按源码包里的 README 操作即可;没有隐写时程序会抛异常,可当作检测手段 2025G-Q247/Q249/Q250(助记词藏在 Recovery Seed 系列 PDF 里)

注意两个使用细节:① 载体格式选 BMP/PNG——JPEG 有损压缩会破坏低位数据;② 密码与载体是一一对应的,换一张图或换一个密码都可能取不出来。2025 那道 PDFStego 题还有个取巧点:题解里「根据选项给出的 pdf 文件逐一尝试即可」——选项本身就只有四个,逐个试比推理快。

8.5 密码从哪来:先找线索,最后才爆破

遇到加密文件,很多人的第一反应是「上爆破」。但把五届真题点一遍会发现:真正靠爆破跑出来的只有少数几道,绝大多数题的密码,要么题干直接给了,要么能从别的检材、别的题目里挖出来。把密码的来源按优先级排一下,考场上的动作顺序就清楚了:

优先级 密码从哪来 真题实证 耗时
① 题干直接给出 题面或案件描述里就写着密码,扫一眼就有 2024G「John 的手机」——题解原话是「参考 John\_Smartphone\_itunebackup.zip,备份密码是 1234」,属于白送 几秒
② 其他检材/上一题解出 密码藏在另一份检材里,或者就是上一题的答案 2022I-Q21 的加密 order.xlsx:密码写在检材的便签上;2024G-Q67 从 满汉全席Secret.jpg 尾部取出一个 Word → 里面是 BitLocker 恢复密钥和一行密码,Q68 题解原话「用上题中 word 文档中的密码成功解密」(IamRich123!) 1—2 分钟
③ 解码/查表得到 拿到的是哈希或密文,查表、解码就得到明文 2023G-Q88:ADS 里藏的内容是一个 MD5,在线查表得到 newpassword2;题解还专门补了一句「离线环境下,大部分的弱口令字典应该也都爆不出来吧」 十几秒
④ 选项枚举 选项本身就是几个候选密码,逐个试比推理快 2025G-Q250:题解写「根据选项给出的密码逐一尝试即可」 几十秒
⑤ 最后才是爆破 前面几条路都走不通,才动用字典与算力 2023G-Q85(iTunes 备份密码)、2025G-Q246(加密 ZIP)——五届里明确写了「跑字典/爆破」的,主要就是这两道 几分钟到跑不出来

✓ 为什么「先找线索」比「先爆破」划算

线索类题(①②③④)基本是几十秒到两分钟出答案,而且答案确定;爆破类题(⑤)耗时几分钟,还得赌字典里恰好有。2025G-Q246 的题解顺序就是「先进行六位数的简单爆破,发现爆破不出来,后面将思路转变为字典攻击」;2025I 那道虚拟货币压缩包更是字典跑不动,最后是把检材里出现过的密码、生日、钱包地址攒成自己的字典才跑通——密码的来源仍然是检材。反过来一上手就啃 rockyou,时间就没了。

如果确认只能爆破(对象是一份 iTunes 备份或一个加密压缩包,线索里确实没有密码),那也别以为只有 Hashcat 一把工具。爆破工具至少有两把,按「命令行」和「图形化」分成两条路线,选顺手的用:

路线 工具 怎么做 典型对象
命令行 Hashcat + 格式转换脚本 先从 Manifest.plist 提取哈希(itunes_backup2hashcat)、转成 Hashcat 认识的格式,再选字典或掩码跑;注意选对模式编号(不同哈希格式对应不同 -m 值),跑之前先用 --show 确认格式被正确识别 iTunes 备份、各类哈希、加密压缩包
图形化 Passware Kit 把文件直接导入(Manifest.plist、加密的 Office 文档、BitLocker/TrueCrypt/VeraCrypt 容器),选字典或掩码就开跑,不用先转格式 iOS 备份、加密文档、加密容器

i Passware Kit 在题解里的位置

2025 个人赛的题解在讲 iOS 备份密码时,原话是「大多数检材的密码为 0000 或 1234,可以通过 Passware 或 HashCat 等密码爆破工具结合弱口令字典或 4 位数字掩码进行爆破」——它与 Hashcat 是并列关系,不是替代关系。工具本身的能力覆盖 iOS 备份、加密文档、加密压缩包与加密容器,正好对应美亚杯密码题的几大类型。但要记住:它能省掉的是「转格式」这一步,省不掉「先找线索」。

  • 掩码比字典更快

——2025I 的 iOS 备份密码大多是 0000/1234 这类 4 位数字,用 4 位数字掩码几秒钟就跑完,比上大字典划算。
* 字典也可以自己攒

——2025I 那道虚拟货币压缩包字典跑不动,最后是把检材里出现过的密码、生日、钱包地址攒成自己的字典才跑通。绕了一圈,密码的来源仍然是检材。

✓ 字典顺序就是考场策略

先把六位数字跑一遍(几十秒),再上 rockyou(几分钟)。如果题目是「弱口令」型,第一轮就出来了;如果是「生日」型,中间那轮会命中。反过来先啃 rockyou,时间就浪费了。

还有两种「看着像爆破、其实不是」的情况,务必分清:

  • 试默认值

——2025I 的 iOS 备份密码试的是出厂默认值,几秒钟就完事,靠的是「知道该先试默认值」这个经验,不是算力;
* 密钥硬编码在程序里

——2025G-Q261 那个 32 字节 AES 密钥,题解就是在程序里直接读出来的(12345678901234567890123456789012),搜字符串比爆破快得多。

8.6 其它够用就好的工具

下面这些是「用得上、但不必单开一节」的工具。其中 binwalk、pdfid、Python、EFDD/Volatility3 在五届题解里出现过;ExifTool、StegSolve、Audacity、Foremost 属于圈内通用工具,题解里没有点名,作为同类替代列出,结论仍以原始工具为准。

工具 用途 在哪一题能帮上忙
ExifTool 命令行批量读 EXIF(型号、GPS、时间、方向) 2024G-Q129/Q130、2025I-Q63—Q66
StegSolve 分通道、分位平面查看图片,看 LSB 隐写 2023G-Q91 这类图片隐写题
binwalk / Foremost 自动扫描并提取文件中嵌套的内容 2024G-Q67 的尾部附加
pdfid 快速看 PDF 里有没有 JS、是否加密 2025G-Q2(题解就是用 pdfid 排除 JS)
Audacity 看音频频谱、做倒放 2022G-Q1 这类音频隐写
Python 写解密脚本、批量处理 2024G-Q42—Q48(照加密脚本重写解密脚本)
EFDD / Volatility3 从内存镜像里提取 BitLocker 恢复密钥 2024I-Q80(题解列的备选路径)

九、五年重复考点:哪些必须练到条件反射

把 88 道题按「考的是什么动作」归并,重复度很高。下面这张表是逐题点出来的(标了届次与题号,可回原文核对)。

9.1 跨届复现:这七件事,五届都在变着法考

考点 出现届数 五届怎么「变脸」的 代表题号
图片元数据与来源判断 5/5 2021 问原图与缩略图关系 → 2022 问元数据是否被篡改 → 2023 查相册数据库字段 → 2024 问相机型号与 GPS → 2025 问「这张图是拍的/截图/下载/云同步」 2021I-Q36;2022I-Q23;2023I-Q59;2024G-Q19/Q129;2025I-Q30/Q63/Q64;2025G-Q161—Q164
加密文档与加密容器 4/5 2022 考 Office 文档加密与 RSA 密钥文件 → 2023 考 openssl 解密 Word、加密 dmg → 2024 考自研脚本(PBKDF2+AES)、BitLocker To Go → 2025 考 TrueCrypt/VeraCrypt 容器 2022I-Q21;2022G-Q17;2023G-Q56/Q92;2024G-Q42—Q48/Q68;2025I-Q84/Q91;2025G-Q47
编码与解码链 3/5 2021 是 PHP 的 gzinflate(base64_decode()) → 2023 是 shell 历史里的 base64 编码链(还带陷阱)→ 2025 是邮件 MIME 编码 2021G-Q25/Q27/Q28;2023G-Q55/Q88;2025G-Q2/Q3
表情包式隐写(图片藏信息) 3/5 2021/2023/2025 都有二维码;2023 升级为 OpenStego 的 LSB 隐写;2024 是尾部附加 Office 文档;2025 变成 PDF 白字与尾部隐写 + 位移推导 2021G-Q29;2023G-Q83/Q90/Q91;2024G-Q67;2025I-Q69/Q81;2025G-Q214/Q215/Q255
密码从哪里来 4/5 2022 的 Office 密码写在检材的便签上 → 2023 一半靠查表与图片线索、只有 iTunes 备份是真的爆破 → 2024 用上一题解出的密码解 BitLocker,另一处备份密码题干直接给 → 2025 两道:一道选项枚举、一道真字典攻击 2022I-Q21;2023G-Q79/Q85/Q88;2024G-Q67→Q68;2025G-Q246/Q250
古典密码 2/5 2023 考 Playfair(给了密文与方阵);2025 把凯撒考了两遍,其中一次还叠加了位移换算 2023G-Q89;2025G-Q215/Q255
逆向绕过与解密 2/5(但分值最重) 2024 是 exe 里改标志位/patch 跳转 → 2025 是「搜字符串找凭据 + 识别 JZ + patch + 解 AES」,九道题围着同一个程序 2024I-Q74/Q78/Q79;2025G-Q256—Q264

9.2 三处「几乎照搬」的复现

有三组题,考法几乎一模一样,只是换了检材。练一组等于练三组:

复现关系 问法 答案路径
地址偏移换算 2024I-Q78 ↔ 2025G-Q264 都问「决定某个行为的字节,其相对基址的偏移量是多少」 都是 0x140 开头地址减基址 0x140000000:前者 0x808C、后者 0x5704
同一个 exe 的两种问法 2024I-Q74 ↔ 2024I-Q79 一个问「怎么改汇编绕过检查」,一个问「拿到偏移后怎么利用」 前者改指令(JNE→NOP),后者改数据(标志位改成 1);两条路都能通
尾部隐写取密码 2024G-Q67 ↔ 2025G-Q215/Q255 都是「图片里藏了东西,取出来当密码用」 2024 是从 jpg 尾部取出一个 Office 文档(内含恢复密钥与密码);2025 是从 jpg 尾部取出文本、再凯撒解密得到密码

9.3 只盯前面五条,就覆盖了大半的分

前五条(图片元数据、加密文档与容器、编码链、图片隐写、密码从哪里来)跨了 2021—2025 每一届,题量占到 88 道里的绝大多数。把这五件事练到不需要思考,CTF 题的基本盘就稳了;剩下两条(古典密码、逆向)是拉分项,2024 之后分量明显上升。

i 这五条里,只有一条沾「算力」

前五条中的密码那条,五届里明确写了跑字典的只有 2023G-Q85 与 2025G-Q246 两道;其余全部靠读题、翻检材、查表、看选项解决。所以别把「密码题」和「爆破」划等号——它考的是你能不能在检材里把密码找出来,而不是你的显卡有多快。

十、易错点总清单:这些坑五届里反复出现

这一章可以直接当检查表用。交卷前过一遍,能挡掉大部分「明明会做却做错」。

# 易错点 为什么错 涉及题号
1 只看扩展名就下结论 扩展名可以随手改,文件头才作数 2022I-Q29(PDF 后缀其实是老 Office)
2 EXIF 里没有 GPS 就放弃 iOS 会把副本写进相册数据库的 ZEXTATTR 表 2025I-Q64
3 把同一张图的 HEIC 与 JPG 当成同一个文件 格式不同、哈希必然不同 2021I-Q36、2024I-Q19
4 shell 历史里的 base64 编码,分不清编的是文件名还是内容 echo f.rtf | base64 编的是文件名;要加 textutil 才是内容 2023G-Q55
5 PDF 里找不到信息就判定「没有」 白字隐写不改变文件大小 ,Ctrl+A 全选就能看见 2025I-Q69
6 「保护代码」的技术误选成加密 混淆后的代码不需要密钥就能执行,所以不是加密 2024G-Q52
7 改汇编时把 JNE 改成 JE 应改成 NOP(让跳转失效),不是改成反向跳转 2024I-Q74
8 地址当偏移量直接用 0x140 开头要先减基址 0x140000000 2024I-Q78、2025G-Q264
9 凯撒解密只看文件名给的位移 Q255 里 +3 是钓饵,真正的位移是「+3 与 −5 叠加」= −2 2025G-Q255
10 解出大写字母串就交卷 题干要求注意空格与大小写,还要自己分词 2025G-Q255
11 信息藏在文件尾却没往下翻 要跳到文件末尾或用 FF D9 定位后继续看 2024G-Q67、2025G-Q255
12 密码题一上来就爆破 先走①题干 → ②其他检材/上一题(便签、备忘录、文档属性)→ ③查表解码 → ④选项枚举,四条都不通才动字典 2022I-Q21(密码写在便签上)、2024G-Q68(密码来自上一题)、2023G-Q88(查表更快)、2025G-Q246(真需爆破)
13 只会用一把爆破工具 命令行路线要先提取哈希、转成 Hashcat 格式再跑;图形化的 Passware Kit 可直接导入 Manifest.plist、加密文档与容器 2023G-Q85(iTunes 备份密码)
14 容器题不看属性页 算法、块大小、备份头、文件系统都在属性里,逐项核对即可 2025I-Q85
15 混淆「密钥文件」与「密码」 VeraCrypt 可以只用密钥文件挂载,不必输密码 2025I-Q84
16 「有几个」类题只找到一张就填 找到第一张后顺着它的目录扩大范围 2025G-Q214
17 隐写载体选了 JPEG JPEG 有损压缩会破坏低位数据,选 BMP/PNG 2023G-Q91(载体是 key.bmp)
18 二维码在缩略图上扫不出来就以为没有 要导出原图再扫 2021G-Q29
19 只看检材信息字段的「大小」,不看单位 容器大小、分区容量这类数字,一个字节都不能差 2025I-Q85(4980736 ≠ 4943872)
20 题目说「以上皆不正确」就以为是凑数 这类选项是真的会选,要逐项验证后才能排除 2025G-Q2(答案就是 E)

! 最贵的一类错

截图会考、命令会背、工具会用,最后因为「没看清选项」丢分——比如「以上皆不正确」、比如「大小 4980736 而不是 4943872」。这类错不涉及任何技术,纯粹是核对习惯。交卷前把带数字的选项逐个回原文对一遍。

十一、要掌握哪些技能,才算真的「会做 CTF 题」

把上面的内容倒推成能力清单。可以当自测表用——每一项都问自己「我能不能不看笔记做出来」。

11.1 四级能力清单

等级 能力 自测标准
L1 认得出 看到一串字符能判断它是编码、加密还是哈希;看到文件头能说出是什么文件;知道 EXIF 里有哪些字段、二维码能藏什么 给一张照片,能说出它的相机型号、有没有 GPS、是拍的还是截图
L2 找得到 知道信息可能藏在哪:图片(EXIF/二维码/尾部/LSB)、PDF(白字/内嵌文件)、压缩包(密码在别的检材里)、文件系统(ADS)、音频(倒放/频谱)、程序(硬编码字符串) 给一份检材,能在 15 分钟内定位到一个可疑的隐写点或加密点
L3 解得出 会用 CyberChef 搭配方解编码链;会用 010 Editor 看头尾;会按脚本重写解密逻辑;会用 OpenStego/PDFStego 取数据;知道密码有五个来源,只在都不通时才动爆破;Hashcat(命令行)与 Passware Kit(图形化)两条路线都会用 给一个加密脚本和一个密文,能算出 key 并把明文解出来;给一个加密压缩包,先去检材里找密码,而不是一上来就跑字典
L4 追得动 能把多个线索串成一条链(隐写取密码 → 解密文档 → 挂载容器 → 读答案);能 patch 跳转绕过程序验证;能读懂加密算法参数并判断出题意图 给一组多环节的检材,能独立走完全链并解释每一步为什么这么做

按 2026 的备考时间算:L1 + L2 是保底(隐写与元数据题必须拿到),L3 是提分项(密码学与编码题),L4 决定你能不能在 2025 那种 41 道 CTF 题的年份里拉开差距。

11.2 备考路线(按周推进)

阶段 目标 练什么
第 1 周:概念关 第二章的六组概念能用自己的话讲清 把第二章过两遍;自己做一张「文件头对照表」和「哈希长度表」背下来
第 2 周:编码关 CyberChef 用得像搜索框一样熟 拿 2021G-Q25/Q27/Q28、2023G-Q55/Q88、2025G-Q2/Q3 当练习册,每道都用 CyberChef 复现一遍
第 3 周:隐写关 图片/PDF/音频的隐写手法都能上手 复盘 2023G-Q90/Q91、2024G-Q67、2025I-Q69/Q81、2025G-Q214/Q215/Q255;每种手法自己造一个样本再取出来
第 4 周:密码与容器关 加密脚本能读懂、容器能挂载、密码知道从哪找 复盘 2024G-Q42—Q48(照脚本重写解密)、2024G-Q67→Q68(密码来自上一题)、2022I-Q21(密码写在便签上)、2023G-Q85(命令行与 Passware Kit 两条路线各跑一遍)、2025I-Q84/Q91(VeraCrypt)、2025G-Q246—Q251(密码来源排查 + PDFStego)
第 5 周:逆向关 能找到标志位并 patch 复盘 2024I-Q74—Q80、2025G-Q256—Q264;练「搜字符串 → 找条件跳转 → 改值/改指令 → 看结果」
考前一周:手感 别学新东西,保持手感 把第十章易错点清单当检查表,每套题交卷前过一遍

11.3 一句话总结这个专题的命题逻辑

五届走下来,CTF 题的命题逻辑其实非常稳定:它不考你有没有某个工具,而考你能不能用检材里的痕迹,把一个被藏起来的信息一层层剥出来。

藏的部分:二维码、EXIF、尾部附加、白字、LSB、通道——载体是看得见的,信息是看不见的,靠观察和工具就能找到。

锁的部分:编码、凯撒、AES、RSA、容器、压缩包——规则是公开的,钥匙藏在别处,靠读懂脚本、串起线索才能打开。

而把「藏」和「锁」串起来,就是 2024、2025 那几道大题的真正难度所在。

结语:把 88 道题当练习册用

这篇文章把 2021—2025 五届、共 88 道 CTF 相关题目做了一次完整梳理:先讲概念(第二章),再按届拆题(第三—七章),然后盘点工具(第八章),最后汇总重复考点、易错点与能力清单(第九—十一章)。

如果只记三句话,我希望是这三句:

  • 先看文件头,再看扩展名

——这一条能挡掉大量「看错文件类型」的错。
* 信息可能在文件尾,而不是文件里

——尾部附加、白字隐写都不改变文件结构,「文件看起来正常」不等于「没有藏东西」。
* 读懂脚本比会点工具更重要

——2024 之后的题,考的都是「你能不能把逻辑看穿」,工具只是最后那一下。

i 资源与口径说明

本文题目统计与解题思路整理自西电 XD Forensics Wiki 公开发布的 2021—2025 五届「美亚杯」个人赛/团体赛题解与选手复盘(共 10 篇);工具说明参考各工具官方文档与公开介绍。凡题解本身标注「存疑」或答案与选项不符的题目,文中均已如实注明(如 2023G-Q83、2025G-Q255)。
统计口径:考点落在隐写/编码/密码学/逆向解密上的题,共 88 道;仅问哈希值、时间戳、分区容量、网络协议字段的题不计入。2025 团体赛第 47 题(TrueCrypt)因题解未单列,不计入统计,已在 7.5 节说明。

敬请各位大佬关注:小谢取证

扫取二维码获取

更多精彩

小谢取证


2026年“美亚杯”CTF专题" 网络安全文章

2026年“美亚杯”CTF专题"

本文系统拆解2021至2025年五届美亚杯CTF竞赛中88道隐写与密码学题目,分为图片与文件隐写42道、密码学与编码33道、逆向解密13道。文章先讲解隐写、编码、加密、哈希等基础概念,再按届次分析解题思路,并总结重复考点、易错点及工具用法。核心结论是CTF题量逐年上升,隐写是基本盘,密码学是提分项,逆向是2024年后新增的大分模块。建议优先掌握隐写与编码技术。
评论:0   参与:  0