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