《加密與解密》筆記二

這次主要是記錄OllyDbg的斷點作用和使用方法。

普通斷點

這個斷點主要是把設斷部分改爲int 3也就是執行三號中斷,然後觸發中斷後程序停留開始執行中斷OD捕捉這個中斷以後將源代碼改回原來的指令。
優點:很方便的設置斷點,可以設置無數多個
缺點:容易被檢測到,比如:

#include<stdio.h>
int add(int a,int b ,int c)
{
    _asm {
        INT 3
    }
    int d = a + b + c;
    printf("%d", d);
    return 0;
}
int main()
{
    int a = 0, b = 0, c = 0,d = 0;
    if (
#ifdef _DEBUG
    (d = *(char *)(((unsigned int)add + 5) + *(int *)((unsigned int)add + 1) + 0x1E), d & 0x000000FF)
#else
        (d = (*(char *)((unsigned int)add + 0x1F)), d & 0x000000FF)
#endif  
        == 0xCC
        )
        return 0;
    add(a, b, c);
    return 0;
}

(只是說明檢測的方法,實際檢測回更簡單,因爲在C語言環境下沒辦法直接在開頭就直接設置int 3的,所以用了一下偏移,實際上一般開頭就是)
當然,防範這種檢查可以在後面一點的位置下斷點。
快捷鍵是F2

硬件斷點

圖2.25調試寄存器
我肯可以發現,其中DR0到DR4都是存放斷點的寄存器,這個時候我們只需要在OD的寄存器窗口右鍵選擇查看調試寄存器就可以看到,下斷的時候在所要下斷的代碼處右鍵斷點硬件執行就可以,然後在上方的調試->硬件斷點裏面可以刪除,或者在之前的代碼處也可以刪除。
優點:不會被檢測到斷點存在
缺點:只額可以設置4個斷點。
快捷鍵:F4是直接執行到所選位置,這裏其實運用的就是這個硬件斷點,但是隻是一次性的。

內存斷點

這個斷點的原理實際上就是將選中的內存設爲不可訪問和讀寫的,此時如果放翁到相應的內存就會觸發異常此時OD就捕獲異常並判斷這個異常是否是之前設置的哪個位置,如果是的話就發生中斷,然後通知用戶。
設置方法:
選中要下段的內存區域,然後右鍵斷點->內存寫入,用完以後(發生中斷後)就可以右鍵->斷點->刪除內存斷點。
或者是直接在要執行的代碼上右鍵斷點->內存訪問,之後的刪除部分也是一樣的。
優點:在上兩種方法失效的情況下可以嘗試使用這種方法。
缺點:會降低速度

內存訪問一次性斷點

這個斷點就是藉助了段頁式內存管理,在OD按一下上面的m或者是ALT+M可以看到很多段,在這些段上右鍵或是F2就可以在訪問上設置斷點,這個是一個一次性的斷點,其中裏面的設置訪問斷點和這個功能一樣,只不過不是一次性的。

消息斷點

這個就涉及到之前的Win32裏面的消息了,實質上就是對某一個窗口設置一個觸發某個消息時的一個斷點,方法是:
點擊工具欄的w,然後在程序執行到相應窗口時點右鍵刷新找到相應的窗口以後右鍵就可以設置相應的消息斷點了

條件斷點

其實就是選定某一條指令當然後設定條件斷點(Shift + F2)然後輸入條件就好了,比如我在循環處寫一個ecx==00000000,之類的就可以等他跳出循環了再看變化,或者是在調用函數的一開始,我們可以判斷讓他滿足某一個條件,函數的參數是由ebp進行相加得出的(在入棧的時候esp會一直往小地址走,然後調用了一個函數之後會現有mov ebp,esp,然後纔是add esp,….所以ebp往後的前四個字節(ebp + 0~3)就是第一個參數(ebp所指的4字節的數字是retu時的返回地址,我們可以對這個地址修改達到一個攻擊手段)然後第四個字節時函數的第一個參數,因爲一開始我們的調用慣例都是默認的_cdecl或者是_stdcall,都是由右往左入棧,所以有:
int a,b,c;
add(a,b,c);
mov eax,dword ptr[c]
push eax
mov eax,dword ptr[b]
push eax
mov eax,dword ptr[a]
push eax
call add(這一句實際上是push的下面那個指令的地址)
所以此時的esp後面的內容是:一個地址,a,b,c。
所以我們要監控變量a只需要:
[ebp + 4]== …..就可以。

之後是監控條件斷點

這個其實就是之前監控的一個升級版,這個可以列出你想要得到執行某一個指令時的某一內容的所有情況:
摁shift+F4然後就會出現:
這裏寫圖片描述
然後如果條件那一欄不填寫也是OK的只是不會有特別顯著的提醒,但是一定要注意的是監控的表達式一定要寫。
書上的一個例子:
這裏寫圖片描述
這裏寫圖片描述
這樣就很直觀的可以看出數據的變化了。(這個Log data是用Alt + L快捷鍵打開的)

發佈了46 篇原創文章 · 獲贊 24 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章