看到指標,一堆人極大可能直接排斥,但是....
我用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指標的分析到此結束。
看圖稍微理解就好了,不會難,希望各位都能夠藉由這篇小程式看懂指標的流程走向。
有著作權,請勿轉載。若要分享,請註明本篇來源。
2017年9月9日 星期六
[逆向分析] 用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+0x1C 是x,esp+0x18是y
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進位與機械碼就結束了,也講完了比較數字的處理跳轉。
下節課程,會從其他主題繼續深入探討。
有著作權,請勿轉載。若要分享,請註明本篇來源。
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+0x1C 是x,esp+0x18是y
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進位與機械碼就結束了,也講完了比較數字的處理跳轉。
下節課程,會從其他主題繼續深入探討。
有著作權,請勿轉載。若要分享,請註明本篇來源。
訂閱:
文章 (Atom)
Ollydbg 2.01 繁體中文版
Ollydbg 2.01 繁體中文版 Ollydbg 2.01 繁體中文版下載: Mega: https://mega.nz/#!I2Qy1aQD!-T5zO3PaANjBHU73I4NlkY8SHMxRptbBV8TpmeFt1fo GD: h...
-
Ollydbg 2.01 繁體中文版 Ollydbg 2.01 繁體中文版下載: Mega: https://mega.nz/#!I2Qy1aQD!-T5zO3PaANjBHU73I4NlkY8SHMxRptbBV8TpmeFt1fo GD: h...
-
C++ 程式語言基本教學---輸出變數 程式碼 這兩行不難看出只是輸出宣告的變數,雙引號內的為字串,沒有雙引號的是變數,其他就是運算符。 執行他 cout 輸出 endl換行 其他我就不多說了,可以自行往前...
-
防毒精簡殺毒解析 特徵碼殺毒 簡單來說,就是判斷指紋。 幾乎所有防毒公司都有應用,只是產生指紋的方式都不同。 但是一個防毒攜帶的特徵碼太多,會導致防毒的檔案資料過大,資源被消耗。 解決方法 : 移除所有特徵碼資料 ------------------...