Like Share Discussion Bookmark Smile

J.J. Huang   2019-07-04   OllyDBG   瀏覽次數:

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
    14
    004010D0 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
檔案清單
OllyICE.exe // 是在 cao_cong 漢化第二版基礎上 (修改) 轉譯的繁體化版
OllyDBG.EXE // 英文修改版,修改的地方與 OllyICE.exe 一樣
ollydbg.ini // OllyDBG 配置檔

├─plugin // 外掛目錄
│ // 注意:OllyICE.exe 修改版其外掛目錄固定為 plugin,不可換成其它目錄。

├─UDD
└─Original
OllyICE.exe // 是在 cao_cong 漢化第二版基礎上 修改的 (原漢化修改版)
OllyICE.chm // 原 OllyICE 簡體中文說明檔
OLLYDBG.HLP // 原 OllyDBG 簡體中文說明檔

├─漢化原版
Ollydbg.exe
│ 漢化說明.txt

└─英文原版
OLLYDBG.EXE
license.txt
readme.txt

設定檔路徑:

1
OllyDBG\ollydbg.ini

設定檔案內容:(確保內容的路徑與你OD當前的目錄一致)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
部分省略...


[History]
View file=
View text file=
Object file=
Import library=.\LIB\MFC42.LIB
Log file=log.txt
Run trace file=rtrace.txt
API help file=C:\Users\morose\Downloads\OllyDBG\OllyICE.chm
Text save file==
Symbolic data path=
UDD path=C:\Users\morose\Downloads\OllyDBG\UDD
Plugin path=C:\Users\morose\Downloads\OllyDBG\plugin


分省略...

執行OllyDBG:
這邊要注意的是,我們所執行的檔案為OllyICE.exe,這主要是漢化OllyDBG.exe

  • 首次開啟會提示要使用管理員權限來開啟

  • 設定管理員權限

總結

正所謂凡是起頭難,所以這邊僅對OllyDBG做簡單的介紹,還有下載及開啟,讓第一步非常簡單。後面的文章將會慢慢對OllyDBG做介紹,還有組合語言的學習,正所謂邊做邊學,盡量讓文章有趣一點,讓自己可以有動力一直學習。


註:以上參考了
Baidu百科OLLYDBG