本文是 Vinking 于 2024 年举办的新年游戏(一个解谜活动)的题解,主要描述了解开题设谜题的思路与方法,包括:简单的图像隐写、在网页中执行 JavaScript 脚本、利用维基百科的链入页面(反向链接)功能进行检索、使用搜索引擎检索、使用 LLM 通过自然语言进行检索。
题目
若该链接指向的页面失效或更新,您也可以查看该页面于本文写作时刻(2024年2月13日)在 Wayback Machine 上的 存档
- 今年的解密降低了难度,不需要代码知识也可以完成解谜。
- 解谜的第一步在图片里。
- 最终密码隐藏在一段音频文件中。
- 最终密码是英文字母、数字与符号的组合。
- 东方一号是最早使用音频文件中的这种传输技术的航天器,这种传输技术可以实现无线电传输和接收图片。
- 跟上一年一样,你或许需要一个十六进制查看器,不用担心,我已经帮你找好啦,正在部署传送门。
- 得到密钥后,请将密钥发送到 i#mail.vinking.top(# 改为 @),即可领取支付宝口令红包。
第一步:获取图片中隐写的信息
首先拿到题目中的 图片。根据题目提示 2(解谜的第一步在图片里)以及提示 6(需要使用十六进制查看器),我们使用 hexed.it 打开图片文件,在文件末尾获得下一步的提示:
I feel like having KFC. Could you give me 50Yuan? Try entering V50 in the console.
第二步:在浏览器 Console 中执行 JavaScript
以下假设我们使用的是 Google Chrome 浏览器
根据第一步中获得的新提示,我们在活动页面(https://game.vinking.top/)按 F12
快捷键打开浏览器的 DevTools,并切换到 Console 标签页,然后输入 V50
,并按回车键。Console 会输出 🎉进入下一步解密
,同时打开一个新的网页(https://materials.vinking.top/,存档)。
第三步:对音频中隐藏信息的方法作出推测
新打开的网页中包含一个音乐播放器,其中会播放 一段音频。
根据题目提示 3(最终密码隐藏在一段音频文件中),可以推测下一步的信息是包含在这段音频中。根据题目提示 5(东方一号是最早使用音频文件中的这种传输技术的航天器,这种传输技术可以实现无线电传输和接收图片),推测这段音频中承载的是图像数据。
以下介绍 3 种方法,使用其中任一方法均可得到下一步的提示。
方法一:在维基百科中通过反向链接检索
首先在维基百科中检索 东方一号,虽然未能在该词条中找到与东方一号所使用的传输图像的技术有关的描述,但这并不意味着此路不通。
假设这种暂时未知的传输技术在维基百科上有相应的词条,且该词条的正文中有类似“东方一号是最早使用这种传输技术的航天器”的表述,那么在这段文字中的“东方一号“四个字上,很可能有指向东方一号词条的链接。就像是这样:
????
===
## 历史
...
[东方一号](/wiki/东方一号) 是最早使用????的航天器,...
要找到符合以上特征的词条,我们可以在东方一号的维基词条页面,点击词条右上角的 工具 > 链入页面,打开该词条的 链入页面列表。
该列表中列出了一些词条的链接,这些词条的共同点是均包含指向东方一号词条的链接。排除掉一些常见的航天术语、航天器、人名等无需关注的词条后,余下的一个名为 慢扫描电视 的词条出现在我们眼前。
查阅 慢扫描电视 的词条,其中包含以下表述:
慢扫描电视(英语:Slow-scan television),简称 SSTV,是业余无线电爱好者的一种主要图片传输方法,慢扫描电视通过无线电传输和接收单色或彩色静态图片。
## 历史
### 在航天领域的早期应用
东方一号是最早使用慢扫描电视的航空器,其慢扫描电视系统 Seliger-Tral-D 由早期可视电话改进,Seliger-Tral-D 带有两部使用 LI-23 光电管的摄像机,可传输 10fps 的 100 线视频图像。
这与题目提示 5(东方一号是最早使用音频文件中的这种传输技术的航天器,这种传输技术可以实现无线电传输和接收图片)吻合。至此可以认为慢扫描电视(SSTV)正是题目描述中的那种“传输技术”。
方法二:搜索引擎检索
根据题目提示 5(东方一号是最早使用音频文件中的这种传输技术的航天器,这种传输技术可以实现无线电传输和接收图片),我们可以使用以下检索词在 Google 或者 Bing 搜索引擎中检索:
"东方一号" "最早使用" "图像" "传输"
注意:您所选择的检索词会影响检索到的结果,如果您在一次检索中未能找到相关的结果,可以尝试调整检索词再重新检索。建议您在检索字符串中使用双引号包裹各个关键词进行精确搜索(寻找包含双引号内完全匹配的字符串的结果),这有助于提高搜索结果的相关性和准确性。
在检索结果中,出现了维基百科以及百度百科上的“慢扫描电视”词条。
查阅词条内容,我们可以找到与“东方一号是最早使用慢扫描电视的航天器”吻合的描述。至此可以认为慢扫描电视(SSTV)正是题目描述中的那种“传输技术”。
注:另外也有其他的模糊检索路径,大体的思路是先检索与东方一号传输图像有关的资料,沿此线索一直检索直到找到 SSTV 的百科词条条目。此处就不展开了。
方法三:借助 LLM 检索
2023 年是 LLM 爆火的一年,ChatGPT 等 LLM 提供了一种新的基于对话的信息检索方式。以下给出几个可以基于前述信息以及 LLM 蕴含的知识得到下一步提示的 prompt,以下分别举出 OpenAI 的 GPT-4 以及 Google 的 Gemini Pro 可以在输出中得到 SSTV
的提示词。
注意:LLM 的输出并不能直接采信,还需要与百科词条等其他信息来源做交叉验证。
OpenAI GPT-4
尝试描述音频的内容特征:
Model:
gpt-4-1106-preview
User:
一段包含图像数据的音频,长度约为2分钟。将图像编码到这段音频中的技术,曾经在20世纪的太空探索任务中被使用,这种技术可能是什么?
Assistant:
在20世纪的太空探索任务中,将图像编码到音频中的技术可能是“慢扫描电视”(Slow-Scan Television,简称SSTV)。SSTV是一种用于通过无线电频率传输静态图像的方法,主要用于业余无线电以及早期的太空任务,如阿波罗登月任务。
(下文略)
尝试复述题目提示:
Model:
gpt-4-1106-preview
User:
请列举:在20世纪的太空探索任务中,被用于通过无线电传输图像的图像编码技术
Assistant:
在20世纪的太空探索任务中,用于通过无线电传输图像的图像编码技术主要包括模拟和数字方法。以下是一些被使用的关键技术:
1. 模拟扫描技术(Analog Scan):
- 慢扫描电视(Slow-Scan Television, SSTV): 用于早期的月球和行星任务,如苏联的月球探测器和美国的早期火星探测器。SSTV以较低的帧速率传输图像,适合低带宽的通信链路。
(下文略)
Google Gemini Pro
尝试复述题目提示:
Model:
gemini-pro
User:
请列举:在20世纪的太空探索任务中,被用于通过无线电传输图像的图像编码技术
Assistant:
* 模拟图像传输技术:
* 慢扫描电视 (SSTV):SSTV 是一种模拟图像传输技术,它将图像分解成一系列水平扫描线,然后逐行传输。SSTV 系统通常用于业余无线电通信。
(下文略)
第四步:解读音频中承载的图像信息
综合前述步骤得到的信息,我们目前得出的结论是:有图像信息被依照慢扫描电视(SSTV)的编码方式编码到了音频中。也就是说,我们需要依照接收慢扫描电视(SSTV)图像的方式来获取音频中隐藏的图像。
以下介绍 2 种方法,使用其中任一方法均可得到最终的密码。
方法一:使用手机 APP 接收 SSTV 图像
在搜索引擎检索 “sstv decode”,可以在 Google Play Store 上找到一个支持接收 SSTV 图像的 Android App:Robot36 - SSTV Image Decoder。
下载安装后(如您的网络环境不能访问 Google Play Store,可以在 这里 下载这个 App 的 apk),运行该 App。在手机或另外一台设备上播放题目中的未知音频,使用该 App 可以通过麦克风接收这段音频并将其转换为图像。
需要注意的是:
- 音频需要从头开始播放,以便 App 识别音频首部 SSTV 起始信号中描述的编码模式(Scottie 1),并自动清除掉前面接收到的噪声
- 音频完全播放完成后,App 识别到音频尾部的结束信号,会自动将刚刚完成接收的图像保存到手机相册
方法二:通过编程方法接收 SSTV 图像
前面一个方法的缺点是耗时比较长,且接收过程中容易被环境中的噪声干扰。由于我们手上已经有完整的音频,所以采用编程方法来接收图像会更高效一些。
在 GitHub 检索 “sstv”,可以找到一个支持解码音频中的 SSTV 图像的 Python 程序:colaclanth/sstv。
您可以参考以下命令运行该程序以解读 SSTV 图像:
# 下载 sstv
git clone https://github.com/colaclanth/sstv.git
cd sstv
# 安装 sstv
python setup.py install
# 安装 sstv 依赖的库
sudo apt-get update
sudo apt-get install -y libsndfile1
# 下载未知音频
wget https://materials.vinking.top/8Y66NxRjFeWSoUP.mp3
# 安装 ffmpeg
sudo apt-get install -y ffmpeg
# 将 mp3 转换为 wav
ffmpeg -i 8Y66NxRjFeWSoUP.mp3 8Y66NxRjFeWSoUP.wav
# 接收 SSTV 图像
sstv -d 8Y66NxRjFeWSoUP.wav -o result.png
如果一切顺利,你应该在执行最后一行命令时看到类似下面这样的输出:
[sstv] Searching for calibration header... Found!
[sstv] Detected SSTV mode Scottie 1
[sstv] Decoding image... [###################] 100%
[sstv] Drawing image data...
[sstv] ...Done!
然后查看输出的结果文件 result.png
即可。
尾声
如您所见,以及对照题目提示 4(最终密码是英文字母、数字与符号的组合),在第四步从音频中解码得到的图片中,我们得到了最终的密码:
Wish4Success:)
将这个密码在活动页面的输入框输入并提交即可。
事实上,一开始的题目提示 3 是这样的:最终密码是纯英文字母,这与实际的答案不符。我拿着这个字符串尝试了许多种变体,例如 WishWishWishWishSuccess
,还有 WishForSuccessSmile
等等,但均不正确。在答案面前摔一跤,心态有点小爆炸~。最后大胆猜测是题目出错了,直接把图片上的字符串原样输入,发现正是正确答案😂
附加题
本文旨在描述从题目开始,直到找到谜底为止的步骤与方法,对于其中涉及到的技术和原理,没有做过多的解释。如您仍感觉意犹未尽,可以尝试思考以下这些问题的答案:
- 为什么在浏览器的 Console 中输入
V50
可以触发打开一个新窗口? - SSTV 编码的音频首尾有一段特殊的信号来标识起始和结束,这些信号是如何被识别的?
- 航天器和航空器的区别?(我认为百科词条里面称东方一号为航空器是不准确的表述)
- 东方一号使用的 SSTV 编码,和刚刚我们解读音频中包含图像的 SSTV 编码,其编码方式是完全相同的吗?
- 如果在不能打开 DevTools 的手机浏览器中,是否有办法顺利完成 V50 的步骤?
哇哦,好复杂啊!
🥰大佬文笔好好!!
我记得这个音频直接丢进频谱分析里展开可以看到mmsstv字样,实际上就指向了慢扫描电视技术,感觉线索很多,需要点无线电基础。
em...... 说实在的,你写的也确实比我写的好多了呢,另外,你在 Read more 指向的链接好像不是我写的那篇题解呢 (o-ωq)).oO