2017年9月8日 星期五

[逆向分析] 用Ollydbg詳細分析一個簡單的程序 查看Ollydbg運作解析流程

這篇屬於簡單的技術性 文章  其他大神 請略過

Ollydbg對一般人來說 有點難上手
我用了數年時間弄通一些原理

我寫這篇是為了 "想要學習逆向而毫無任何可用資源的人" 寫的,不歡迎任何鬧事者。

首先 我寫了一小段C語言程式碼




選擇32位元編譯  不然OD無法開啟執行檔

下面這張是ollydbg開啟執行檔的樣子



在看OD分析之前,有4大窗口,請各位先了解。



窗口1: 顯示的就是那些組合語言
窗口2: 暫存器狀態
窗口3: 那些亂碼跟轉換成16進位的東西
窗口4: 堆疊狀態

首先,一般人都想看內部的那些字串

在隨意一處,右鍵  會看到如下圖。



然後你會看到這樣的圖。

點選進去之後

你會看到進入點  如下圖


至於ollydbg簡單快速鍵操作 就去看其他的網路文章,本篇重點就跳過操作教學。

從00401500   55    push  ebp    開始進入


從這張圖,各位可以看到 push  ebp 指令   對應的機械碼 就是55  這也就是CPU指令
EBP 的值 0061FF80   EIP的位址 00401500 就是當前執行的地方

堆疊區  0061FEB8   他的值為1  對應的左邊視窗  Hex Dump  數值必須相反的查看
把1放到最前面  後面的就是一堆零  這個數值1 所在的位置就是address地址 也就是堆疊的0061FEB8

接下來,往下單步執行,你會看到如此



因為push  ebp  指令  把ebp的東西  壓入堆疊   0061FEBC 往上提升1個 變成0061FEB8  這裡面儲存的就是ebp的東西 0061FF80
而Hex dump那個地方  也隨之改變成相對應的值

我們來看一下 mov  ebp,esp這行



這是還沒改變的樣子  esp: 0061FEB8    ebp: 0061FF80
這行程式碼的意思就是把esp存放到ebp裡面。
也就是ebp的值會被改變,變成跟esp一樣。
如下圖

and esp,0xFFFFFFF0這行就可以明顯觀察  esp  從0061FEB8 往上跳兩個,變成0061FEB0,暫存器也隨著改變



繼續往下,sub esp,0x20
sub 有減的意思,把原本0061FEB0往上減20



現在esp變成0061FE90



可以在0061FEB0上面 使用滑鼠左鍵 連續點2次,可改變成基準定位

下一行 call 00401EA0  這邊可以先略過,與目前的重點稍微無關
依照狀況來說,進入call裡面,下一步的地址0040150E 會壓入堆疊內。  我們暫時把這個略過。

mov dword ptr ss:[esp+0x1C],0x1
這段程式碼,也就是說 把數值1 放入esp+1C的堆疊裡面



圖片很明顯的可以看得出來



下一行 esp+0x18 也一樣照做



來看一下原始碼



1先放入X 那可以推測說,esp+0x1C 是X,esp+0x18是Y



edx 原本為無關的東西,把esp+1C內部資料放入edx



edx也隨之改變  之後的東西 也同樣改變  就略過

add eax, edx   把兩個相加  edx加上eax    加起來的值 放到eax
因此,eax變成2



我們可以推測這邊的組語 add 就是這段 z=x+y;




一樣,把eax值壓入堆疊內 再取出





取出之後,放入esp+0x4,現在0061FE94裡面的數值變成2



把main.00404000   ASCII "x=%d"放入esp裡面  就是把他壓入堆疊  0061FE90  裡面 變成00404000 format="x=%d"

後面的call printf那行,很明顯的直接讓結果顯示出來



最後讓eax變成0 清空

leave   retn  結束了這個微小的程序

以上是我的努力過程。
其他的大神,可以忽略此篇文章。


Ollydbg 2.01 繁體中文版

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