【Rev・バイナリ解析関係】strippedなバイナリからメイン関数を探す【Rev】

前書き

この記事の誤り・誤解を招く表記を発見した場合にはTwitterまでお願いします。

CTFでは主にRevをちょこちょことやっているのですが、よくstrippedなバイナリに出会うことがあります。今まで何となくmain関数を見つけてやっていたのですが(解けたとは言ってない)、なんかもっとまともなmain関数の見つけ方はないものだろうか...と考えていました。今回main関数のアドレスの見つけ方がようやくわかった気がしたので備忘録として残しておきます。多分プロCTFerの方からしたら常識みたいなところがあると思うのですが...

radare2を使う(一つ目の方法)

radare君は優秀なようで、strippedなバイナリを投げてもmain関数を見つけてきてくれます。やったね!

evtrypoint以降で呼び出されている_libc_start_mainの第1引数を参照する(二つ目の方法)

entrypointはreadelfで参照するなりIDAで解析した時のstart(_start)が対応します。このstartでは最終的に_lib_start_mainを呼び出しています。この時の第一引数にはmain関数のアドレスが格納されているので、main関数の解析時にはこのアドレスにbreakpointなりを置くとよいでしょう。