車輪の再開発ブログ

Python & CTF Beginner!

picoCTF 2022 Bbbbloat

コンテスト中に解けなかった問題の復習です。

問題

Can you get the flag? Reverse engineer this binary.

バイナリファイル(bbbbloat)がダウンロードできる。

ヒント

なし

解法

他の人のWriteupを入れると、Ghidraを入れて、それを使えばOKみたいななのが多かったのですが、Ghidraを使ったことがないので、まずはインストールするところから。

https://ghidra-sre.org/ のトップページから、Githubに飛んで、.zipをダウンロードする。適当なフォルダに、展開する。

次に、Javaを準備する。自分は、homebrewのインストール自体は済んでいる状態だったので、

qiita.com

を参考にしながら、Javaを入れる。途中で、sudoしたりした。

$ java --version
openjdk 18.0.1 2022-04-19
OpenJDK Runtime Environment Homebrew (build 18.0.1+0)
OpenJDK 64-Bit Server VM Homebrew (build 18.0.1+0, mixed mode, sharing)

Javaが入った状態で、ghidraのディレクトリにあるディレクトリで、

./ghidraRun

をする。

で、ここから、Ghidraを適当なプロジェクトで開くが、何が表示されているのか、さっぱりわからない。

クリックしていると、「開発元を検証できないため開けません」が出てきて、うまく動かないので、

macOSからアプリに起動すると「開発元を検証できないため開けません。」と表示 | IODATA アイ・オー・データ機器

を参考にして、decompileを利用できるようにすると、画面の右端に、ソースが表示されるようになった!!!(ここまでがすごく長かった)。

entryから、呼び出しているファンクションを見つけて、入力を読み取っているであろう場所を探すと、

があって、local_48が0x86187、つまり、549255 のときでOKの模様。

実際に動かして、549255を入力して、フラグゲット!