2017年9月9日 星期六

[逆向分析] 用Ollydbg詳細分析指標與值

看到指標,一堆人極大可能直接排斥,但是....

我用OD直接下去解釋,希望本篇文章能夠讓大家以最輕鬆的方式理解。
若要轉貼文章,請附加註明。(其他大神,請忽略此篇)



我們用OD開啟執行檔



依照之前的經驗,很快就能找到進入點。

mov    esp+0x18, 0x1
依照經驗,直接判斷為 變數a
lea eax,esp+0x18
這行 可以分析成 把1的位址 放入eax上
也就是把0061FEA8放入eax  暫存器可以明顯看到。



mov   esp+0x1C,eax
這行我們看圖去理解
0061FEA8 放入0061FEAC 堆疊內,很明顯的堆疊可以看出來。



lea   eax,esp+0x18
lea 指令就是取得位址
把0061FEA8位址放入eax
堆疊也就顯示了eax的內容



mov   esp+0x4,eax

可以看到堆疊內 0061FEA8放入0061FE94 讓他去顯示
然後你們可以看到下圖printf 輸出變數a的指標



mov   eax,esp+0x1C
把0061FEAC裡面的東西放到eax暫存器內



mov   eax,ds[eax]
這段程式碼很重要,eax原本為0061FEA8位址,ds的意義就是抽取eax位址裡面的值,放入eax他自己裡面,直接把原本的eax狀態給取代了。

從堆疊裡面可以看出來,簡單來說 eax的變化就是從0061FEA8變成數值1。



最後,輸出的結果為1



OD指標的分析到此結束。
看圖稍微理解就好了,不會難,希望各位都能夠藉由這篇小程式看懂指標的流程走向。

有著作權,請勿轉載。若要分享,請註明本篇來源。


[逆向分析] 用Ollydbg詳細分析一個簡單的程序 觀察Ollydbg 機械碼的內容與比較數字大小

上一篇 寫了簡單的程序
http://futurebluecity.blogspot.tw/2017/09/Ollydbg-Simple-Analysis.html
這是上一篇的連結

有些人可能會從Hex Dump來問,這篇我來介紹一下Hex Dump流程。(其他大神可忽略過這篇文章)

從這篇開始講解:


用32位元編譯他  然後用OD打開執行檔  出現如下圖。


其實機械碼沒有很複雜,透過觀察就能發現一些地方有變動。
Hex Dump那個視窗內,快速鍵Ctrl+G 即可看到像下圖這樣的視窗。




有些人可能會很好奇到底進入點push ebp  這個機械碼在Hex Dump的哪裡? 要如何找?

可以利用Ctrl+G後 跳出的視窗輸入該機械碼最前面的位址。
即可找到
這邊也就是輸入00401500  按下OK,下面的Address即會跳到00401500的地方

機械碼55 後面的16進位,也就是00401500 往後的機械碼



直接進入主程式說明


這邊很明顯的可以推測到 esp+0x1Cxesp+0x18y
esp很明顯是0061FE90   加1C之後變成0061FEAC
加18 變成0061FEA8    堆疊裡面,分別為1跟2
因為X先出現   Y再出現,所以堆疊區就是由下往上堆

我們可以更仔細一點,在Hex Dump按Ctrl+G 輸入堆疊區裡面的0061FEAC與0061FEA8位址
然後把Hex Dump區與堆疊區放大來看,如下圖。



程序運作到這邊,來分析一下。
cmp  eax,dword ptr ss:[esp+0x18]
比較0061FEA8的數值與eax的數值

jge short  main.00401536
這行就是條件跳轉    大於(高於)或等於就跳轉
但是我們程序沒有大於   因此不跳轉  繼續往下執行



把main.00404000壓入堆疊esp裡面,下一行 即顯示內容






下面直接jmp跳開了往後的判斷式  因此無須繼續判斷
除非上述的條件判斷不同  才會繼續



Hex Dump 16進位與機械碼就結束了,也講完了比較數字的處理跳轉。

下節課程,會從其他主題繼續深入探討。

有著作權,請勿轉載。若要分享,請註明本篇來源。

Ollydbg 2.01 繁體中文版

Ollydbg 2.01 繁體中文版 Ollydbg 2.01 繁體中文版下載: Mega:   https://mega.nz/#!I2Qy1aQD!-T5zO3PaANjBHU73I4NlkY8SHMxRptbBV8TpmeFt1fo GD: h...