人生で初めてCTFに出てみた。解いた問題のWriteupをメモしておく

  • Three(Reversing)

    • Ghidraにかけると、フラグが難読化されていることがわかる
    • 難読かの仕組みがとても単純なので、辿っていけば解ける
  • Leak(Reversing)

    • 通信内容(pcap)とサーバープログラムが与えられる
    • Ghidraでサーバープログラムをみると、入力されてきたものを暗号化して送ってくれるプログラムだとわかる
      • 暗号化といっても鍵ファイルとXORを取っているだけ
      • ということはもちろん、pcapの内容をもう一度送れば平文が返ってくる
        • (Content xor PrivKey) xor PrivKey == Contentなので
    • ここまでは突き止めたものの、なんかどうもうまく通せず、最終的にチームメイトに通してもらった
  • Poker(Reversing)

    • 後日解いた
    • Indian Pokerのプログラムのバイナリが与えられる
      • 何回も勝つとフラグを教えてくれる
    • 解き方
      • とりあえずGhidraで解析してみる
        • main:
          • whileループから抜けると、フラグを教えてくれる関数が呼ばれる(その関数の中を見てもフラグは難読化されている)
          • whileループから抜けるためには、99回勝たなければいけないとわかる
      • 99の部分を0に変えて、1回勝ったらフラグを教えてくれるようにする
        • hex editorで該当部分を0x63(99) 0x00に書き換え
        • その後プレイしたら順当にフラグを教えてもらえる

感想 CTFは未経験、ぜんぜん勉強もしたこともなかったが参加できて楽しかった。解けた時の脳汁が気持ちよかった。これを機にCTFに興味が出てきたので、勉強を始めていきたい。