問題は下記の通り https://ctf.cpaw.site/questions.php?qnum=21

フラグを出す実行ファイルがあるのだが、プログラム(elfファイル)作成者が出力する関数を書き忘れてしまったらしい…

まずは対象のファイルがなんのファイルか確認

file rev100rev100: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=f94360edd84a940de2b74007d4289705601d618d, not strippe

ELFは Executable and Linking Format の略称で、WindowsのexeファイルのようにLinuxにおける実行ファイルのこと https://www.itmedia.co.jp/help/tips/linux/l0448.html

プログラムの作成者が出力する関数を書き忘れたということは、プログラム上に定数等で定義している可能性が高そう

そこでstringsコマンドを用いて、バイナリファイル内に該当の文字列が無いか確認する

stringsコマンドはバイナリファイルにおいて、文字列として読み込むことが可能なもののみを表示するコマンドである https://atmarkit.itmedia.co.jp/ait/articles/1703/09/news038.html

helpにおける文言など文字列としてプログラムに記載されている場合、内容がを確認することができる

今回は cpaw の文言でgrepすることでフラグにに関する情報が無いか確認

strings /Users/ishibashi_genki/Downloads/rev100 | grep cpaw -A 13D$FcpawfD$J{D$ yD$$aD$(kD$,iD$0nD$4iD$8kD$<uD$@!T$Le3[^_];*2$"

yakiniku! という文字を発見! これよりフラグを入力した所問題を突破

感想

リバースエンジニアリングの問題を解いたことが無かったが、stringsコマンドだったり勉強になる

そのうちアセンブラを理解して、バイナリを書き換えてプログラムを実行する必要など出てくるのだろうか...

CTF面白い!