CodeShell.kr - Reversal
Challenge
题面说歌手在歌中间喊了一句,但听起来不对。挑战图标 LSB 里藏着提示视频,机制可以确认到「倒放」与确切的时间区间,但短语内容尚未读出。
Listen closely. He shouts in the middle of the song, but something sounds strange. What is he saying?
仔细听。他在歌的中间喊了一声,但听起来有点怪。他在说什么?
1 | https://codeshell.kr/challenges/reversal/ |
Solution
题面给出一条 YouTube 链接(JUSTHIS《Do Not Go Gentle Into That Good Night》)。 解法链的前两步已确认:
Step 1:挑战图标
reversal-stego.png(340×340)的红通道 LSB 里藏着载荷:
1 | $ zsteg -a reversal-stego.png |
Step 2:该 Short 的韩文标题是「저스디스 신곡을
역재생하면 들리는 숨겨진 소리」 (倒放 JUSTHIS
新歌时听到的隐藏声音),视频里先播 원본(原版)再切
역재생 (倒放),作者在倒放段明显被惊到(画面打出
시발~)。这确认了题目的机制是
backmasking:歌里嵌了一段倒录的话,把歌倒放才能听清。
Step 3:用互相关把 Short 的音频与歌曲(正放/倒放两份)对齐,得到 Short 的播放结构。 这一步给出的是确切的区间,不靠听:
1 | Short t= 0.00-19.50s 正放,歌曲偏移 71.44s -> 90.44s (Δt = Δoffset,1:1) |
即 Short 先正放
song[71.4..90.4],再把同一段倒放回去,这正是
backmasking 的 演示。注意 71.4–90.4 s 并不是题面说的「中间」(304.15 s
的中点是 152 s),所以 Short
演示的是手法,不是那段喊声本身。
Step 4:不依赖 ASR
定位倒放段:写了一个包络不对称性检测器(正放语音是
「快起音、慢衰减」,倒放相反),逐秒窗口的
(上升能量 − 下降能量)/总和 在整首歌的 5 秒分桶里都落在
±0.01
以内,没有检测到明显的倒放段,说明被倒放的内容在包络
层面被音乐完全掩盖。逐秒 RMS 的前十名是成对出现的:
1 | [53, 54, 68, 69, 158, 159, 203, 204, 218, 219] |
未完成部分:短语内容的读出。Whisper
对倒放音乐的失败模式已记录清楚:tiny
输出时间戳超出音频总长、整段退化成 ,,
重复;small 对倒放片段给出
하유사 하유사 하유사(韩)与 "Seriously, I don't even know
what I'm talking about"(英),都是幻觉。而 71.4–90.4 s
正放的转写是正常歌词("…I studied the classics, J-This
2022, 대한민국, 남자, rapper, 서른 둘 I need to say this"),
说明该段本身没有明显的倒放喊声。已排除:Short
的自动字幕(kind=asr 轨道存在但 内容长度 0)、Short
倒放半段 2 秒切片逐个转写、148–168/152–162/154–160 s 三个窗口。
下次切入点:隔离 0.3–1.5 s 的孤立强瞬态只倒放那一小段(不要整段转写)、先做人声分离 再转写、换官方音源(本次用的是 알파 频道歌词视频,304.15 s)。