音声ファイル output.wav
が与えられた。
まず、このページを参考に、音声データを無音で分割して1個ずつのファイルにした。
An audio file output.wav
was given.
Checking with
I referred this page to split the audio data by slience and save the sounds in separate files:
Audacityで無音部分で分割する方法 | You Look Too Cool
まず、「解析 → Silence Finder......」を用いて無音部分にラベルをつけた。
最小無音間隔 [秒] は 0.2 、無音終端直前のラベル位置 [秒] は 0.05 とした。
次に、「ファイル → 書き出し → 複数ファイルの書き出し」でファイルを書き出した。
書き出すファイル1個ずつについてメタデータを要求するダイアログが開いたので、デフォルトのままEnterキーで閉じていった。
このとき、Enterキーを押す間隔が短すぎると、ダイアログが開く前に入力が入ってしまい、新しい書き出しが開始されてしまうので注意。
この結果、276個のファイルが得られた。これは275個のキーを押す音のファイルと1個の(最後の)無音のファイルであり、 問題文の「275回キーを押したのが記録されている」という記述と一致している。
さて、音声ファイルから情報を読み取るといえば、RACTF 2021 の I'm a Shouty Man である。
この問題のwriteupを探すと、以下が見つかった。
Firstly, I put labels to sliences using "Analyze → Silence Finder......".
I set "Minimum duration of silence [seconds]" to 0.2 and "Label placement [seconds before silence ends]" to 0.05.
Then, I exported the files using "File → Export → Export Multiple...".
It showed dialogs to enter metadata for each files to write, so I pressed the Enter key to close the dialogs with the default settings.
Note that too short period to press the Enter key results in pressing Enter before the dialog appears and starting new exporting.
As a result, 276 files are exported. This includes 275 files with key-pressing sounds and 1 file with (the last) silence. This matches with the challenge description saying "there are 275 key presses recorded".
Speaking of extracting information from an audio file, I remembered I'm a Shouty Man in RACTF 2021.
I searched for a writeup for this challenge and found this:
RACTF 2021 — Writeup. Writeup for RACTF 2021 by Nicholas and… | by Nicholas | Medium
これを参考に、得られた音声ファイルそれぞれの距離を求める以下のプログラムを作成し、実行した。
実行には11分くらいかかった。
Referring to this, I created this program to calculate distances between each divided audio files and executed.
The execution took about 11 minutes.
次に、以下のプログラムを用い、距離が短いペアを同じグループに入れるという方法でクラスタリングを行った。
「a~zと空白の27キーのみが使われている」という条件があるので、27グループになるように閾値を調整したところ、
閾値 660 でグループ数が27になった。
Then, using this program, I performed clustering by putting pairs whose distance is short to the same group.
Seeing the condition "only 27 keys of a-z and space is used", I adjusted the threshold to yield 27 groups.
As a result, setting the threshold to 660 yielded 27 groups.
結果は以下のようになった。
The result was:
ここで、4番目の音が大きくて特徴的であり、数音ごとに入っていることから、これが空白に相当すると予想し、
4番目の文字である d
を空白に、そしてアルファベットからはみ出していた 7
をかわりに d
に置換した。
すると、以下のようになった。
By the way, I guessed the 4th sound, which is loud and characteristic, corresponds to the space key.
I replaced the 4th character d
to the space character, and the non-alphabet character 7
to d
. The result is:
abc efg bfe hcijk lk m hnoiba klac abc pjk qokfrsg tccsce abnljib abc nfok uln abc qonpa aovc ok f wccr fke abc qsfi op thxaq ltck ynfxc vcxbfkozfs scghlfnep fnc slje xslpc ynfxc fke abc honep wcnc pokioki ok oap wfnvab abcnc wfp kl wfg al fkaozotfac wbfa wfp fhlja al bftdck
これを
Decrypting this via
the day had begun on q bright note the sun finaxly meeled through the rain jor the first tike in a weex and the flag is mbctf omen prace kechanival leyboards are loud close prace and the birds were singing in its warkth there was no way to antivimate what was about to hamzen
この中に、以下の部分がある。
This result has this part:
the flag is mbctf omen prace kechanival leyboards are loud close prace
これを補正することで、flagが得られた。
I obtained the flag by correcting this.