[日本語] [English]

Substitution Cipher I

プログラム substitution-cipher-i.sage と、その出力 output.txt が与えられた。
プログラムは、./flag.txt の各文字を f.substitute を用いて変換し、その結果を出力するものだった。

変換元のデータを b"DDDUCTF{}" に差し替え、f.substitute の結果を16進数で出力するようにしてみたところ、

0xeba3 0xeba3 0xeba3 0x16feb 0xe4c5 0x16753 0xf9ad 0x301bd 0x31af3

となった。このことから、同じ入力の文字は同じ出力データに変換されそうだということが読み取れた。
さらに、output.txt の各文字をサクラエディタで見ると、 各文字のコード(U+xxxx)が出力の16進数と一致することがわかった。

そこで、0x20~0x7eの各入力について出力の値を求めて逆引き用のテーブルを作ることにした。
さらに、output.txt の各文字のコードをサクラエディタで読み取り、 そこからテーブルを参照して入力の文字を求めることにした。

最終的に、以下のプログラムをSage Cell Serverで実行することでflagが得られた。

solve.txt

DUCTF{sh0uld'v3_us3d_r0t_13}

writeup by MikeCAT

DownUnderCTF 2021