🌟
Picoctfの解説#3 Warmed Up
解説する問題
PicoCTFの解説をしていきます。
本日の問題はこちら
Warmed Up です。
環境
Hyper-V上に構築した、Ubuntu24.04です。
解説
この問題は、16進数であらわされている数字を10進数に変換しろという問題です。
16進数については、下記のサイトで紹介されておりますので、そもそも16進数ってなにと思う人は、こちらを確認してもらえればと思います。
16進数から10進数に変換するツールはWeb上に沢山あるので、それを使用すればすぐに計算結果が表示されます。
例えば、下記のサイトを使用してみてください。
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