反調試技術

來源:互聯網
上載者:User
在調試一些病毒程式的時候,可能會碰到一些反調試技術,也就是說,被調試的程式可以檢測到自己是否被調試器附加了,如果探知自己正在被調試,肯定是有人試圖反組譯碼啦之類的方法破解自己。為了瞭解如何破解反調試技術,首先我們來看看反調試技術。一、Windows API方法Win32提供了兩個API, IsDebuggerPresent和CheckRemoteDebuggerPresent可以用來檢測當前進程是否正在被調試,以IsDebuggerPresent函數為例,例子如下:

 

BOOL ret = IsDebuggerPresent();printf("ret = %d\n", ret);

 

破解方法很簡單,就是在系統裡將這兩個函數hook掉,讓這兩個函數一直返回false就可以了,網上有很多做hook API工作的工具,也有很多工具原始碼是開放的,所以這裡就不細談了。

 

二、查詢進程PEB的BeingDebugged標誌位當進程被調試器所附加的時候,作業系統會自動化佈建這個標誌位,因此在程式裡定期查詢這個標誌位就可以了,例子如下:

 

bool PebIsDebuggedApproach(){       char result = 0;       __asm       {      // 進程的PEB地址放在fs這個寄存器位置上              mov eax, fs:[30h]  // 查詢BeingDebugged標誌位              mov al, BYTE PTR [eax + 2]               mov result, al       }        return result != 0;}

 

三、查詢進程PEB的NtGlobal標誌位 跟第二個方法一樣,當進程被調試的時候,作業系統除了修改BeingDebugged這個標誌位以外,還會修改其他幾個地方,其中NtDll中一些控制堆(Heap)操作的函數的標誌位就會被修改,因此也可以查詢這個標誌位,例子如下:

 

bool PebNtGlobalFlagsApproach(){       int result = 0;        __asm       {      // 進程的PEB              mov eax, fs:[30h]  // 控制堆操作函數的工作方式的標誌位              mov eax, [eax + 68h]  // 作業系統會加上這些標誌位FLG_HEAP_ENABLE_TAIL_CHECK,   // FLG_HEAP_ENABLE_FREE_CHECK and FLG_HEAP_VALIDATE_PARAMETERS,  // 它們的並集就是x70  //  // 下面的代碼相當於C/C++的  //     eax = eax & 0x70              and eax, 0x70              mov result, eax       }        return result != 0;}

 

四、查詢進程堆的一些標誌位這個方法是第三個方法的變種,只要進程被調試,進程在堆上分配的記憶體,在分配的堆的頭資訊裡,ForceFlags這個標誌位會被修改,因此可以通過判斷這個標誌位的方式來反調試。因為進程可以有很多的堆,因此只要檢查任意一個堆的頭資訊就可以了,所以這個方法貌似很強大,例子如下:

 

bool HeapFlagsApproach(){       int result = 0;        __asm       {      // 進程的PEB              mov eax, fs:[30h]      // 進程的堆,我們隨便訪問了一個堆,下面是預設的堆              mov eax, [eax + 18h]  // 檢查ForceFlag標誌位,在沒有被調試的情況下應該是              mov eax, [eax + 10h]              mov result, eax       }        return result != 0;}

 

參考資料:http://www.symantec.com/connect/articles/windows-anti-debug-reference

 

未完待續

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.