How to pronounce GIF

ファイル challenge.gif が与えられた。
このファイルはアニメーションGIFで、二次元バーコードが少しずつ表示されているようだった。

そこで、まず以下のコマンドにより、画像をフレームごとに分解した。

A file challenge.gif was given.
The file was an animated GIF and it looked like parts of 2D barcodes are presented little by little.

Seeing this, I firstly separated the image to the frames by this command:

ffmpeg -i challenge.gif challenge_frames\%03d.png

その結果、フレーム番号の1の位ごとにそれぞれ違う二次元バーコードの部分になっていそうだった。
そこで、以下のプログラムを用い、フレーム番号の1の位ごとに画像を縦方向に結合することで、二次元バーコードを復元した。

As a result, they looked be parts of different 2D barcodes, depending to the one's place of the frame number.
I reconstructed the 2D barcodes by concatenating the images vertically for each one's digit of the frame number using this program:

gattai.py

得られた画像群にそれぞれCyberChefの Parse QR Code をかけると、 いくつかの画像についてはエラーとなり、エラーにならなかった画像からは以下のデータが得られた。

I applied "Parse QR Code" in CyberChef to the resulting images.
Some images resulted in errors and these data are extracted from the rest:

さらに、CyberChefでは読めなかった画像を手元のスマホに入っていたLightning QRで読み取ると、以下のデータが得られた。

Then, I read data from the images that CyberChef cound't read with Lightning QR, which is installed in my smartphone. Here are the results:

6番の画像から得られたデータにCyberChefで From Base64 をかけると、DUCTF{aM となった。

Applying "From Base64" on Cyberchef to the data from the image no. 6 resulted in DUCTF{aM.

From Base64 - CyberChef

さらに、6番の画像から得られたデータに8番の画像から得られたデータを繋げたものにCyberChefで From Base64 をかけると、flagが得られた。

Then, I applied "From Base64" on CyberChef to the data from the image no. 6 with the data from the image no. 8 concatenated. The result was the flag.

From Base64 - CyberChef

DUCTF{aM_1_haXX0r_n0w?}

DownUnderCTF 2021