OD的断点设置
OD 常用的斷點有: INT3斷點,硬件斷點,內存斷點,消息斷點,條件斷點。
一. INT3斷點
? ? ?1. 在CPU窗口,按F2 或 雙擊 “ Hex dump”列設置一個INT3斷點,再次按F2或雙擊 “Hex dump”則取消已經設置的?INT3斷點。
- ? ? ? 說明:如果將斷點設置到當前應用程序代碼之外,OD會彈出警告,可在“Options/Debuggging options/Security”頁取消
? ? ? ? ? ? ? 選項“Warn when breakpoint is outside the code section”。
- ? ? ?在函數入口點下斷: 按 Ctrl + G,然后輸入函數名(注意OD對大小寫敏感)后按Enter,再按F2。
? ? 2. 查看斷點
? ? ? ? 按Alt + B打開斷點窗口,該窗口可以顯示除硬件斷點外的所有斷點。"Always"表示斷點當前處于激活狀態,"Disable"表示
? ? ? ? 斷點被禁用,按空格鍵可以切換斷點的狀態。
? ?3. 通過輸入表設置斷點
? ? ? ?在OD里,按Ctrl + N鍵打開應用程序的輸入表,在函數上按 Enter 或 執行右鍵菜單“Find references to import”可打開調用
? ? ? ?此???函數的引用代碼窗口。
? ?4. 保存修改到文件?
? ? ? ?用鼠標選擇修改過的代碼,單擊右鍵, 執行“Copy to executable / Selection”。在新窗口中單擊右鍵,選擇“Save File”即可
? ? ? ?將修改保存到文件。
? ?5. 優缺點
? ? ? ? 優點:可以設置無數個斷點。缺點:改變了原程序的代碼,容易被軟件檢測到。
二:硬件斷點
? ? ? ?1. x86 CPU 最多只能設置4個硬件斷點。
? ? ? ?2. 設置方法: 1)在反匯編窗口,選中行,右鍵菜單中選擇 “Breakpoint / Hardware,on execution”。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2)在內存窗口,選擇數據,右鍵菜單選擇 "斷點 / 硬件訪問 或 硬件寫入 或 硬件執行"。
? ? ? ?3. 刪除方法: 單擊菜單 “Debug / Hardware breakpoint”,? 單擊 "Delete"。
? ? ? ?4. F4的實現原理就是利用硬件斷點。
? ? ? ?5. 優缺點: 優點速度快,不需修改原程序代碼。缺點:最多只能設置4個斷點。
三: 內存斷點
? ? ? ? 1. 內存斷點類型:OD可以設置內存訪問斷點或內存寫入斷點。
? ? ? ? 2. 內存斷點原理:對所設斷的地址設置為不可訪問或不可寫屬性。
? ? ? ? 3. 內存斷點會降低OD的速度,故其只實現一個內存斷點。
? ? ? ? 4. 設置方法:在內存窗口或反匯編窗口上,選擇數據后,右鍵菜單選擇 “ Breakpoint / Memory, on write 或? Memory,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??on access”。
? ? ? ? 5. 清除方法:在內存窗口或反匯編窗口上,右鍵菜單選擇 “Breakpoint / Remove memory breakpoint”。
? ? ? ? 6. 特點:內存斷點不修改源代碼。如果硬件斷點失效,可以嘗試內存斷點。
四:內存塊(節/段)?斷點
? ? ? ? 1. 設置方法:按 Alt + M打開Memory Map窗口,選中一個節或段,右鍵菜單選擇 “Set break-on-access” 或 F2。
? ? ? ? 2. 特點: 一次性的,中斷后斷點自動刪除。
? ? ? ? 3. 用途: 捕捉調用或返回到某個模塊時,比如:脫殼。
五: 消息斷點
? ? ? ? 1. 單擊 “查看 / 窗口”打開 Windows窗口,在選中行上選擇右鍵菜單中的 “ Message breakpoint on ClassProc”, 在彈出的
? ? ? ? ? ? 窗口中選擇需要的消息。
? ? ? ? 2. 中斷后停在系統底層代碼里,此時“Alt + F9” 或 “Ctrl + F9”無效。此時恰好是運用內存塊斷點的最好時機。
? ? ? ? 3. 刪除消息斷點:按 “Alt + B”打開斷點窗口,然后選擇消息斷點,再刪除。
六: 條件斷點
? ? ? ? 1. OD的條件斷點可以按寄存器、存儲器、消息設斷。
? ? ? ? 2. 條件斷點就是一個帶有條件表達式的INT 3 斷點。
? ? ? ? 3. 表達式的規則描述可參考OD的幫助文檔。
? ? ? ? 4. 按寄存器條件中斷:
? ? ? ? ? ? ?4.1 選中帶有寄存器的反匯編指令,按Shift + F2打開條件斷點對話框,輸入“eax ==0x12345678”,如果執行到該行時
? ? ? ? ? ? ? ? ? ??eax的值?為0x12345678,則程序暫停在這行。
? ? ? ? ? ? ?4.2 如果安裝了命令行插件,則可在命令行里直接輸入:bp 行號 eax == 值。
? ? ? ? 5. 按存儲器條件中斷:
? ? ? ? ? ? ?5.1 選擇反匯編行,按Shift + F2打開條件斷點窗口,輸入: 【STRING [esp + 4] 】==“D:\test.dat”。
? ? ? ? ? ? ?5.2 如果安裝了命令行插件,則可在命令行里直接輸入:bp CreateFileW, [ STRING [ esp +4 ] ] == L"D:\test.dat"。
?七:條件記錄斷點
? ? ? ? 1. 條件記錄斷點除了具備條件斷點的功能外,還可以記錄斷點處的函數參數或表達式的值。
? ? ? ? 2. 條件記錄斷點還可以設置通過斷點的次數。
? ? ? ? 3. 選中反匯編窗口中的行,按Shift + F4,打開條件記錄斷點窗口:
? ? ? ? ? ? 3.1 在Condition字段中輸入:條件表達式。
? ? ? ? ? ? 3.2 在Expression字段中輸入:滿足條件表達式時要記錄的內容。
? ? ? ? ? ? 3.3 在Decode value of expression as 選中對記錄內容的解析。比如: 記錄內容為【esp + 4】(字符串指針),
? ? ? ? ? ? ? ? ??則此處選擇“Pointer to ASCII String”。
? ? ? ? 4. 條件記錄斷點暫停時,可以傳遞一個或多個命令給命令行插件。比如:要在暫停時顯示ESP地址處的數據,則可
? ? ? ? ? ??在編輯框中輸入 “.d esp” (注意d前有個點號),這樣每次暫停時,都會傳遞命令 “d esp”給命令行插件。
? ? ? ? 5. 按 “Alt + L”打開日志窗口,可以看到條件記錄斷點記錄的數據。
? ? ??
? ? ? ? ? ? ?
?
? ?
?
? ? ? ? ? ? ??
?
總結
- 上一篇: OD查找QQ sessionkey教程
- 下一篇: JavaWeb框架三剑客前言