もうちょっと説明書いてほしいなぁ( ;๑・ิټ・ิ๑)

これがなんだか分からんがとりあえず

今日勉強したところは、昨日の続きで、

 

 今回の課題は 

 本当にリターンアドレスを書き換えることで

shellcodeを実行させることが出来るのかを試す』

 ということです。

 

( ๑・ิټ・ิ๑)『最初の *r は int型のポインタだね。』

( ๑・ิټ・ิ๑)『shellcodeは昨日の引用だね』

( ๑・ิټ・ิ๑)『 __asm__("movl %ebp,r\n"); は〜、

   普通に考えたら、 %ebp  = r\n ということで、

   特に何も考えることは無いが…。

( ;๑・ิټ・ิ๑)『待ってくれ…。良いんだが…、 %ebpって何??』

( ;๑・ิټ・ิ๑)『ベースポインタだろ…?ってことは、 

      『r というアドレスを 基準とする』ということを言いたいのか?』

✌( ՞ਊ ՞)✌

  WAKARAN!

 

( ;๑・ิټ・ิ๑)『分かる人は教えてください』

( ๑・ิټ・ิ๑)『次ぎにいこうじゃないか。』

 

10分後…。

 

( ;๑・ิټ・ิ๑) 『再来じゃ…。祟りじゃ!

     * ( r + 1 ) = ( int ) shellcode ;

              って簡単に言うたら、 文字列shellcodeを int型にキャストして、

     アドレスr に1(先輩曰く4バイト)を足したポインタ に代入。』

( (;๑・ิټ・ิ๑) 『文法的に理解は出来るが、何がしたいのか分からん。』

 

本に書いてあるのが、

 

--------------------------------------------------------------------------------------------------------------

|      shellcode  ........... ......... .......       .........   ............|%ebp   |   ret      |             

------------------------------------------------------------------------------------------------------------

0000001c                               ==>                           00000034

 

( ๑・ิټ・ิ๑)『main関数が実行させる直前のスタックはこのようになっております。』

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 |                |               |               |             |  00000034  |    %ebp       |      ret      |

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ーーーーー

0000001c                             ==>                                                     00000034

 

 ( ๑・ิټ・ิ๑)『 r はint 型です。よって 4バイトです。   愛甲さんは次にアドレスに2を加算すると r にはリターンアドレスのアドレス(0000034) が格納されることになる。

っていってるけど、『どこにも 2という数が無い』 』

( ;๑・ิټ・ิ๑) 『どういうことやぁ…。死にたくない…。 分からん…。』

 

本を眺めること 1分…。    ( (๑・ิټ・ิ๑)むっ!!!!!?

 

いやぁ、分からん…。

 

( ๑・ิټ・ิ๑)はい。わからないです。

 

 ( ๑・ิټ・ิ๑)しらん。わからんもんしかたないやん。

 

( ๑・ิټ・ิ๑) だれか助けてください

 

( ๑・ิټ・ิ๑)shellcodeを実行させる上で重要なポイントは2つ。

 

( ๑・ิټ・ิ๑)1. shellcodeをターゲットプログラムのどこかに埋め込む

      2. リターンアドレスをshellcodeの先頭アドレスをさすように上書きする

 

です。

( ๑・ิټ・ิ๑):だから、

   shellcodeのまえをすべて NOPにしてやればええやないか。

  ってことです。

 

( ๑・ิټ・ิ๑)ちなみに、じっこうするには

 

$ gcc -Wa,--execstack hoge.c -o hoge

$ hoge

sh-2.05b$

って出来るから!

うん。

 

( ๑・ิټ・ิ๑)『これ書いたの夜中の 3:40分、 眠くないなぁ。なんでだろ?』

    『これ分かる人教えてください』

 

( ๑・ิټ・ิ๑)『ばいばーい』