【加解密学习笔记:第三天】OllyDbg断点介绍
INT 3 斷點
常用斷點,使用“F2”快捷鍵設置的就是 INT 3 斷點。這類斷點采用修改機器碼的方式,將設斷處的代碼更改為 “CC”,當程序運行至設斷處時,會拋出一個異常,OllyDbg會捕捉到這個異常,使得程序暫停,然后恢復程序機器碼。INT 3 斷點可以設置無限多個,但是由于 INT 3 斷點更改了機器碼,所以很容易被目標軟件檢測到。
硬件斷點
硬件斷點與 DRx 調試寄存器有關,在Intel CPU 體系架構手冊中可以找到對 DRx 調試寄存器的介紹。
DRx 調試寄存器有八個(DR0 ~ DR7),每個寄存器的特性如下:
- DR0 ~ DR3 :調試地址寄存器,用于保存需要監視的地址,例如設置硬件斷點。
- DR4 ~ DR5 :保留,未公開具體作用
- DR6 :調試寄存器組狀態寄存器
- DR7 :調試寄存器組控制寄存器
簡單來說,硬件斷點是在 DR0 ~ DR3 中設置斷點地址,DR7設置狀態。因此最多設置4個硬件斷點,當程序運行至所設定斷點時,CPU會向 OllyDbg 發送異常信息,OllyDbg處理后,中斷程序,讓我們繼續操作。所以硬件斷點不會更改程序的機器碼,具有比 INT 3 斷點更高的隱蔽性。
設斷方法:單擊右鍵,選擇 “Breakpoint” - “Hardware, on execution”
刪除斷點方法:菜單項 “Debug” - “Hardware breakpoints” 打開硬件斷點面板,選擇 “Delete” 刪除
快捷鍵 F4 :執行到光標所在的行,這一方式是相當于執行了一次硬件斷點,之后刪除
內存斷點
原理是對斷點內存地址賦予 不可訪問/不可寫 屬性,當程序試圖 訪問/寫 該內存地址時,就會發生異常,OllyDbg捕捉到這個異常并比較異常發生的地址與斷點地址,如果相同,就暫停程序,讓我們繼續操作。可能因為要比較地址的緣故,OllyDbg為了提高速度,只允許設置一個內存斷點。
內存斷點不修改機器碼,與硬件斷點一樣不會像 INT 3 斷點那樣被程序校驗導致下斷失敗,在 INT 3 下斷失敗,硬件斷點失靈的情況下,可以使用內存斷點。
設斷方法:在設斷的內存地址右鍵 “Breakpoint” - “Memory, on access/write”,這樣就可以設置內存訪問/寫入 斷點。對代碼或者數據都可以下內存斷點,對數據比較好理解,對于代碼來說,執行代碼時需要“訪問”這段代碼。所以可以對代碼設 “內存訪問” 斷點。
刪除斷點方法:右鍵 - “Breakpoint” - “Remove memory breakpoint”
內存訪問一次性斷點
該類斷點設置的對象是一個內存段,比如對程序的代碼段設斷,當從其他模塊回到程序時,就會觸發斷點。更多的用在捕捉調用或者返回某個模塊上。不多介紹了,在OllyDbg里按 “Alt+M” 顯示內存,在對于內存段上右鍵- “Set break-on-access”,快捷鍵 F2,該斷點時一次性的,斷了就刪。
消息斷點
由于windows系統是消息驅動的,所以可以對消息下斷點,在OllyDbg中運行程序后,點擊【w】,打開窗口參數表,在對于窗口上右鍵 - “Message breakpoint on ClassProc”,就會打開設置窗口,在設置窗口里選擇要下斷的消息即可,刪除斷點可按 “Alt+B” 打開斷點信息窗口,直接刪除即可。
基本上大概的斷點就是這樣,以后覺得有必要補充的再加上去
總結
以上是生活随笔為你收集整理的【加解密学习笔记:第三天】OllyDbg断点介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql数值类型占用字节及范围_mys
- 下一篇: python 四足机器人运动学_撸了个四