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に移動したはずです。

入力が間違えてましたので修正しました。

 

ここで重要なのはSFPRETです。

SFP=Save Frame Pointer

RET=return

この説明も書こうとしましたが(私は初心者です。)、

また、次回に。。。。

今日はもう、遅いのですみません。

毎週土曜日か日曜日はなるべく書くように

頑張ります!!

そして、it関係の方、仲良くしてくださったら

ありがたいです!

 

今日はCrack Me2を解きます

これが実行ファイルダブルクリックすると
こんな画面が出ます。
適当に入れたらNameは4文字以上らしい
Nameに4文字入れてCheckするとSerialが違うというメッセージが。。。
ではonllydbgでファイルを開けましょー!
まず、問題を解くために文字列?(日本語は難しい。。。)を検索して成功のメッセージを
探しましょう!!右画面ではUNICODEなのでもう少し下のほうに行くと?!
出たー!!何かの住所を指してる!!あそこに旅たちをーー!!
TEST AX,AXで比較して正解か正解じゃないか判断するから
何の値が入っているかちょっと上に上ってみてみましょう!
004032EFにブレーキをかけて実行!そして、NAMEとSerialに適当に値を入れてCheckしましょうーー!
004032FDまでF8で実行して
00403307をクリックして分析!!
EAXが指してる住所の値を4バイト読んでstackEBP-94にコピーするって!!
じゃ、何の値が入っているんでしょうか?
おぉぉー!!私が入力してた1234が入っている!!!!
あら???1234の上にC5D7C8CA?????
あれは。。。まさか。。。??
成功!!!!!!!!!!!!!!!!!!!!!!!!
 
 

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言語の基礎からやり直し!!!

頑張ろうーーー!!