プログラム substitution-cipher-i.sage
と、その出力 output.txt
が与えられた。
プログラムは、./flag.txt
の各文字を f.substitute
を用いて変換し、その結果を出力するものだった。
変換元のデータを b"DDDUCTF{}"
に差し替え、f.substitute
の結果を16進数で出力するようにしてみたところ、
A program substitution-cipher-i.sage
and its output output.txt
were given.
The program converts each characters in ./flag.txt
using f.substitute
and outputs the result.
I tried changing the data to convert to b"DDDUCTF{}"
and having it output the results of f.substitute
in hexadecimal numbers.
The result was:
となった。このことから、同じ入力の文字は同じ出力データに変換されそうだということが読み取れた。
さらに、output.txt
の各文字をU+xxxx
)が出力の16進数と一致することがわかった。
そこで、0x20~0x7eの各入力について出力の値を求めて逆引き用のテーブルを作ることにした。
さらに、output.txt
の各文字のコードをサクラエディタで読み取り、
そこからテーブルを参照して入力の文字を求めることにした。
最終的に、以下のプログラムを
This implies that the same input character should be converted to the same output characters.
Also, checking each characters in output.txt
on U+xxxx
) matches the output hexadecimal numbers.
I decided to obtain outputs for each inputs in the range 0x20 to 0x7f to create a table for inversion.
I also decided to read the codes for each characters in output.txt
on Sakura Editor
and refer the table to obtain the input characters.
In conclusion, I obtained the flag by executing this program on