BOFとは?
決まってる空間に決まってる分の値を入れなきゃいけないのに、制限をしなくて
決まってる空間より多くの値を入れられる弱点(あ。。日本語あってるかな)
まず、ソースコードは
すごく、簡単なソースだな。。ww
このソースファイルをgccを利用して実行ファイルを作りまーす。
その後、gdbで開こうー
main関数のところをみるとこんな感じ!
scanfをcallする前にesptpesp+04に値を入れるのが見えます。
なぜ、二つでしょうか?
scanfを使用する時、入れた値が二つありましたね。
一つは”%s”!!あと一つはbuf!
この二つを利用するので、値を入れ、stackに入れるんです。
この二つがそれです!!
0x080484d4には%sです。そしたら、0xbffff690はbufですね。
scanfを実行して確認してみたら、値が見えます。
私は1234を入れましたが値は逆の順に入ってますね。
それはlittleendian bigendianの差?です。(値が入る方向)
では、一番上に書いてる通り制限がないので値をもっと入れてみましょう。
おー12345678まで入れてました。
宣伝したbufの空間とぴったり!!では、もっと入れてみましょう。
おー0xbffff700を私が入力した数字に書き換えられました。
このまま、実行するとこんな画面が出てきました。
なぜ?????????????????????????
もし、あの値が0x36353433に書き換えられなかったら。
正常に0x004c5d36に移動したはずです。
入力が間違えてましたので修正しました。
ここで重要なのはSFPとRETです。
SFP=Save Frame Pointer
RET=return
この説明も書こうとしましたが(私は初心者です。)、
また、次回に。。。。
今日はもう、遅いのですみません。
毎週土曜日か日曜日はなるべく書くように
頑張ります!!
そして、it関係の方、仲良くしてくださったら
ありがたいです!
abex crackme1
ダブルクリックすると
こんな画面が。。OKをクリックすると
ん。。。英語苦手だけど、CD-ROMに変えてという意味かな。。。
ollydbgでファイルを開くと!!!こんな画面がwwww
もう、頭が痛い。。。。
00401018にbreak point(F2)をかけてF9ボタンを押して
00401013まで実行
次からはF7で一個づつ実行しよー!
何だか分からないけど、ESIに00401000という値が入っていたから
値を00000000にした(何でESIにそんな値が入っているんだろう。。。知ってる方は
教えてください。。。)
CMP EAX,ESI=EAXとESIを比較する
JE SHORT 0040103D=上で(CMP EAX,ESI)比較し、同じ値だったら0040103Dにジャンプする
同じじゃないとそのまま下に行く。。つまり”Nah。。。This is not a ~~”が出力される
なので、EAXとESIを同じ値になるようにいじればいいってこと??
ではJMP SHORT 00401021を JMP SHORT 00401023にして
INC(+1)を飛ばせたらEAXとESIが同じ値になるのでは。。。?
F8で進んで比較する前に値を見ると??
おぉぉー!!右にEAX=00000001 ESI=00000001 と同じ値になった!!!
0040103Dに行くうううううーー!!
成功ー!!結果にちゃんと成功したという文字が出た!!!
最近、配属先の仕事が忙しくて、ハッキングの勉強が全然できなかったなー
もちろん、私の精神力も弱かったwww
それで、気づいたが今まで勉強していた
事をほぼ忘れてしまった。。。
このままでは自分がなりたいホワイトハッカーになれないから。。。
一ヶ月分の給料をほぼ、投資して
通信学習に登録した!!!
c言語の基礎からやり直し!!!
頑張ろうーーー!!


























