
【基本介紹】
OllyDbg是一種具有可視化界面的32位匯編分析調(diào)試器,是一個(gè)新的動(dòng)態(tài)追蹤工具,將IDA與SoftICE結(jié)合起來(lái)的思想,Ring3級(jí)調(diào)試器,非常容易上手,己代替SoftICE成為當(dāng)今最為流行的調(diào)試解密工具了。同時(shí)還支持插件擴(kuò)展功能,是目前最強(qiáng)大的調(diào)試工具。【軟件特點(diǎn)】
ollydbg反匯編工具支持插件擴(kuò)展功能,最擅長(zhǎng)分析函數(shù)過(guò)程、循環(huán)語(yǔ)句、選擇語(yǔ)句、表[tables]、常量、代碼中的字符串、欺騙性指令[tricky constructs]、API調(diào)用、函數(shù)中參數(shù)的數(shù)目和import表等等,這些分析增加了二進(jìn)制代碼的可讀性,減少了出錯(cuò)的可能性,使得我們的調(diào)試工作更加容易。【軟件功能】
1、啟動(dòng)您可以采用命令行的形式指定可執(zhí)行文件、也可以從菜單中選擇,或直接拖放到OllyDbg中,或者重新啟動(dòng)上一個(gè)被調(diào)試程序,或是掛接[Attach]一個(gè)正在運(yùn)行的程序。OllyDbg支持即時(shí)調(diào)試,根本不需要安裝,可直接在軟盤(pán)中運(yùn)行!
2、線程
OllyDbg可以調(diào)試多線程程序。因此您可以在多個(gè)線程之間轉(zhuǎn)換,掛起、恢復(fù)、終止線程或是改變線程優(yōu)先級(jí)。并且線程窗口將會(huì)顯示每個(gè)線程的錯(cuò)誤(就像調(diào)用 GETLASTERROR 返回一樣)。
3、調(diào)試DLLs
您可以利用OllyDbg調(diào)試標(biāo)準(zhǔn)動(dòng)態(tài)鏈接庫(kù)(DLLs)。OllyDbg 會(huì)自動(dòng)運(yùn)行一個(gè)可執(zhí)行程序。這個(gè)程序會(huì)加載鏈接庫(kù),并允許您調(diào)用鏈接庫(kù)的輸出函數(shù)。
4、源碼級(jí)調(diào)試
OllyDbg可以識(shí)別所有 Borland 和 Microsoft 格式的調(diào)試信息。這些信息包括源代碼、函數(shù)名、標(biāo)簽、全局變量、靜態(tài)變量。有限度的支持動(dòng)態(tài)(棧)變量和結(jié)構(gòu)。
5、代碼高亮
OllyDbg的反匯編器可以高亮不同類(lèi)型的指令(如:跳轉(zhuǎn)、條件跳轉(zhuǎn)、入棧、出棧、調(diào)用、返回、特殊的或是無(wú)效的指令)和不同的操作數(shù)(常規(guī)[general]、FPU/SSE、段/系統(tǒng)寄存器、在?;騼?nèi)存中的操作數(shù),常量)。您可以定制個(gè)性化高亮方案。
6、名稱
OllyDbg可以根據(jù) Borland 和 Microsoft 格式的調(diào)試信息,顯示輸入/輸出符號(hào)及名稱。Object 掃描器可以識(shí)別庫(kù)函數(shù)。其中的名稱和注釋您可任意添加。如果DLL中的某些函數(shù)是通過(guò)索引號(hào)輸出的,則您可通過(guò)掛接輸入庫(kù)[import library]來(lái)恢復(fù)原來(lái)的函數(shù)名稱。不僅如此,OllyDbg還能識(shí)別大量的常量符號(hào)名(如:窗口消息、錯(cuò)誤代碼、位域[bit fields]…)并能夠解碼為已知的函數(shù)調(diào)用。
7、已知函數(shù)
OllyDbg可以識(shí)別 2300 多個(gè)C 和Windows API 中的常用函數(shù)及其使用的參數(shù)。您可以添加描述信息、預(yù)定義解碼。您還可以在已知函數(shù)設(shè)定 Log斷點(diǎn)并可以對(duì)參數(shù)進(jìn)行記錄。
8、函數(shù)調(diào)用
OllyDbg可以在沒(méi)有調(diào)試信息或函數(shù)過(guò)程使用非標(biāo)準(zhǔn)的開(kāi)始部分[prolog]和結(jié)尾部分[epilog]的情況下,對(duì)遞歸調(diào)用進(jìn)行回溯。
9、配置
有多達(dá)百余個(gè)選項(xiàng)用來(lái)設(shè)置OllyDbg 的外觀和運(yùn)行。
數(shù)據(jù)格式:OllyDbg 的數(shù)據(jù)窗口能夠顯示的所有數(shù)據(jù)格式:HEX、ASCⅡ、UNICODE、 16/32位有/無(wú)符號(hào)/HEX整數(shù)、32/64/80位浮點(diǎn)數(shù)、地址、反匯編(MASM、IDEAL或是HLA)、PE文件頭或線程數(shù)據(jù)塊。
10、運(yùn)行環(huán)境
OllyDbg可以以在任何采用奔騰處理器的 Windows 95、98、ME、NT 或是 XP(未經(jīng)完全測(cè)試)操作系統(tǒng)中工作,但我們強(qiáng)烈建議您采用300-MHz以上的奔騰處理器以達(dá)到最佳效果。還有,OllyDbg 是極占內(nèi)存的,因此如果您需要使用諸如追蹤調(diào)試[Trace]之類(lèi)的擴(kuò)展功能話,建議您最好使用128MB以上的內(nèi)存。
11、支持的處理器
OllyDbg 支持所有 80x86、奔騰、MMX、3DNOW!、Athlon擴(kuò)展指令集、SSE指令集以及相關(guān)的數(shù)據(jù)格式,但是不支持SSE2指令集。
【常用快捷鍵】
F2:設(shè)置斷點(diǎn),只要在光標(biāo)定位的位置按F2鍵即可,在按一次F2鍵則會(huì)刪除斷點(diǎn)。F8:?jiǎn)尾讲竭^(guò),每按一次這個(gè)鍵執(zhí)行一條反匯編窗口中的一條指令,遇到call等子程序不進(jìn)入其代碼。
F7:?jiǎn)尾讲饺耄汗δ芡瑔尾讲竭^(guò)(F8)類(lèi)似,區(qū)別是遇到call等子程序會(huì)進(jìn)入其中,進(jìn)入后首先會(huì)停留在子程序的第一條指令上。
F4:運(yùn)行到選定位置,作用就是直接運(yùn)行到光標(biāo)所在位置處暫停。
F9:運(yùn)行,按下這個(gè)鍵如果沒(méi)有設(shè)置相應(yīng)斷點(diǎn)的話,被調(diào)試的程序?qū)⒅苯娱_(kāi)始運(yùn)行。
ctrl+F9:執(zhí)行到返回,此命令在執(zhí)行到一個(gè)ret(返回指令)指令時(shí)暫停,常用于從系統(tǒng)部分返回到我們調(diào)試的程序部分。
alt+F9:執(zhí)行到用戶代碼,可用于從系統(tǒng)部分快速返回到我們調(diào)試的程序部分。
【安裝配置】
OllyDBG發(fā)布版本是個(gè) ZIP 壓縮包,只要解壓到一個(gè)目錄下,運(yùn)行 OllyDBG.exe 就可以了。漢化版的發(fā)布版本是個(gè)RAR壓縮包,同樣只需解壓到一個(gè)目錄下運(yùn)行 OllyDBG.exe 即可:
OllyDBG 中各個(gè)窗口的功能如上圖。
反匯編窗口:顯示被調(diào)試程序的反匯編代碼,標(biāo)題欄上的地址、HEX 數(shù)據(jù)、反匯編、注釋可以通過(guò)在窗口中右擊出現(xiàn)的菜單 界面選項(xiàng)->隱藏標(biāo)題 或 顯示標(biāo)題 來(lái)進(jìn)行切換是否顯示。用鼠標(biāo)左鍵點(diǎn)擊注釋標(biāo)簽可以切換注釋顯示的方式。
寄存器窗口:顯示當(dāng)前所選線程的 CPU 寄存器內(nèi)容。同樣點(diǎn)擊標(biāo)簽 寄存器 (FPU) 可以切換顯示寄存器的方式。
信息窗口:顯示反匯編窗口中選中的第一個(gè)命令的參數(shù)及一些跳轉(zhuǎn)目標(biāo)地址、字串等。
數(shù)據(jù)窗口:顯示內(nèi)存或文件的內(nèi)容。右鍵菜單可用于切換顯示方式。
堆棧窗口:顯示當(dāng)前線程的堆棧。
要調(diào)整上面各個(gè)窗口的大小的話,只需左鍵按住邊框拖動(dòng),等調(diào)整好了,重新啟動(dòng)一下 OllyDBG 就可以生效了。
啟動(dòng)后我們要把插件及 UDD 的目錄配置為絕對(duì)路徑,點(diǎn)擊菜單上的 選項(xiàng)->界面,將會(huì)出來(lái)一個(gè)界面選項(xiàng)的對(duì)話框,我們點(diǎn)擊其中的目錄標(biāo)簽:
因?yàn)槲疫@里是把 OllyDBG 解壓在 F:\OllyDBG 目錄下,所以相應(yīng)的 UDD 目錄及插件目錄按圖上配置。還有一個(gè)常用到的標(biāo)簽就是上圖后面那個(gè)字體,在這里你可以更改 OllyDBG 中顯示的字體。上圖中其它的選項(xiàng)可以保留為默認(rèn),若有需要也可以自己修改。修改完以后點(diǎn)擊確定,彈出一個(gè)對(duì)話框,說(shuō)我們更改了插件路徑,要重新啟動(dòng) OllyDBG。在這個(gè)對(duì)話框上點(diǎn)確定,重新啟動(dòng)一下 OllyDBG,我們?cè)俚浇缑孢x項(xiàng)中看一下,會(huì)發(fā)現(xiàn)我們?cè)仍O(shè)置好的路徑都已保存了。有人可能知道插件的作用,但對(duì)那個(gè) UDD 目錄不清楚。我這簡(jiǎn)單解釋一下:這個(gè) UDD 目錄的作用是保存你調(diào)試的工作。比如你調(diào)試一個(gè)軟件,設(shè)置了斷點(diǎn),添加了注釋,一次沒(méi)做完,這時(shí) OllyDBG 就會(huì)把你所做的工作保存到這個(gè) UDD 目錄,以便你下次調(diào)試時(shí)可以繼續(xù)以前的工作。如果不設(shè)置這個(gè) UDD 目錄,OllyDBG 默認(rèn)是在其安裝目錄下保存這些后綴名為 udd 的文件,時(shí)間長(zhǎng)了就會(huì)顯的很亂,所以還是建議專門(mén)設(shè)置一個(gè)目錄來(lái)保存這些文件。
另外一個(gè)重要的選項(xiàng)就是調(diào)試選項(xiàng),可通過(guò)菜單 選項(xiàng)->調(diào)試設(shè)置 來(lái)配置:

新手一般不需更改這里的選項(xiàng),默認(rèn)已配置好,可以直接使用。建議在對(duì) OllyDBG 已比較熟的情況下再來(lái)進(jìn)行配置。上面那個(gè)異常標(biāo)簽中的選項(xiàng)經(jīng)常會(huì)在脫殼中用到,建議在有一定調(diào)試基礎(chǔ)后學(xué)脫殼時(shí)再配置這里。
除了直接啟動(dòng) OllyDBG 來(lái)調(diào)試外,我們還可以把 OllyDBG 添加到資源管理器右鍵菜單,這樣我們就可以直接在 .exe 及 .dll 文件上點(diǎn)右鍵選擇”用Ollydbg打開(kāi)”菜單來(lái)進(jìn)行調(diào)試。要把 OllyDBG 添加到資源管理器右鍵菜單,只需點(diǎn)菜單 選項(xiàng)->添加到瀏覽器,將會(huì)出現(xiàn)一個(gè)對(duì)話框,先點(diǎn)擊”添加 Ollydbg 到系統(tǒng)資源管理器菜單”,再點(diǎn)擊”完成”按鈕即可。要從右鍵菜單中刪除也很簡(jiǎn)單,還是這個(gè)對(duì)話框,點(diǎn)擊”從系統(tǒng)資源管理器菜單刪除 Ollydbg”,再點(diǎn)擊”完成”就行了。
OllyDBG 支持插件功能,插件的安裝也很簡(jiǎn)單,只要把下載的插件(一般是個(gè) DLL 文件)復(fù)制到 OllyDBG 安裝目錄下的 PLUGIN 目錄中就可以了,OllyDBG 啟動(dòng)時(shí)會(huì)自動(dòng)識(shí)別。要注意的是 OllyDBG 1.10 對(duì)插件的個(gè)數(shù)有限制,最多不能超過(guò) 32 個(gè),否則會(huì)出錯(cuò)。建議插件不要添加的太多。
到這里基本配置就完成了,OllyDBG 把所有配置都放在安裝目錄下的 ollydbg.ini 文件中。
【軟件特點(diǎn)】
使用Ollydbg看反匯編代碼打開(kāi)ollydbg,會(huì)看到這幾個(gè)基本界面,我的定制化了一些插件,會(huì)有些出入。不過(guò)基本一致的。

可以看到ollydbg的經(jīng)典四個(gè)布局,反匯編區(qū)域、寄存器區(qū)域、內(nèi)存區(qū)域、堆棧區(qū)域。

可以通過(guò)file->open的方法打開(kāi)需要查看的程序或者是dll文件

如下如所示,建議最好有一些8086的匯編基礎(chǔ),ollydbg支持動(dòng)態(tài)反匯編,所以您可以修改一些程序指令。

反匯編中的第一列是指令在內(nèi)存中存放的地址。

反匯編中的第二列是所謂的匯編語(yǔ)言中的操作碼。只有CPU能對(duì)它唯一識(shí)別,ollydbg的作用就是根據(jù)操作碼解讀出易于人類(lèi)閱讀的匯編語(yǔ)言。

第三列就是我們研讀的目標(biāo)了,它是我們需要學(xué)習(xí)型的匯編語(yǔ)言。

第四列是強(qiáng)大的ollydbg為我們提供的注釋功能,能看到一些windows api,或者是一些可讀的信息。當(dāng)然你也可以自己寫(xiě)注釋。

如何在ollydbg中設(shè)置斷點(diǎn)和重新加載程序
打開(kāi)ollydbg,加載需要調(diào)試的程序,如下圖。

找到我們需要下斷點(diǎn)的地方,點(diǎn)擊F2,這時(shí)在地址處就有紅色表示,即為斷點(diǎn),如下圖。

下完斷點(diǎn)后,我們點(diǎn)擊運(yùn)行,工具欄上的三角符號(hào),這時(shí)程序?qū)⑦\(yùn)行到我們下斷點(diǎn)的位置,這時(shí)我們可以看到內(nèi)存數(shù)據(jù)和寄存器都有變化,如下圖。

再次點(diǎn)擊f2,可以取消斷點(diǎn),如下圖。

如果我們想重新加載程序,我們可以點(diǎn)擊工具欄的額后退按鈕,如下圖。

點(diǎn)擊后,ollydbg會(huì)提示重新加載可執(zhí)行文件,我們點(diǎn)擊yes,如下圖。

稍等片刻,將會(huì)加載完成,程序停在程序執(zhí)行的入口,如下圖。

【相關(guān)問(wèn)題】
怎樣保存ollydbg的調(diào)試信息以便下次使用?調(diào)試菜單->;選擇符號(hào)路徑 然后在彈出的對(duì)話框設(shè)置路徑即可。注意調(diào)試文件為udd格式,,當(dāng)被調(diào)試文件路徑發(fā)生變化時(shí)調(diào)試信息不再可用,,比如:你在C盤(pán)有一個(gè)文件用ollydby調(diào)試并加入注視或斷點(diǎn)后,,把這個(gè)文件移到別的路徑下,再用ollydbg打開(kāi)調(diào)試信息注視和斷點(diǎn)不被顯示。
注意:斷點(diǎn)和注釋窗口只能查看到當(dāng)前模塊的斷點(diǎn)和注釋,且當(dāng)前被ollydbg分析為代碼的斷點(diǎn)和注釋才能被看到。|
OllyDBG怎么添加插件?
將你收集的插件放在OD\Plugin 這個(gè)目錄下就ok啦。

































