🌟

Picoctfの解説#3 Warmed Up

2025/02/08に公開

解説する問題

PicoCTFの解説をしていきます。
本日の問題はこちら
Warmed Up です。
https://play.picoctf.org/practice/challenge/58?difficulty=1&page=1&search=Warmed Up

環境

Hyper-V上に構築した、Ubuntu24.04です。

解説

この問題は、16進数であらわされている数字を10進数に変換しろという問題です。
16進数については、下記のサイトで紹介されておりますので、そもそも16進数ってなにと思う人は、こちらを確認してもらえればと思います。
https://wa3.i-3-i.info/word1613.html
16進数から10進数に変換するツールはWeb上に沢山あるので、それを使用すればすぐに計算結果が表示されます。
例えば、下記のサイトを使用してみてください。
https://tool.muzin.org/16/
Pythonを利用して、自分で計算するツールを作りたいよって人は、下記を参考にツールを作ってみてください。

def main():
    while True:
        print("\n--- 16進数 ⇔ 10進数 変換ツール ---")
        print("1: 16進数から10進数への変換")
        print("2: 10進数から16進数への変換")
        print("3: 終了")
        choice = input("選択してください (1/2/3): ")
        if choice == '1':
            # 16進数 -> 10進数
            hex_input = input("16進数を入力してください (例: FF, 0xFF など): ").strip()
            # 入力文字列に 0x や 0X がついている場合でも取り除く。
            # Python自体は '0xFF' の形式でも int(hex_input, 16) で変換可能だが、慣例として strip しておく。
            if hex_input.lower().startswith("0x"):
                hex_input = hex_input[2:]
            try:
                dec_value = int(hex_input, 16)
                print(f"【結果】10進数: {dec_value}")
            except ValueError:
                print("エラー: 有効な16進数ではありません。")
        elif choice == '2':
            # 10進数 -> 16進数
            dec_input = input("10進数を入力してください (例: 255): ").strip()
            try:
                dec_value = int(dec_input)
                # hex()関数で変換すると '0x...' の形で戻るので、必要に応じて加工
                hex_value = hex(dec_value)[2:].upper()  # [2:]で先頭の '0x' を削除し、.upper() で大文字化
                print(f"【結果】16進数: {hex_value}")
            except ValueError:
                print("エラー: 有効な10進数ではありません。")
        elif choice == '3':
            print("終了します。")
            break
        else:
            print("無効な選択肢です。1~3のいずれかを入力してください。")
if __name__ == "__main__":
    main()

※ChatGPTより提示されたプログラムです、問題なく動きました。
0x3Dを10進数にすると61という値が求められたかと思いますので、それをフラグとして、下記の形でSubmitすれば正解となります。
picoCTF{61}

まとめポイント

2進数、10進数、16進数のそれぞれの計算は、CTFに限らず頻繁に使用されるので必ず覚えておきましょう。

Discussion