初心者がCpawCTF(Level3)を解いたメモ

  • Q23.[Reversing]またやらかした!
    1. みんなのWriteup見てたら「ghidra」が必要らしいのでインストール
    2. ここからzipファイルをダウンロード
      '/home/ubuntu/ghidra_11.0.2_PUBLIC_20240326/ghidra_11.0.2_PUBLIC/ghidraRun'
    3. DLしたZIPを展開したら、Ubuntuを使ってる場合「ghidraRun」を実行するんだけど、実行にはjavaが必要とのことなのでjavaをインストールしていく
      • sudo apt update
      • sudo apt upgrade
      • sudo apt-get install default-jre
      • sudo apt-cache search openjdk
      • sudo apt install openjdk-21-jdk
    4. これが終わった後に「ghidraRun」を実行すると使えた
    5. 使い方は端折るとして「ghidra」の右側の画面31行目に「local_44[local_84] = local_7c[local_84] ^ 0x19;」と書いてあるよ
      ※この記号「^」は「ビット毎の排他的論理和」をとるらしい
      (参考URL:https://www602.math.ryukoku.ac.jp/Prog1/cops.pdf
      つまり、local_7c[0]〜local_7c[13]に対して、一つずつ「0x19」との排他的論理和をとってlocal_44[0]~local_44[13]に格納してる

    6. 「ghidra」の右側の画面に表示されたコードを、新しく作ったCのファイルにコピペして、単語をC言語用にちょっと書き直す。ついでにprintfを追加して実行すればフラグゲット(/・ω・)/

      (どうでもいい話ですけど、1回限りのコードは基本コピペで済ます派です)

 

 

  • Q26.[PPC]Remainder theorem
    1. これは力業で愚直に解いた

 

  • Q29.[Crypto] Common World
    1. 公開鍵暗号で使われているRSA暗号で、Nが共通(問題分とHISTのNが同じとな!)かつ「同じ平分を暗号化」している時にCommon Modulus Attackという攻撃ができる。。。らしい。。。(゜-゜)
      ※問題文とHISTが「同じ暗号文」を暗号化しているとは問題文にも記載されていなかったので分からなかったのだ。。。まあ、分かったところで解けはしないけどね。。。
    2. https://gist.github.com/horoama/688c94fe629a321284c2b4706c75be98#file-common_modulus_attack-py-L9
      上記からソースを拝借して自分の環境で実行できるようにちょっとコードを
      お手入れした

      • import gmpy を import gmpy2 に変更
      • あとはprintにカッコ()をつけてあげる
      • コマンドで『sudo apt -y install python3-dev』を実行
      • ※gcd(a,b)・・・整数a,bの最大公約数を表す
    3. あとはpyのコードを実行してあげるとフラグがゲットできた
    4. んだけど、下記のサイトでは別の解き方「カーマイケルの定理」でやってる方がいたので後で確認しようね自分よ
      https://partender810.hatenablog.com/entry/2021/05/30/132145