动态调试 OD篇
動態(tài)分析分為用戶模式和內(nèi)核模式
*用戶模式調(diào)試器是指用來調(diào)試用戶模式應用程序的調(diào)試器,
*內(nèi)核模式調(diào)試器是指能調(diào)試系統(tǒng)內(nèi)核的調(diào)試器
OllyDbg
1、 ollyDbg是一款具有可視化界面的用戶模式調(diào)試器,可以在各種版本的windows上運行,一般只能分析32位的可執(zhí)行程序
2、 ollyDbg的cpu窗口包括五個面板窗口,分別是反匯編面板,寄存器面板,信息面板,數(shù)據(jù)面板和棧面板
*反匯編面板窗口的快捷鍵
Addres例:顯示被雙擊行地址的相對地址,再次雙擊返回標準地址模式。
Hex dump: 設置或取消無條件斷點,對應的快捷鍵是“F2”鍵。
Dissassembly: 調(diào)用匯編器,可直接修改匯編代碼,對應的快捷鍵是空格鍵。
Comment :允許增加或編輯注釋,對應的快捷鍵是“;”鍵。
從鍵盤上選擇多行,可按“shift”鍵和上下鍵,也可以右鍵菜單命令執(zhí)行,
按“Ctrl”鍵按上下光標鍵,可逐行滾動匯編窗口
*數(shù)據(jù)面板窗口
要顯示指定內(nèi)存地址的數(shù)據(jù),可單擊右鍵快捷菜單中的“Go to experssion”命令,或按“Ctrl+G”快捷鍵,打開地址窗口輸入地址
3、單步跟蹤
Ctrl +F9 知道出現(xiàn)ret指令時中斷。
Alt+F9 若進入系統(tǒng)領空,此命令可瞬間回到應用程序領空。
*所謂的領空實際上是指在某一時刻CPU的CS:EIP指向的某段代碼的所有者。
*在進入子程序的過程中,若想回看之前單步跟蹤的代碼,可以按“-”(減號)鍵;
*若想讓光標回到當前EIP所指向的語句,可以單擊C按鈕或者雙擊EIP寄存器。
如果程序進入死循環(huán),可以按“F12”鍵暫停程序。
4、設置斷點
設置斷點后按“Alt+B”快捷鍵或者單擊B按鈕,可以打開斷點窗口。
*其中“Always”表示斷點處于激活狀態(tài),“Disable”表示斷點停用。
空格鍵可以切換其狀態(tài)。也可以通過右鍵快捷菜單管理折現(xiàn)斷點。
按“Ctrl +G”快捷鍵打開跟隨表達式窗口。可以搜索API函數(shù)
*在windows 9x中,OllyDbg無法隊API函數(shù)入口點設置斷點,因此不能用此方法設置斷點
在返回變窗口中單擊右鍵,在彈出的快捷菜單中選擇“Search for-Name(label)in eurrent module ”(查找當前模塊的名稱)選項或按“Ctrl+N”快捷鍵,獲取當前程序的API名稱的列表
API函數(shù)的定義
API函數(shù)大都采用 _stdcall調(diào)用約定,即函數(shù)入口參數(shù)按從右到左的順序入棧,由被調(diào)用著清理棧中的參數(shù),返回值放在eax寄存器中。
通過屏蔽程序的某些功能或改變程序流程時程序的保護方式失效的方法稱為“爆破”
按“Ctrl”快捷鍵,輸入地址,可以查看數(shù)據(jù)窗口,
.常用斷點
常用的斷點由INT 3 斷點、硬件斷點、內(nèi)存斷點、消息斷點等
5.INT 3 斷點
當執(zhí)行一個INT3斷點時,該地址處的內(nèi)容被調(diào)試器用INT 3指令替換了。實際上就是被替換成了“CC”
*使用INT 3斷點的有點時可以設置無數(shù)個斷點,缺點是改變了原程序機械碼,容易被軟件檢測到。(躲過檢測的方法時將斷點設在函數(shù)內(nèi)部或末尾,列如設在函數(shù)入口的下一行
6、硬件斷點
硬件斷點與DRx調(diào)試寄存器有關
DRx調(diào)試寄存器共有8個(DR0~DR7),每個寄存器特性如下
DR0~DR3:調(diào)試地址寄存器,用于保存需要監(jiān)視的地址,例如設置硬件斷點
DR4~DR5:保留未公開具體應用
DR6:調(diào)試寄存器組狀態(tài)寄存器
DR7:調(diào)試寄存器組狀態(tài)就差年起。
硬件斷點的原理時使用DR0~DR3設定地址,并使用DR7設定狀態(tài)。
硬件執(zhí)行斷點與CC斷點的作用一樣,但因為硬件執(zhí)行斷點不會將首字節(jié)修改為“CC”,所以更難檢測。
設斷的方法是在指定的代碼單擊右鍵,執(zhí)行快捷菜單中的“Breakpoint”->Hardware,on execution“(斷點->硬件執(zhí)行)命令
刪除硬件斷點,單擊菜單項“Dbug“——>”Hardware breakpoints”(調(diào)試->硬件斷點)打開硬件斷點版面,單擊Deletex,刪除相應斷點。
硬件斷點的優(yōu)點是速度快沒在INT3斷點容易被發(fā)現(xiàn)的地方使用硬件斷點會有很好的效果,缺點是最多只能使用4個斷點。
7、內(nèi)存斷點
ollyDbg可以設置內(nèi)存訪問斷點和內(nèi)存寫入斷點,原理是對所設的地址賦予不可訪問的/不可寫屬性。
因為每次都要通過比較來確定是否應該中斷,所以內(nèi)存斷點會降低OllyDbg的執(zhí)行速度——可能是考慮到執(zhí)行速度規(guī)定只能下一個內(nèi)存斷點吧
硬件斷點會中斷在程序觸發(fā)硬件寫入斷點的下一條指令處,所以硬件斷點是在觸發(fā)硬件斷點的下一條指令處下斷,而內(nèi)存斷點是在觸發(fā)斷點的指令處下斷
內(nèi)存代碼不修改源代碼,不會項INT3斷點那樣因為修改代碼被程序校驗而導致下斷失敗,
Windows對內(nèi)存使用段頁式的管理方式。在OllyDbg里按“Alt+M“快捷鍵顯示內(nèi)存,可以看到許多個段,每個段都有不可訪問、讀、寫、執(zhí)行屬性。下斷點的快捷鍵式F2用與對整個內(nèi)存塊設置該類斷點。這個斷點是一次性斷點,當所在段被讀取或執(zhí)行時就會被中斷,中斷以后,斷點將會被刪除
8、消息斷點
Windows本身是消息驅(qū)動的,如果調(diào)試時沒有合適的斷點,可以嘗試使用消息斷點。
消息斷點與INT3斷點的區(qū)別在于:
*INT 3斷點可以在程序啟動之前設置,
*消息斷點只有在窗口被創(chuàng)建之后再能被設置并攔截信息
9、條件斷點
斷點在滿足一定條件時才會中斷,這類斷點稱為條件斷點。
*條件斷點是一個帶有條件表達式的普通INT3斷點,結(jié)果非零或者表達式有效,則斷點生效
**在地址處設置條件斷點的快捷鍵“shift+F2“。
在OllyDbg里,如果想得到第一個參數(shù)的內(nèi)存地址,可以使用“【ESP+4】;如果想得到此地址指向的字符串,就必須使用”【【ESP+4】】“.
***在函數(shù)的第一行按快捷鍵“Shift+F4“,可以打開條件窗口記錄窗口。
10、調(diào)試符號
調(diào)試符號時被調(diào)試程序的二進制信息與原程序信息之間的橋梁,是在編譯器將源文件編譯為可執(zhí)行程序的過程中為支持調(diào)試而摘錄的調(diào)試信息。
*調(diào)試信息包括變量、類型。函數(shù)名。源代碼行等。
目前看的不是很明白暫時跳過
11、OllyDbg的常見問題
*亂碼問題
這是因為OD將這段代碼當成了數(shù)據(jù),沒進行反匯編識別。此時只要執(zhí)行右鍵快捷菜單中的“Analysis->”Analyse code“(”分析”—”分析代碼“)命令或者按“Ctrl+A”快捷鍵,強迫OD重新分析代碼即可,如果還是無法識別,可以嘗試執(zhí)行右鍵快捷菜單中的“Analysis->”Remove analysis form module”(“分析”—“從模塊中刪除分析”)命令或在UDD目錄中刪除相對應的UDD文件
OD修改EIP
將光標移到需要修改的地址上,執(zhí)行右鍵快捷菜單中的“New origin here”(在此處新建EIP)命令或使用快捷鍵”Ctrl+”,即可修改EIP。
*UDD
OD將所有與程序或模板相關的信息保存在單獨的文件中,以便在模板重新加載時繼續(xù)使用,這些信息包括標簽、注釋、斷點、監(jiān)視、分析數(shù)據(jù)、條件等
*已經(jīng)刪除了斷點,OD重新加載時這些斷點重新出現(xiàn)
將配置文件ollydbg,ini中相應內(nèi)容改成“Back UDD files =1”,即可解決
*微調(diào)窗口顯示 “Ctrl+上下鍵”對反匯編或數(shù)據(jù)窗口翻動1字節(jié)。
總結(jié)
- 上一篇: Yahoo中文
- 下一篇: 程序员都在用的电脑小技巧,一遍就学会,每