OD教程(彙編基礎)

一、call有以下幾種方式:

call 404000h ;直接跳到函數或過程的地址

call eax ;函數或過程地址存放在eax

call dword ptr [eax]


call dword prt[eax

]

call dword ptr [eax+5]



call dword prt[eax+5]

calldword ptr [<&API>] ;執行一個系統API


二、關於系統API

Windows應用程序運行在Ring3級別(包括我們的倚天劍:OllyDBG)


windows等級安排

但有時候需要Ring0級別才能進行操作,那咋整?

我們可以通過系統爲我們搭建的橋樑:API函數,我們也稱之爲系統提供給我們的接口。

 

因爲系統只信任自己提供的函數,所以我們要通過API才能實現對內核的操作。

你可以這麼想,假如小甲魚送給你一輛法拉利跑車,恩,你沒聽錯,是假如,不是真的!那你要怎麼來駕駛她?

 

沒錯,要通過踩油門來加速,要通過打方向盤來轉彎……而油門,方向盤

就是所謂的接口,對於法拉利來說,它們就是API函數。

 

三、關於mov指令

mov指令格式:mov dest, src

這是一個很容易理解的指令,mov指令將src的內容拷貝到dest,mov指令總共有以下幾種擴展:

movs/movsb/movsw/movsdedi,esi:這些變體按串/字節/字/雙字爲單位將esi寄存器指向的數據複製到edi寄存器指向的空間。

movsx符號位擴展,byte->word,word->dword (擴展後高位全用符號位填充),然後實現mov。

movzx零擴展,byte->word,word->dword(擴展後高位全用0填充),然後實現mov。

 

四、關於cmp指令

cmp指令格式:cmp dest, src

cmp指令比較dest和src兩個操作數,並通過比較結果設置C/?O/Z標誌位。

cmp指令大概有以下幾種格式:

cmpeax, ebx ;如果相等,Z標誌位置1,否則0.

cmpeax, [404000] ;將eax和404000地址處的dword型數據相比較並同上置位。

cmp[404000], eax ;同上。

 

五、標誌位

對於這個概念,建議魚油以關注蒼井空老師的熱情去關注它,因爲它在破解中起到的作用是至關重要的。

事實上所有的標誌位歸併與一個32位的標誌位寄存器,也就是說有32個不同的標誌位。

每個標誌位有兩個屬性:置1或置0,就相當於我們平時說的OK或不OK,OK就買魚C優盤支持小甲魚,不OK就看着小甲魚餓死街頭醬紫啦~

哈哈,大家可能更加關注的是32個標誌位都要記住?那不折騰死人才怪!

在逆向中,你真正需要關心的標誌位只有三個,也就是cmp指令能修改的那三個:Z/O/C。

Z標誌位(0標誌),這個標誌位是最常用的,運算結果爲0時候,Z標誌位置1,否則置0。

O標誌位(溢出標誌),在運行過程中,如操作數超出了機器能表示的範圍則稱爲溢出,此時OF位置1,否則置0。

C標誌位(進位標誌),記錄運算時從最高有效位產生的進位值。例如執行加法指令時,最高有效位有進位時置1,否則置0。

六、邏輯運算

邏輯運算

 

七、關於test指令

test指令格式:test dest, src

這個指令和and指令一樣,對兩個操作數進行按位的‘與’運算,唯一不同之處是不將‘與’的結果保存到dest。

即本指令對兩個操作數的內容均不進行修改,僅是在邏輯與操作後,對標誌位重新置位。

小甲魚很負責任地告訴大家該指令的實戰形態百分之九十九是醬紫:test eax, eax(如果eax的值爲0,則Z標誌位置1)

八、關於條件跳轉指令

條件跳轉指令,就是根據各種不同標誌位的條件判斷是否成立,條件成立則跳轉。


九、patch

patch也就是我們平時所說的補丁。

所謂給程序打補丁就是我們對程序破解所進行的修改,就是說像我們衣服破了,如果沒有打補丁,就會走光的意思。

OllyDBG的“/”可以查看所有打過的補丁。

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章