動態分析與靜態分析

什麼是動態分析與靜態分析

動態分析是指破解者利用調試器跟蹤軟件的運行,尋求破解的路徑。
代碼動態調試技術,一般是通過觀察程序在運行過程中的狀態,如寄存器內容,函數執行結果,內存使用情況等等,分析函數功能,明確代碼邏輯,挖掘可能存在的漏洞。
動態分析技術中最重要的工具是調試器,分爲用戶模式和內核模式兩種類型。用戶模式調試器是指用來調試用戶模式應用程序的調試器,工作在Ring3級,例如OllyDbg、x64dbg、Visual C++等編譯器自帶的調試器。內核模式調試器是指能調試操作系統內核的調試器,例如WinDbg。

用高級語言編寫的程序有兩種形式。一種程序是被編譯成機器語言在CPU上執行的,例如Visual C++。機器語言與彙編語言幾乎是對應的,因此,可以將機器語言轉化成彙編語言,這個過程稱爲反彙編(Disasembler)。例如,在x86系統中,機器碼“EB”對應的彙編語句是“jmp shortxx”。
另一種程序是一邊解釋一邊執行的,編寫這種程序的語言稱爲解釋性語言,例如Visual Basic 3.0/4.0、Java。這類語言的編譯後程序可以被還原成高級語言的原始結構,這個過程稱爲反編譯(Decompiler)。
所謂靜態分析,是指通過反彙編、反編譯手段獲得程序彙編代碼或源代碼,然後根據程序清單分析程序的流程,瞭解模塊所完成的功能。

斷點

(以下適用於OllyDBG和x96dbg)
Ctrl+G打開跟隨指令窗口

int3

int3斷點,機器碼是0xCC,因此也被稱爲CC指令。
使用INT3斷點的優點是可以設置無數個斷點,缺點是改變了原程序機器碼,容易被軟件檢測到。例如,爲了防範API被下斷,一些軟件會檢測API的首地址是否爲0xCC(以此判斷是否被下斷)。

硬件斷點

使用DRx調試寄存器,DRx調試寄存器共有8個(DRO~DR7),每個寄存器的特性如下。

DRO~DR3;調試地址寄存器,用於保存需要監視的地址,例如設置硬件斷點。
·DR4~DR5;保留,未公開具體作用。
·DR6:調試寄存器組狀態寄存器。
DR7:調試寄存器組控制寄存器。
設斷方法是在指定的代碼行單擊右鍵,執行快捷菜單中的“Breakpoint”→
“Hardware,on execution”(“斷點”→“硬件執行”)命令(也可以在命令行中設置“HE地址”)。
刪除硬件斷點稍有些麻煩。單擊菜單項“Debug”→“Hardware breakpoints”(“調試”→“硬件斷點”),打開硬件斷點面板,如圖2.26所示,單擊“Delete x"刪除

內存斷點

ollyDbg可以設置內存訪問斷點或內存寫入斷點,原理是對所設的地址賦予不可訪問/不可寫屬性,這樣當訪問/寫人的時候就會產生異常。OllyDbg截獲異常後,比較異常地址是不是斷點地址,如果是就中斷,讓用戶繼續操作。
內存斷點只能下一個。
選中需要下斷點的地址區域,單擊右鍵,執行快捷菜單中的“Breakpoint”→
“Memory,on write”(“斷點”→“內存寫入”)命令

內存訪問一次性斷點

Windows對內存使用段頁式的管理方式。在OllyDbg裏按“Alt+M”快捷鍵顯示內存,可以看到許多個段,每個段都有不可訪問、讀、寫、執行屬性。在相應的段上單擊右鍵,會在快捷菜單中發現一個命令“Set break-on-access”(在訪問上設置斷點),其快捷鍵是“F2”,用於對整個內存塊設置該類斷點。這個斷點是一次性斷點,當所在段被讀取或執行時就會中斷。中斷髮生以後,斷點將被刪除。如果想捕捉調用或返回某個模塊(例如脫殼),該類斷點就顯得特別有用了。

消息斷點

Windows本身是由消息驅動的,如果調試時沒有合適的斷點,可以嘗試使用消息斷點。當某個特定窗口函數接收到某個特定消息時,消息斷點將使程序中斷。消息斷點與INT3斷點的區別在於:INT3斷點可以在程序啓動之前設置,消息斷點只有在窗口被創建之後才能被設置並攔截消息。
當用戶單擊一個按鈕、移動光標或者向文本框中輸入文字時,一條消息就會發送給當前窗體。
所有發送的消息都有4個參數,分別是1個窗口句柄(hwnd)、1個消息編號(msg)和2個32位長(long)的參數。Windows通過句柄來標識它所代表的對象。例如,在單擊某個按鈕時,Windows通過句柄來判斷單擊了哪一個按鈕,然後發送相應的消息來通知程序。

View–>Windows列出參數
右鍵條目,執行“Message breakpoint on ClassProc”(在ClassProc上設置消息斷點)彈出如下設置窗口,設置消息類型和中斷類型。
在這裏插入圖片描述

條件斷點

在調試過程中,我們經常希望斷點在滿足一定條件時纔會中斷,這類斷點稱爲條件斷點。0llyDbg的條件斷點可以按寄存器、存儲器、消息等設斷。條件斷點是一個帶有條件表達式的普通INT3斷點。當調試器遇到這類斷點時,斷點將計算表達式的值,如果結果非零或者表達式有效,則斷點生效(暫停被調試程序)。條件表達式的規則描述請參考OllyDbg的幫助文檔。

按照寄存器中斷:
shift+f2設置條件表達式

未完待續(

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章