题解作者:zzh1996
出题人、验题人、文案设计等:见 Hackergame 2021 幕后工作人员。
-
题目分类:general
-
题目分值:100
-
题目链接:src/radio.mp3
(前情提要)
为了打破 Z 同学布下的结界,X 同学偷偷搬出社团的业余无线电台试图向外界通讯。
当然,如果只是这样还远远不够。遵依史称“老爹”的上古先贤的至理名言,必须要“用魔法打败魔法”。X 同学向上级申请到了科大西区同步辐射实验室设备的使用权限,以此打通次元空间,借助到另一个平行宇宙中 Z 同学的法力进行数据对冲,方才于乱中搏得一丝机会,将 flag 用无线电的形式发射了出去。
考虑到信息的鲁棒性,X 同学使用了无线电中惯用的方法来区分字符串中读音相近的字母。即使如此,打破次元的强大能量扭曲了时空,使得最终接受到的录音的速度有所改变。
为了保障同步辐射设备的持续运转,组织牺牲了大量的能源,甚至以东北部分地区无计划限电为代价,把这份沉甸甸的录音文件送到了你的手上。而刚刚起床没多久,试图抢签到题一血还失败了的你,可以不辜负同学们对你的殷切期望吗?
注:flag 花括号内只包含小写字母。
下载音频文件播放,可以听出音频内容是一段人声,但是具体读的内容是什么,速度太快,音调太高,无法听清楚。
根据题目描述「打破次元的强大能量扭曲了时空,使得最终接受到的录音的速度有所改变」,我们可以得知音频的速度被加快,需要使用工具来还原音频的速度,才能听清内容。
对音频的速度进行调节有两种不同的方式:
-
一种是保持音调不变,这样人说话的速度加快或者减慢了,但是音频的内容听起来还跟原来差不多。这是很多音视频播放器通常采用的方案,一般视频网站和 app 的倍数功能也是这种处理方式,它可以在加速和减速的同时让人听得尽量清楚。这种方式需要较为复杂的算法来处理。
-
另一种是简单地把音频的波形进行压缩,这样速度加快的同时,音调也会变高。如果你试过播放磁带的同时进行倒带操作,那么你应该对这种声音很熟悉。物理现象(例如介质和播放器件的速度改变、多普勒效应等)通常会产生这种音频变换。
可以听出,本题的音频文件是上述第二种变换(题目文案也在暗示这一点)。所以,很多播放器的速度调节功能并不能还原出原始的声音。如果你保持音调不变,对速度进行了减慢调节,那么理论上你还需要降低声音的音调才能恢复到原始的状态。
这里使用处理多媒体文件常用的工具 ffmpeg
来对音频进行处理。
根据 ffmpeg
的文档,asetrate
这个 Audio Filter 可以改变音频的采样率,从而改变音频的速度和音调,相当于在时间轴上对音频进行缩放操作。
我们先使用 ffmpeg -i radio.mp3
命令来查看音频的采样率,是 48000 Hz。
然后尝试将采样率减半,命令为 ffmpeg -i radio.mp3 -af 'asetrate=24000' radio2.mp3
,发现得到的音频已经可以听清楚了。如果觉得这样不够,可以尝试把采样率减到原来的 1/3,即 ffmpeg -i radio.mp3 -af 'asetrate=16000' radio3.mp3
,可以得到速度更慢的音频。
得到的音频文件:radio2.mp3、radio3.mp3。
作为英语听力成绩总是全班倒数的学生,我自然是无法直接听出来全部的英语单词,只能听出来其中一部分单词,例如 Hotel、November、India、Alpha 等等。
根据题目描述「考虑到信息的鲁棒性,X 同学使用了无线电中惯用的方法来区分字符串中读音相近的字母」,这应该是某种编码方式。实际上,我们只需要用上面几个单词进行搜索,就可以查到这是一个单词表,是字母到单词的映射。你也可以通过搜索「无线电」和「单词表」之类的关键词找到这份表格。实际上,它是北约音标字母(NATO phonetic alphabet),或者叫做「国际无线电通话拼写字母」,玩过业余无线电的选手应该对此很熟悉。
Symbol | Code Word |
---|---|
A | Alfa/Alpha |
B | Bravo |
C | Charlie |
D | Delta |
E | Echo |
F | Foxtrot |
G | Golf |
H | Hotel |
I | India |
J | Juliett |
K | Kilo |
L | Lima |
M | Mike |
N | November |
O | Oscar |
P | Papa |
Q | Quebec |
R | Romeo |
S | Sierra |
T | Tango |
U | Uniform |
V | Victor |
W | Whiskey |
X | X-ray |
Y | Yankee |
Z | Zulu |
有了字母表,即使英语听力很差,也很容易找到每个单词对应的字母是什么。
英语原文是 Foxtrot Lima Alfa Golf left-bracket Papa Hotel Oscar November Echo Tango India Charlie Alfa Bravo right-bracket
。
所以根据 flag 的格式以及「flag 花括号内只包含小写字母」的要求,解码之后的 flag 就是 flag{phoneticab}
。