OllyDbg調試器-動態調試

調試方式

OD有2種調試方式選擇:

  第一種是“File”->"Open"打開選擇一個未運行的程序進行調試

  第二種是“File”->"attach"附加到一個正在運行的程序進行調試

調試時常用快捷鍵

F7 單步步進,遇到 call 會進入
F8 單步步過,遇到 call 不會進入
F2 設置斷點
F9 運行程序,直到遇到斷點
Ctrl + F9 運行程序,直到遇到ret(函數返回)
Alt + F9 運行程序,直到回到應用程序領空

設置斷點

INT 3斷點(F2)

INT 3斷點實際上是把要中斷的地方的指令改爲INT 3,其機器碼爲0xCC,INT 3會導致異常,調試器會捕獲該異常進而停留在該處然後將指令恢復繼續執行,當下達斷點後,程序的指令就會被修改,這時應用程序時可以檢測到程序是否被下了斷點的,比如在程序的函數入口處下斷點,那麼程序可以在進入該函數前,檢測入口函數的第一個字節是否爲0xCC,進而判斷程序是否被跟蹤,解決方法時在一些不常被檢測的地方下斷點,如函數內。

內存斷點

內存斷點是在內存被讀或寫時中斷,將設斷的內存設置爲不可讀或不可寫,進而拋出異常被調試器捕獲,需要注意,內存斷點只能有一個,因爲內存斷點的效率比較慢,程序在拋出異常後,調試器會比較異常的地址是否爲斷點的地址,如果是則中斷,否則繼續執行,內存斷點可以在指定區域、段、行上設下,比如可以“Alt+M”彈出的內存窗口中在任意的段上設內存斷點,當讀或寫該段時,程序就會中斷,如在代碼段上設下內存訪問斷點,那麼在非應用程序領空時,按“F9”就可快速跳轉到程序領空。

消息斷點

消息斷點是在消息被觸發時產生中斷。Windows是由消息驅動,點擊按鈕、移動鼠標等動作時,都有消息產生,設下不同的消息斷點就可在這些動作發生時中斷程序。消息是控件發出的,因此斷點也是針對控件下的:“View” -> "Windows"彈出與被調試窗口相關句柄,選擇句柄右鍵->"Message breaking on ClassProc"彈出的窗口中選擇消息類型即可,消息中斷後會來的系統代碼處,,跳轉回應用程序代碼後還會經過幾次消息循環(系統與應用程序代碼之間跳轉)纔會跳轉到消息處理相關的代碼處。
條件斷點

條件斷點是在消息、寄存器、存儲器等滿足一定條件時發生中斷。在設斷處,如果滿足條件則中斷程序。

1.寄存器條件中斷

在需要設置斷點的行按“shift+F2”,在彈窗中設置條件如:ecx==20。則當程序執行到此地址時,如果ecx爲20則中斷生效。

2.存儲器條件中斷

內存條件中斷與寄存器條件中斷類似,在某行設置斷點,當運行到該行時,內存符合條件:某處爲某值,則斷點生效,程序中斷。如:在函數入口設條件:[STRING[esp+8]]=="abc",則當程序執行到該函數時,如果第二個參數的值爲"abc",那麼就斷點生效,程序中斷。注:[esp+8]表示esp+8上的值在這裏表示指針,[[esp+8]]表示指針所指的的值。

3.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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