問題文
https://play.picoctf.org/practice/challenge/121
keygenme-trial.py
考えたこと
Pythonスクリプトを読み解くことで解くようだ。読み解くことで次のことがわかる。
- フラグに関連する文字列が格納された変数群がある。
key_part_static1_trial
key_part_dynamic1_trial
key_part_static2_trial
key_full_template_trial
check_key
という関数という関数があり、ユーザが入力した文字列user_key
とbUsername_trial
をSHA256でハッシュ化したものと比較している。decrypt_full_version
という関数で、暗号化された文字列full_version
をuser_key
を使って復号している。- 復号できたコードを実行し、「フルバージョン」に移行する。
bUsername_trial
は FREEMAN
という文字列である。復号鍵は、 FREEMAN
をSHA256でハッシュ値を計算し、その16進数表現での一部の文字を取りだして並べかえたもののようだ。
解答
Racketで計算してみる。