OllyDbg断点详解
1.INT3斷點
INT3斷點也被稱為CC斷點
直接按F2即可設置,可以放置無數個斷點,但是軟件內的程序易被校驗到從而失效
2.硬件斷點
硬件斷點和DRx調試器有關,所以只能放置四個斷點,右鍵后選擇Breakpoint,再選擇Hadware,on execution 即可設置,不容易被檢測到
3.內存斷點
可以設置內存訪問斷點或內存寫入斷點,原理是對所設地址賦予不可訪問/不可寫屬性,這樣當訪問/寫入時就會產生異常,OllyDbg截獲異常后,比較異常地址是不是斷點地址,如果是就會中斷
每次出現異常都需要進行判斷是否為斷點,所以斷點會降低運行OllyDbg運行速度,并且內存斷點只能設置一個,右鍵后選擇Breakpoint,再選擇Memory,on write 即可設置,不容易被檢測到
這時可能使用硬件訪問/寫入斷點也有相同效果,Memory,on write/ Memory,on access
注意:硬件訪問/寫入斷點是再觸發硬件斷點的下一條指令處下斷,而內存斷點實在觸發斷點的指令處下斷。
4.內存訪問一次性斷點
點擊 “M” 后顯示內存,按F2可以對整個內存塊設置斷點,右鍵后選擇Set memory breakpoint on access 是設置內存訪問斷點,這時兩種方式設置的斷點都是一次性斷點
5.消息斷點
windows本身是由消息驅動的,如果調試時沒有合適的斷點,可以嘗試使用消息斷點。當某個特定的窗口函數接收到某個特定的消息時,消息斷點將使程序中斷
消息斷點和INT3斷點的區別在于:INT斷點可以再程序啟動之前設置,消息斷點只有在窗口被創建之后才能被設置并攔截消息
點擊 “W” 后,顯示窗口消息,如果此時軟件沒有啟動,此處則為空白。F9啟動后,顯示如下信息,右鍵選擇Message breakpoint on ClassProc即可設置消息斷點的相關參數
Any message 為全部消息,可以下拉進行消息類型的選擇
Break on any windows 表示程序的任何窗口接收到該消息都會中斷
Log WinProc arguments 用于記錄消息過程函數的參數
刪除斷點只需要點擊 “B” ,選擇需要刪除的斷點右鍵,點擊 Remove即可
6.條件斷點
條件斷點就是滿足一定條件時才會中斷。OllyDbg的條件斷點可以按寄存器,存儲器,消息等設置斷點,條件斷點是一個帶有條件表達式的普通INT3斷點,當調試器遇到這種斷點時,會進行判斷決定是否暫停
(1)按寄存器條件中斷
在需要設置斷點的位置處,按下shift + F2 即可進行設置
(2)按儲存器條件中斷
可以先對函數設斷,Ctrl + g 打開窗口后,輸入函數名稱即可,如輸入"CreateFileA"
在此函數處按F2設斷,F9運行后,可在棧窗口看到相應的地址,地址可以在右鍵 ->Address -> Relative to ESP 調出來
這里第一個參數是FileName,如果要獲得第一個參數的內存地址,可以使用"[ESP+4]",如果還要得到此地址指向的字符串,就必須使用"[[ESP+4]]"
假設CreateFileA函數打開c:\1212.txt時需要通過OlluDbg中斷,條件斷點可以這樣設置:
將光標移到CreateFileA函數第一行,按"Shift + F2",輸入[STRING[esp+4]]==“c:\1212.txt”
(“STRING"前綴在OllyDbg中的解釋是"以零結尾的ASCII字符串”)
如果安裝了命令行插件,可以直接輸入如下的命令
bp CreatFileA,[STRING[esp+4]]==“c:\1212.txt”
如果是Unicode字符串,可以輸入如下命令
bp CreatFileW,[UNICODE[esp+4]]==“c:\1212.txt”
7.條件記錄斷點
條件記錄斷點除了具有條件斷點的作用,還能記錄斷點處函數表達式或參數的值,也可以設置通過斷點的次數,每次符合暫停條件時,計數器的值都將減1
將光標移到CreateFileA函數第一行,按"Shift + F4",輸入相關數據
如果將參數Log value of expression選為Always的話,可以使用快捷鍵"Alt + L"查看Log data窗口
總結
以上是生活随笔為你收集整理的OllyDbg断点详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为OD机试题【用户调度】用 C++ 编
- 下一篇: 两军问题和拜占庭将军问题的区块链解读(一