第四届“领航杯”江苏省青少年网络信息安全应用能力竞赛
编码解码
考点:Base64 编码 · 基础解码
下载得到的编码文本进行 Base64 解码即可。
密文:
d2VsY29tZXRvdGhlcGlsb3RjdXA=解码结果:
welcometothepilotcup
Tip
Base64 是 CTF Misc 中最基础的编码方式,看到形如 A-Za-z0-9+/ 且末尾可能有 = 填充的字符串,首先尝试 Base64 解码。
stegano Ⅰ
考点:十六进制编辑器 · 文件头识别
下载得到的压缩包,用 WinHex 打开即可找到答案。
解题步骤:
- 使用 WinHex 打开附件压缩包
- 浏览文件内容,发现明文 flag
Flag:
Look what the hex-edit revealed: passwd:steganoI
Tip
使用十六进制编辑器(如 WinHex、010 Editor)是 Misc 隐写题的必备技能,许多 flag 会直接明文存储在文件数据中。
stegano Ⅱ
考点:压缩包隐写 · 文件头修复
下载压缩包解压,发现是一张图片,用 WinHex 打开,在底部找到压缩包文件头。
解题方法:
(1)可以从 Ascii 中直接看出 flag
(2)分离压缩包

将找到的压缩包文件头部分提取出来,保存为独立的 zip 文件,解压即可。

Note
当图片文件尾部出现 50 4B 03 04(ZIP 文件头)时,说明图片中隐藏了压缩包,可以用 WinHex 从该位置开始截取保存为 .zip 文件。
lsb
考点:LSB 隐写 · Stegsolve
下载压缩包,解压得到一张图片,丢到 Stegsolve 中分析。
解题步骤:
- 使用 Stegsolve 打开图片
- 在不同颜色通道中切换查看

在某个通道中可以发现隐藏的 flag 信息。
Tip
LSB(最低有效位)隐写将数据隐藏在图片像素的最低位中,Stegsolve 可以分别查看 R/G/B 各个通道,是检测 LSB 隐写的标准工具。
恢复与解密
考点:磁盘镜像恢复 · Base64 · 异或加密 · 强网杯签到题
下载得到 img 镜像文件,用 DiskGenius 打开。
解题步骤:
- 使用 DiskGenius 打开 img 镜像文件

- 右键选择"已删除或格式化恢复"

- 挨个查看恢复的文件

- 找到假的 flag(干扰项)

- 找到加密压缩包,尝试破解,失败

- 找到一串 Base64 编码的字符
aWdxNDs3NDFSOzFpa1I1MWliT08waWdx- 解码后,得到一串更加奇怪的字符串
igq4;741R;1ikR51ibOO0igq- 这是强网杯签到题,使用 Python 进行 Base64 解码和异或解密
import stringfrom base64 import *b = b64decode("aWdxNDs3NDFSOzFpa1I1MWliT08waWdx")data = list(b)for k in range(0, 200): key = "" for i in range(len(data)): key += chr(ord(data[i]) ^ k) print(key)- 挑出数据较为正常的提交
jdr78472Q82jhQ62jaLL3jdr
Note
本题是强网杯 2019 签到题的变种,核心思路是对 Base64 解码后的数据进行逐字节异或爆破,遍历所有可能的 key 值,找出可读性最高的结果。
文件提取
考点:Base64 图片 · 十六进制编辑 · 文件尾隐写
下载得到 flag.exe,拖到 WinHex 看一下。

发现是一个 Base64 编码的图片,将其提取出来丢到 HTML 中查看:
<img src="base64数据">
下载 JPEG 文件,再次丢到 WinHex,在文件尾部找到 flag。

Tip
文件尾部添加额外数据是常见的隐写手法,许多格式(如 JPEG、PNG)在文件结束标记(FF D9 / AE B1)之后追加的内容仍可被正常读取工具忽略,但用十六进制编辑器可以直接看到。
凯撒 Ⅰ
考点:凯撒密码 · 经典密码破解
下载得到密文内容。

使用 CTFCrackTools 进行暴力破解。

Note
凯撒密码是位移密码的最简单形式,将字母表中的每个字母固定偏移若干位。CTFCrackTools 等工具可以自动尝试所有可能的偏移量,快速找到明文。
凯撒 Ⅱ
考点:扩展凯撒密码 · ASCII 全字符集 · 暴力解密
下载得到题目描述与密文:
我想你已经对凯撒大帝了,不是吗? 凯撒的最大问题是它不允许数字或其他字符。 我已经解决了这个问题,现在我可以在明文中使用任何 ascii 字符了。 键空间也从 26 增加到 128。\ o /
尽情享受!
0B 33 33 28 20 2E 33 26 70 20 3D 33 39 20 37 33
30 3A 29 28 20 33 32 29 20 31 33 36 29 20 27 2C
...(省略部分)解题思路:
考虑到题目支持任意 ASCII 字符,并且键空间增加到了 128,推测是采用 16 进制表示的扩展凯撒密码(移位范围 0~127)。
根据凯撒密码特性编写解密脚本:
str_data = """0B 33 33 28 20 2E 33 26 70 20 3D 33 39 20 37 3330 3A 29 28 20 33 32 29 20 31 33 36 29 20 27 2C25 30 30 29 32 2B 29 20 2D 32 20 3D 33 39 36 202E 33 39 36 32 29 3D 72 20 18 2C 2D 37 20 33 3229 20 3B 25 37 20 2A 25 2D 36 30 3D 20 29 25 373D 20 38 33 20 27 36 25 27 2F 72 20 1B 25 37 326B 38 20 2D 38 03 20 75 76 7C 20 2F 29 3D 37 202D 37 20 25 20 35 39 2D 38 29 20 37 31 25 30 3020 2F 29 3D 37 34 25 27 29 70 20 37 33 20 2D 3820 37 2C 33 39 30 28 32 6B 38 20 2C 25 3A 29 2038 25 2F 29 32 20 3D 33 39 20 38 33 33 20 30 3332 2B 20 38 33 20 28 29 27 36 3D 34 38 20 38 2C2D 37 20 31 29 37 37 25 2B 29 72 20 1B 29 30 3020 28 33 32 29 70 20 3D 33 39 36 20 37 33 30 3938 2D 33 32 20 2D 37 20 31 25 37 37 32 34 2A 3325 37 26 37 72"""s1 = str_data.split('\n')s = []for i in s1: s += i.split(' ')# 将十六进制字符串数组转换为单个数值数组ss = []for i in s: ii = '0x' + i ss.append(int(ii, 16))# 根据凯撒密码特性进行移位(0~127)for i in range(128): m = "" for n in ss: k = n + i if k > 128: k = k - 128 m += chr(k) print(m)在一串奇奇怪怪的字符中间找到了可读的 flag。

Note
标准凯撒密码只对 26 个字母移位,而本题扩展到 128 个 ASCII 字符全部参与移位,解题思路相同——暴力尝试所有偏移量即可。
ascii
考点:ASCII 编码 · 字符转换
题目描述:
在计算机中,只能使用数字。在此挑战中,您必须解码以下消息,该消息为 ASCII。 84、104、101、32、115、111、108、117、116、105、111、110、32、105、115、58、32、105、104、98、100、115、105、101、111、112、100、99、110
直接使用 JavaScript 在浏览器 Console 中运行即可:
var str = [84, 104, 101, 32, 115, 111, 108, 117, 116, 105, 111, 110, 32, 105, 115, 58, 32, 105, 104, 98, 100, 115, 105, 101, 111, 112, 100, 99, 110];var s = "";for (var i = 0; i < str.length; i++) s += String.fromCharCode(str[i]);console.log(s);注意:解密结果前面有一个空格,需要去掉。

Tip
ASCII 码是计算机表示字符的基础方式,常见字符的 ASCII 值需要熟记:A=65, a=97, 0=48, 空格=32。
Master of Zip - Middle
考点:ZIP 密码爆破 · CRC 明文攻击 · 伪加密修复 · PNG 高度修改
第一步:爆破手机号密码
根据题目提示,使用 AZIP 爆破 11 位手机号作为密码。


爆破出第一步的密码,解压后得到 level2.zip 与 readme.txt。
第二步:CRC 明文攻击
将 readme.txt 无密码压缩后发现与 level2.zip 中的 readme.txt 的 CRC 值相同,故采取明文攻击。
Warning
一开始采用 7z 直接在 Windows 下生成的 readme.zip 无法爆破成功,需要换到 Linux 下用 zip 命令压缩,保持文件信息一致。
zip -r Readme.zip Readme.txt

选择好刚才的文件进行破解,破解成功。


第三步:修复伪加密
打开压缩包后发现还有一个压缩包,拖入 WinHex 打开,发现是伪加密。

使用 WinHex 修改加密标记区域的值,保存。


第四步:PNG 高度修改
打开解密后的压缩包,得到一张 PNG 图片,拖到 WinHex 里面修改一下高度就可以看见 flag。


Note
PNG 文件头中 IHDR chunk 包含图片宽高信息,修改高度值可以隐藏/显示图片底部内容。这是常见的图片隐写手法。
usb
考点:USB 流量分析 · 鼠标轨迹还原 · Wireshark · Python 解析
下载得到一个 USB 流量包,稍微分析一下是鼠标/键盘的流量包。
解题步骤:
1. 导出流量数据
tshark -r example.pcap -T fields -e usb.capdata > data.txt
2. 解析鼠标坐标
分析流量数据中鼠标数据较多,推测是鼠标画图,用 Python 脚本导出坐标数据:
nums = []keys = open('data.txt', 'r')posx = 0posy = 0file = r'keys.txt'for line in keys: if len(line) != 9: continue x = int(line[2:4], 16) y = int(line[4:6], 16) if x > 127: x -= 256 if y > 127: y -= 127 posx += x posy += y btn_flag = int(line[0:2], 16) # 1 for left, 2 for right, 0 for nothing if btn_flag == 1: with open(file, 'a+') as f: f.write(str(posx) + " " + str(posy) + '\n') print(posx, posy)keys.close()得到鼠标移动坐标。

3. 渲染鼠标轨迹
用 gnuplot 渲染鼠标轨迹:
gnuplotplot keys.txt得到轨迹图。

4. 获取 Flag
将图像垂直翻转得到 flag:
CTF
Warning
提交后发现该 flag 是错误的,说明可能还需要进一步处理(如水平翻转、调整坐标原点等)。
Note
USB 鼠标数据包解析是 CTF Misc 中的经典题型,关键是要理解 USB HID 报告格式中坐标数据的编码方式。
OldCipher - Easy
考点:维吉尼亚密码 · 古典密码破解
密文:
Vvr Ifnvaus Bdwokv Gbtrzsa Vkqgofntja rrlznxk eflvkozjcdue rs "mzg oez ff pjkhvtx ok kqzioeg vgfsf." Zyil au vvykokaeoyrp avuwfnzv, bnl fcry eom ucdgaie mzg qhxiegl dfrguta gh huk wixdf ce oks ijggrtk-dtq uqvketbxkq sulnwsvwbtj. Taw fssoeimaqb sutulwu gbrvlr gp huk towwu hugk htng prke ulwf tbx teglwfvkj th wpoorv sxutsg ifmfmpwpgkihf. Dig iiyilquegghr fqknjryl wpqbsgalkgg zath fgts gnrn mzkg: vz uetdu kvzy mxujoaojml xqf rtjukapu vtkezjkhl, zvcafkehkj fhj glpnrnzapu fktrxl msly, grhlqqbrj fhj cignvnmaeogoeg nkgff, kcevltcaot anuvwbtj agv gzrikihfu, rvmzttd eofn, rnw eqfr. Cztagwh nzkefhvwam ko ijqjvjv a vgodykke vzcfnikekabogofn, pw ychru stq vvnz dowwtb pxppmgifnvyy bfxcybvs mzg ggauy hx oognvmtlkqnr kevzpwdavs ygt grilrbfi rvmzttd kbsuimtlkca, ypsmwog, ntu dbkvfvhltxv eczvlttlkcay rgtapgg guvxjuoeorl tlvopqj. fesi{t704r552923k38763ua0v51266748x310d572p3q}解题步骤:
- 识别出是维吉尼亚密码(古典密码)
- 但是没有密钥,使用 在线网站破解
- 在最后一行找到 flag

Note
维吉尼亚密码是一种多表替换密码,使用关键词(密钥)对明文进行移位加密。当密钥未知时,可以使用频率分析或在线工具进行破解。
数据包分析 - Easy
考点:Wireshark · HTTP 协议 · 响应头提取
下载得到 pcapng 格式的 Wireshark 数据包。
解题步骤:
- 拖入 Wireshark 打开
- 过滤 HTTP 协议

- 在一个 HTTP 响应头中发现 flag

Tip
HTTP 响应头(如 X-Flag、X-Ctf-Flag 等自定义头)是 CTF 中常见的 flag 藏匿位置,建议在抓包分析时优先检查所有头部字段。
EasyRE
考点:逆向工程 · IDA 反编译 · 字符串解密
下载附件,得到一个 re1.exe,丢到 IDA 中,F5 反编译成伪代码。
解题步骤:
- 分析其验证逻辑


- 在
en_flag处找到重新编码的 flag

- 将该值保存下来,按照验证逻辑写解密代码
key = "lfgaL{teU__stsr4_t3R3vSr}e"s = ""for i in range(len(key)): k = i if i & 1: k = k - 1 else: k = k + 1 s += key[k]print(s)- 运行得到 flag

Note
本题的加密逻辑是将原字符串的字符按一定规则重新排列:偶数位字符后移一位,奇数位字符前移一位。逆向时按相反规则还原即可。
总结
| 题目 | 考点 | 难度 |
|---|---|---|
| 编码解码 | Base64 编码 | ⭐ |
| stegano Ⅰ | 十六进制编辑器 | ⭐ |
| stegano Ⅱ | 压缩包隐写 | ⭐⭐ |
| lsb | LSB 隐写 | ⭐⭐ |
| 恢复与解密 | 磁盘恢复 · XOR 加密 | ⭐⭐⭐ |
| 文件提取 | Base64 图片 · 文件尾隐写 | ⭐⭐ |
| 凯撒 Ⅰ | 凯撒密码 | ⭐ |
| 凯撒 Ⅱ | 扩展凯撒密码 | ⭐⭐ |
| ascii | ASCII 编码 | ⭐ |
| Master of Zip - Middle | ZIP 爆破 · CRC 明文攻击 · 伪加密 · PNG 隐写 | ⭐⭐⭐ |
| usb | USB 流量分析 · 鼠标轨迹 | ⭐⭐⭐ |
| OldCipher - Easy | 维吉尼亚密码 | ⭐⭐ |
| 数据包分析 - Easy | Wireshark · HTTP 响应头 | ⭐ |
| EasyRE | 逆向工程 · IDA | ⭐⭐⭐ |
Note
本题目为江苏省青少年网络信息安全竞赛,难度梯度合理,涵盖了 CTF Misc 方向的多个经典考点,适合初学者练习。