OllyDbg的基本使用


注:內容整理自《逆向工程核心原理》,結合我的OllyDbg版本修改了一些內容

1. OllyDbg常用命令及其快捷鍵

指令 快捷鍵 含義
Restart Ctrl+F2 重新開始調試
Step Into F7 執行一句OP code,若遇到CALL,進入函數代碼內部
Step Over F8 執行一句OP code,若遇到CALL,僅執行函數自身,不跟隨進入
Run F9 運行(遇到斷點時暫停)
 Execute till return Ctrl+F9   執行函數代碼內的命令,直到遇到RETN命令,用於跳出函數體
 Execute till cursor F4  執行到光標所在位置 
 Comment 添加注釋 
User-defined comment 鼠標右鍵菜單Search for-User defined comment 查看用戶輸入的注釋目錄
Label : 添加標簽
User-defined label 鼠標右鍵菜單Search for-User defined Label 查看用戶輸入的標簽目錄
Breakpoint F2 設置或取消斷點
All referenced text strings 鼠標右鍵菜單Search for-All referenced text strings 查看代碼中引用的字符串
All intermodular calls 鼠標右鍵菜單Search for-All intermodular calls 查看代碼中調用的所有API函數
Name in all modules 鼠標右鍵菜單Search for-Name in all modules 查看所有API函數
Edit data Ctrl+E 編輯數據
Assemble 空格鍵 編寫匯編代碼
Copy to executable file 鼠標右鍵菜單Copy to executable file 創建文本副本(修改的項目被保留)

2. 設置點的方法(這里我們假設大本營的地址為004010ED)

①Goto命令

執行Goto命令(Ctrl+G),在打開的對話框中輸入004010ED,然后單擊OK按鈕,這樣光標就會自動定位到004010ED處

然后執行Execute till cursor(F4)命令,讓調試流運行到該處

②設置斷點

選中004010ED這一行(可以手動找,也可以使用上述Goto命令中的第一步),設置BreakPoint(F2),調試運行到斷點處會暫停

然后執行Run debugged application(F9)即可讓調試直接運行到斷點處暫停

注:在OllyDbg菜單欄中選擇View-Breakpoints(Alt+B),可以打開Breakpoints對話框,列出代碼中設置的斷點。在斷點列表中雙擊某個斷點會直接跳轉到相應位置

 ③使用注釋

選中004010ED這一行(可以手動找,也可以使用上述Goto命令中的第一步),按;鍵添加注釋

在鼠標右鍵菜單中選擇Search for-User defined comment,就能看到用戶輸入的所有注釋,雙擊相應注釋,光標將自動定位到相應位置

然后執行Execute till cursor(F4)命令,讓調試流運行到該處

④使用標簽

選中004010ED這一行(可以手動找,也可以使用上述Goto命令中的第一步),按:鍵為其添加標簽

在鼠標右鍵菜單中選擇Search for-User defined labels,就能看到用戶設置的所有標簽,雙擊相應標簽,光標將自動定位到相應位置

然后執行Execute till cursor(F4)命令,讓調試流運行到該處

3. 快速查找指定代碼的方法

①代碼執行法

當代碼量不大且程序功能非常明確時,逐條執行指令來查找需要查找的位置。

具體方法為結合使用F8和F7

②字符串檢索法

OllyDbg會先經歷一個預分析過程,此過程中會查看進程內存,程序中引用的字符串和調用的API都會被摘錄出來,整理到另外一個列表中,這樣的列表可以使用鼠標右鍵菜單Search for-All referenced strings來查看

地址00401007處有一條PUSH OFFSET 00411AF0指令,該指令中引用的00411AF0處即是字符串Hello World!,雙擊字符串,光標將定位到00401007這一位置

使用Goto命令查看00411AF0地址處的字符串:

即是Hello World!這個字符串

③API檢索法——在調用代碼中設置斷點

OllyDbg的預分析中不僅可以分析出程序中使用的字符串,還可以摘錄出程序運行時調用的API函數列表,可以通過鼠標右鍵菜單中Search for-Intermodular calls來查看該列表

雙擊其中的任意一行可以定位到該處所對應的代碼位置,使用F2下斷點即可。

④API檢索法——在API代碼中設置斷點

我們編寫的應用程序執行某種操作時(如各種IO操作),必須使用OS提供的API向OS提出請求,然后與被調用API對應的系統DLL文件就會被加載到應用程序的進程內存。使用OllyDbg中的Search for-Names可以列出被加載的DLL文件中提供的所有API

單擊Name欄目按名稱排序,通過鍵盤敲出MessageBoxW后,光標會自動定位到MessageBoxW上,雙擊之后就會顯示其代碼???(我這里好像不太行,此處存疑)

在MessageBoxW函數的內部實現中的起始地址按下F2下斷點,調試時程序運行到該處就會暫停。

4. 修改字符串的方法

①直接修改字符串緩沖區

首先找到Hello World!字符串所在的位置(我這里是00411AF0),在Dump窗口中按Ctrl+G,跳轉到這一位置,使用鼠標選中Hello World這一字符串,按Ctrl+E快捷鍵打開編輯窗口

在彈出的編輯窗口的UNICODE文本框中輸入Hello Reversing字符串,Unicode字符串必須以NULL結束,它占據兩個字節(00 00),添加NULL只能在HEX文本框中添加,修改完畢之后點擊OK即可

這種方法的優點是使用起來非常簡單,缺點是對新字符串的長度有限制,新字符串的長度不應比原字符串長(雖然可執行文件保存時一般會給字符串多留出一些空間)

注意:這種修改方式只是暫時的,終止調試后,程序中的字符串仍然沒有改變。要把這種更改保存下來,就要把更改后的程序另保存為一個可執行文件。

方法如下:在Dump窗口中,選中更改后的Hello Reversing字符串,單擊鼠標右鍵Edit-Copy to Executable,會打開Hex窗口,在彈出的Hex窗口中點擊鼠標右鍵,選擇Save file,保存為新的可執行文件即可。

②在其他內存區域新建字符串並傳遞給消息函數

待補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM