ファイル chall.py
および output.txt
が与えられ、flag1、flag2、flag3 を要求された。
chall.py
には整数を受け取って別の整数を返す関数が書かれており、output.txt
にはこの関数に flag1、flag2、flag3 をそれぞれ渡した結果の整数が書かれているようだった。
解の候補は35ビットと十分少なく、処理内容を見てオーバーフローする可能性は低いと判断したので、処理をC言語に移植して解を全探索することにした。
そして、以下のプログラムを書いた。
与えられた出力値に加え、確認のために既知の入力に対する出力も探索対象に加えた。
Files chall.py
and output.txt
were given, and values for flag1, flag2, and flag3 were asked.
The file chall.py
had a function that takes an integer and returns another integer. output.txt
looked having what the function returned when each of flag1, flag2, and flag3 are passed.
The candidates of the answer is 35-bit long and the space should be small enough, and I thought risk of overflow is low enough reading the program, so I decided to rewrite the process in C and brute-force for the answer.
Then, I wrote this program.
In addition to the given output values, I added an output for a known input to the search targets for checking.
このプログラムを、ami-0fcf52bcf5db7b003
) で実行することにした。
solve.c
をインスタンスにアップロードし、以下のコマンドで実行した。
I decided to run this program on an ami-0fcf52bcf5db7b003
).
I uploaded solve.c
to the instance and ran with these commands:
すると、以下の結果が得られた。
This is the result:
この結果に基づき、flagが得られた。
I obtained the flag based on this result.