まずソースコードを見る
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)の値を上書きできることが分かる
成功!!!








