記録は作業の証

鉄道とコンピュータ

picoCTF Write-up keygenme-py

問題文

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_keybUsername_trial をSHA256でハッシュ化したものと比較している。
  • decrypt_full_version という関数で、暗号化された文字列 full_versionuser_key を使って復号している。
  • 復号できたコードを実行し、「フルバージョン」に移行する。

bUsername_trialFREEMAN という文字列である。復号鍵は、 FREEMAN をSHA256でハッシュ値を計算し、その16進数表現での一部の文字を取りだして並べかえたもののようだ。

解答

Racketで計算してみる。

gist1a3f6e96013dd25b4b3c5175f3206c0c