OllyDBG - 第零章 | 基本介紹
在先前已經介紹過CE (Cheat Engine
) 的基本使用,還有組合語言的一些了解 (這塊後續會與OD (OllyDBG
) 系列一起繼續補充)。
至於這邊為什麼需要開始了解OD (OllyDBG
);因為很多的程序,單純只有找到地址是不足的,例如很多程序中的動作,其實已經有一個 Function 在裡面準備好,只是在等待被Call
,就會去執行他的動作。而這個Call
的點該如何找到,就需要透過OD (OllyDBG
) 來做反匯編並且中斷、搜尋、分析⋯等等。詳細的未來應用會慢慢透過學習實作去分享出來;下面先讓我們對OD (OllyDBG
) 有一個初步的了解。
※ 這邊只會做簡單的介紹還有軟體的下載及開啟,這邊還不會介紹如何使用。
OllyDBG 簡介
OllyDBG
是一個新的動態追踪工具,將IDA與SoftICE結合起來的思想,Ring 3級
調試器,非常容易上手,己代替SoftICE
成為當今最為流行的調試解密工具了。同時還支持插件擴展功能,是目前最強大的調試工具。
OllyDbg 詳細介紹
OllyDbg
是一種具有可視化介面的 32 位彙編-分析偵錯器。它的特別之處在於可以在沒有來源碼時解決問題,並且可以處理其它編譯器無法解決的難題。
Version 1.10
是最終的發怖版本。這個工程已經停止,我不再繼續支持這個軟體了。OllyDbg 2.00
已經面世,但是大家對於新版的使用上還有插件上似乎沒有OllyDbg 1.10
版來的好和多,所以還是持續使用OllyDbg 1.10
。
執行環境:
OllyDbg
可以以在任何採用奔騰處理器的 Windows 95、98、ME、NT 或是 XP(未經完全測試)作業系統中工作,但我們強烈建議你採用300-MHz以上的奔騰處理器以達到最佳效果。還有,OllyDbg 是極占記憶體的,因此如果你需要使用諸如追蹤偵錯〔Trace〕之類的增強功能話,建議你最好使用128MB以上的記憶體。支持的處理器:
OllyDbg
支持所有 80×86、奔騰、MMX、3DNOW!、Athlon 增強指令集、SSE指令集以及相關的資料格式,但是不支持SSE2指令集。組態:
有多達百餘個(天呀!)選項用來設定OllyDbg
的外觀和執行。資料格式:
OllyDbg
的資料視窗能夠顯示的所有資料格式:HEX、ASCII、UNICODE、 16/32位有/無符號/HEX整數、32/64/80位浮點數、位址、反彙編(MASM、IDEAL或是HLA)、PE文件頭或執行緒資料塊。說明:
此文件中包含了關於理解和使用OllyDbg
的必要的訊息。如果你還有 Windows API 求助文件的話(由於版權的問題 win32.hlp 沒有包括在內),你可以將它掛在OllyDbg
中,這樣就可以快速獲得系統函數的相關說明 。啟動:
你可以採用指令行的形式指定可執行文件、也可以從表單中選項,或直接拖放到OllyDbg
中,或者重新啟動上一個被偵錯程序,或是掛接〔Attach〕一個正在執行的程序。OllyDbg
支持即時偵錯。OllyDbg
根本不需要安裝,可直接在軟碟中執行!偵錯DLLs:
你可以利用OllyDbg
偵錯標準動態連接庫 (DLLs)。OllyDbg
會自動執行一個可執行程序。這個程序會載入連接庫,並允許你使用連接庫的輸出函數。源碼級偵錯:
OllyDbg
可以識別所有 Borland 和 Microsoft 格式的偵錯訊息。這些訊息包括來源碼、函數名、標籤、全局變數、靜態變數。有限度的支持動態(棧)變數和結構。程式碼高亮:
OllyDbg
的反彙編器可以高亮不同檔案類型的指令(如:跳轉、條件跳轉、壓入推疊、出棧、使用、返回、特殊的或是無效的指令)和不同的操作數(一般〔general〕、FPU/SSE、段/系統暫存器、在棧或記憶體中的操作數,常量)。你可以設定個性化高亮方案。執行緒:
OllyDbg
可以偵錯多執行緒程序。因此你可以在多個執行緒之間轉換,掛起、恢復、終止執行緒或是改變執行緒優先等級。並且執行緒視窗將會顯示每個執行緒的錯誤(就像使用 GETLASTERROR 返回一樣)。分析:
OllyDbg
的最大特點之一就是分析。它會分析函數程序、循環語句、選項語句、表〔tables〕、常量、程式碼中的字串串、欺騙性指令〔tricky constructs〕、API使用、函數中參數的數目,import表等等。. 這些分析增加了二進制程式碼的可讀性,減少了出現錯誤的可能性,使得我們的偵錯工作更加容易。Object掃瞄:
OllyDbg
可以掃瞄Object文件/庫(包括 OMF 和 COFF 格式),解壓程式碼段〔code segments〕並且對其位置進行轉發IP。Implib掃瞄:
由於一些DLL文件的輸出函數使用的索引號,對於人來說,這些索引號沒有實際含義。如果你有與DLL相應的輸入庫〔import library〕,OllyDbg
就可以將序號轉換成符號名稱。完全支持Unicode:
幾乎所有支持 ASCII 的操作同時也支持 UNICODE,反之亦然。名稱:
OllyDbg
可以根據 Borland 和 Microsoft 格式的偵錯訊息,顯示輸入/輸出符號及名稱。Object 掃瞄器可以識別庫函數。其中的名稱和註釋你可任意增加。如果DLL中的某些函數是通過索引號輸出的,則你可通過掛接輸入庫〔import library〕來恢復原來的函數名稱。不僅如此,OllyDbg
還能識別大量的常量符號名(如:視窗消息、錯誤程式碼、位域〔bit fields〕…)並能夠解碼為已知的函數使用。已知函數:
OllyDbg
可以識別 2300 多個 C 和 Windows API 中的常用函數及其使用的參數。你可以增加描述訊息、預定義解碼。你還可以在已知函數設定 Log 斷點並可以對參數進行記錄。函數使用:
OllyDbg
可以在沒有偵錯訊息或函數程序使用非標準的開始部分〔prolog〕和結尾部分〔epilog〕的情況下,對遞回使用進行回溯。譯者註:
1
2
3
4
5
6
7
8
9
10
11
12
13
14004010D0 push ebp \
004010D1 mov ebp,esp |
004010D3 sub esp,10h |prolog
004010D6 push ebx |
004010D7 push esi |
004010D8 push edi /
……
004010C5 pop edi \
004010C6 pop esi |
004010C7 pop ebx |epilog
004010C8 mov esp,ebp |
004010CA pop ebp |
004010CB ret /棧:
在棧視窗中,OllyDbg
能智能識別返回位址和棧框架〔Stack Frames〕。並會留下一些先前的使用。如果程序停在已知函數上,堆疊視窗將會對其參數進行分析解碼。譯者註:棧框架〔Stack Frames〕是指一個記憶體區域,用於存放函數參數和局部變數。
SEH 鏈:
跟蹤棧並顯示結構化異常關鍵句鏈。全部鏈會顯示在一個單獨的視窗中。搜尋:
方法真是太多了!可精確、模糊搜尋指令或指令序列,搜尋常數,搜尋二進制、文本字串串,搜尋全部指令位址,搜尋全部常量或位址域〔address range〕,搜尋所有能跳到選定位址的跳轉,搜尋所有使用和被使用的函數,搜尋所有參考字串串,在不同模組中搜尋所有使用、搜尋函數名稱,在全部已分配的記憶體中搜尋二進制序列。如果搜尋到多個結果,你可以對其進行快速操作。視窗:
OllyDbg
能夠列出關於偵錯程序中的各種視窗,並且可以在視窗、類甚至選定的消息上設定斷點。資源:
如果 Windows API 函數使用了參考資源串,OllyDbg
可以顯示它。其支持顯示的檔案類型僅限於附帶資源〔attached resources〕的列表、資料顯示及二進制編輯。斷點:
OllyDbg
支持各種斷點:一般斷點、條件斷點、記錄斷點(比如記錄函數參數到記錄視窗)、記憶體讀寫斷點、硬體斷點(只適用於ME/NT/2000)等。在Hit跟蹤情況下,可以在模組的每條指令上都設定INT3斷點。在使用500-MHZ處理器的 Windows NT 中,OllyDbg
每秒可以處理高達 5000 個中斷。監視與監察器:
每個監視都是一個陳述式並能既時顯示陳述式的值。你可以使用暫存器、常數、位址陳述式、布爾值以及任何複雜代數運算,你還可以比較ASCII和UNICODE字串。監察器〔inspectors〕是一種包含了兩個的索引序列的監視〔Watches〕,它以二維表的形式呈現,可以對數組和結構進行解碼分析。Heap walk.:
在關於Win95的系統中,OllyDbg
可以列出所有的已分配的堆。關鍵句:
在關於NT的系統中,OllyDbg
可列出被偵錯程序的所有系統關鍵句。執行:
你可以單步執行、步入子程序或者步過子程序。你也可以執行程序直到函數返回時、執行到指定位址處,還可以自動執行。當程序執行時,你仍然可以操縱程序並能夠檢視記憶體、設定斷點甚至修改程式碼。你也可以任意的暫停或重新啟動被偵錯的程序。Hit跟蹤:
Hit跟蹤可以顯示出目前已執行的指令或函數程序,說明 你檢驗程式碼的各個分支。Hit跟蹤會在指定指令到達之前設定斷點,而在這個指令執行後,會把這個斷點清除掉。譯者註:Hit在英文中是「擊中」的意思,指令如果執行了就表示這個指令被「擊中」了,沒有執行的指令就是「未擊中」,這樣我們就很容易看出被偵錯程序哪些部分執行了,而哪些沒有執行。
Run跟蹤:
Run跟蹤可以單步執行程序,它會在一個很大的循環緩衝區中模擬執行程序。這個模擬器包含了除了SSE指令集以外的所以暫存器、標誌、執行緒錯誤、消息、已經函數的參數。你可以儲存指令,這樣可以非常方便地偵錯自修改程式碼(譯者註:比如加殼程序)。你可以設定條件中斷,條件包括位址範圍、陳述式、指令。你可以將Run跟蹤訊息儲存到一個文件中,這樣就可以對比兩次執行的差別。Run跟蹤可以回溯分析已執行過的上百萬條指令的各種細節。統計:
統計〔Profiler〕可以在跟蹤時計算某些指令出現的次數。因此你就能瞭解程式碼的哪一部分被頻繁執行。修正檔:
內裝彙編器能夠自動找到修改過的程式碼段。二進制編輯器則會以ASCII、UNICODE或者十六進制的形式同步顯示修改後的資料。修改後的資料同其它資料一樣,能夠進行複製-貼上操作。原來的資料會自動制作備份,以便資料恢復時使用。你可以把修改的部分直接複製到執行文件中,OllyDbg
會自動修正。OllyDbg
還會記錄以前偵錯程序中使用的所有修正檔。你可以通過空格鍵實現修正檔的啟動或者禁止。自解壓文件:
當偵錯自解壓文件時,你往往希望跳過解壓部分,直接停在程序的原始入口點。OllyDbg
的自解壓跟蹤將會使你實現這一目的。如果是加保護的自解壓段,自解壓跟蹤往往會失敗。而一旦OllyDbg
找到了入口點,它將會跳過解壓部分,並準確的到達入口點。插件:
你可以把自己的插件增加到OllyDbg
中,以增加新的功能。OllyDbg
的插件能夠訪問幾乎所有重要的資料的結構、能夠在OllyDbg
的視窗中增加表單和快捷鍵,能夠使用100個以上的插件API函數。插件API函數有詳細的說明我的文件。預設值安裝已經包含了兩個插件:指令行插件和書籤插件。UDD:
OllyDbg
把所有程式或模組相關的訊息儲存至單獨的文件中,並在模組重新載入時繼續使用。這些訊息包括了標籤、註釋、斷點、監視、分析資料、條件等等更多:
這裡介紹的功能,僅僅是OllyDbg
的部分功能。因為其具有如此豐富的功能,以至於OllyDbg
能成為非常方便的偵錯器!
下載及開啟
下載位置:OllyDBG v1.1.0
x64的面世,這邊僅做個紀錄,哪怕將來會用到x64dbg
解壓縮密碼:
1 | morosedog |
檔案清單:
1 | 檔案清單 |
設定檔路徑:
1 | OllyDBG\ollydbg.ini |
設定檔案內容:(確保內容的路徑與你OD當前的目錄一致)
1 | 部分省略... |
執行OllyDBG:
這邊要注意的是,我們所執行的檔案為OllyICE.exe
,這主要是漢化OllyDBG.exe
。
首次開啟會提示要使用管理員權限來開啟
設定管理員權限
總結
正所謂凡是起頭難,所以這邊僅對OllyDBG
做簡單的介紹,還有下載及開啟,讓第一步非常簡單。後面的文章將會慢慢對OllyDBG
做介紹,還有組合語言的學習,正所謂邊做邊學,盡量讓文章有趣一點,讓自己可以有動力一直學習。