1. 程式人生 > >【逆向跟蹤】OllyDbg的條件斷點字串和檔案讀寫

【逆向跟蹤】OllyDbg的條件斷點字串和檔案讀寫

大牛直接無視好了
網上關於設定字串斷點的文章不多,但是這個又是一個非常實用的功能。
拍磚請輕輕的

VCDebug

VCDebug 微軟VS自帶偵錯程式套件,對字串斷點的支援依然強大。

VC支援在斷點條件中使用字串比較函式。

ASCII字符集字串斷點設定方法:


程式碼:
    strcmp(pzString, "DDLX_CHAR") == 0  
    stricmp(pzString, "DDLX_char") == 0  
    strncmp(pzString, "DDLX", 4) == 0  
    strnicmp(pzString, "ddlx", 4) == 0  


UNICODE字符集字串斷點設定方法:



程式碼:
    wcscmp(pzWString, L"DDLX_WCHAR") == 0  
    wcsicmp(pzWString, L"DDLX_wchar") == 0  
    wcsncmp(pzWString, L"DDLX", 4) == 0  
    wcsnicmp(pzWString, L"ddlx", 4) == 0  

OllyDbg

OllyDbg的條件斷點

如獲取某個檔案讀寫了哪些內容,首先CreateFileA/W Ctrl+F9後eax獲取檔案控制代碼,然後

bp ReadFile [esp+4] = eax的值設定條件斷點,看讀此檔案後傳入哪個buf做了哪些處理。

OllyDbg的字串除錯也很好用

使用快捷鍵:Shift+F2設定條件斷點,在條件中輸入,od不支援正則所以必須把字串敲全了。

ASCII字符集字串設定方法:

程式碼:
    STRING [eax] == "DDLX_CHAR"   
    STRING [eax] == "DDLX_char" //不區分大小寫  
    STRING [eax] == "DDLX" //不區分文字長度  

UNICODE字符集字串設定方法:

程式碼:
    UNICODE [eax] == "DDLX_WCHAR"  
    UNICODE [eax] == "DDLX_wchar" //不區分大小寫  
    UNICODE [eax] == "DDLX" //不區分文字長度  

WinDbg

ASCII字符集字串斷點設定方法:

程式碼:
    //全字串匹配,區分大小寫  
    bp 0041141d "r @$t1 = eax; as /ma ${/v:pzString} $t1;.if ($scmp(\"${pzString}\",\"DDLX_CHAR\")==0) {} .else {gc}"  
程式碼:
    //全字串匹配,不區分大小寫  
    bp 0041141d "r @$t1 = eax; as /ma ${/v:pzString} $t1;.if ($sicmp(\"${pzString}\",\"DDLX_char\")==0) {} .else {gc}"  
程式碼:
    //字串模糊匹配,*表示0-?個模糊字元  
    bp 0041141d "r @$t1 = eax; as /ma ${/v:pzString} $t1;.if ($spat(\"${pzString}\",\"DDLX*\")==0) {} .else {gc}"  

unicode 就是 /mu, 比如 as /mu ${/v:dllName} poi(esp+4)