まずソースコードを見る

gets(overflowme);を攻略すれば良さそう(smash me!)が書いてあるから

key値と0xcafebabeを比較し同じであれば/bin/shシェールを出してくれるから

overflowmeという配列をオーバフローさせて、keyの値を0xcafebabeに上書きすれば良い!

どのぐらいのデータを入れれば上書きができるか見るためにgdbで開いてみる

これがメイン関数でfunc関数に0xdeadbeefを渡すのが見える

これがfunc関数内だけど一番目のcallから見てみよう

まず、一番目のcallの前にブレイクをかけて実行ー!

0x40078cをespに入れてるから見てみる

overflow me :を渡している。ならば、このcallは

printfなのが分かる

だったら、つぎのcallがgets()関数のはず!

やはりputsで出力させるやつ

次の行をみると、lea eax、[ebp-0x2c]で

ebp-0x2cの住所をeaxに入れてるからoverflowme配列のスタート住所は

ebpから0x2c離れてるところ!

スタックを書いたらこんな感じ。。なはず!

さらに0x2c離れてるから0x2cを10進数で変換すると

44byte!

これで、52バイトを書き込めばfunc()関数のkey(0xdeadbeef)の値を上書きできることが分かる

成功!!!