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