vmp3.0.9全保護拆分解析

Editor發表於2018-05-08

vmp3.0.9全保護拆分解析

以下為了避免外掛干擾,故採用x64dbg原版進行分析。


vmp3.0.9全保護拆分解析


首先我通過檢測到偵錯程式的彈窗進行棧回溯,定位到該關鍵點:
CALL eax


由於才接觸Vmp,所以是把各個保護拆分開來進行的分析,會比較簡單一些,不過全保護其實也就是湊在一起罷了,只要注意順序就行啦。

本帖只是分析基礎保護反除錯反虛擬機器等,不涉及還原VM和分析VM程式碼的部分。屬於新手貼一類,適合萌新觀看,大佬輕噴,有錯漏之處,敬請指正,謝謝。


EverEdit編輯器是加的一個vmp的殼子,雖然特徵和這裡分析的不太一致,但是反除錯路子大致一樣的,而且雖然是vmp但是通過trace跟蹤和分析也是可以暴力破解的,可以拿來練手,這裡推薦一下。


一、反除錯保護


1.呼叫IsDebuggerPresent,判斷返回值eax==1被除錯,eax==0沒有除錯。


vmp3.0.9全保護拆分解析

vmp3.0.9全保護拆分解析


2.CheckRemoteDebuggerPresent,判斷buffer返回值是0還是1,1被除錯,0沒有除錯。


vmp3.0.9全保護拆分解析


3.NtQueryInformationProcess,ProcessInfoClass=0x1E來獲取除錯控制程式碼,判斷是否被除錯,除錯控制程式碼返回0且eax的返回值是0xC0000353


vmp3.0.9全保護拆分解析

vmp3.0.9全保護拆分解析


4.NtSetInformationThread,ThreadInfoClass=0x11,這個不是檢測除錯,而是設定不把除錯資訊傳送到偵錯程式,可以直接把0x11修改為0x3或者其它數值就可以了。


vmp3.0.9全保護拆分解析


5.ZwQuerySystemInformation,SystemInfoClass=0x23(MACRO:SystemKernelDebuggerInformation),返回值是2位元組的bool值,設定為0即可。


vmp3.0.9全保護拆分解析


6.ZwQuerySystemInformation,SystemInfoClass=0xB(MACRO:SystemModuleInformation),會去遍歷核心模組,然後進行判斷,第一次是獲取需要儲存的buffer長度,第二次才是真正獲取資訊,只要把buffer都置為0,就檢測不到除錯了,至於buffer的位置會在第一次呼叫後使用LocalAlloc申請空間來儲存


vmp3.0.9全保護拆分解析

vmp3.0.9全保護拆分解析


7.CloseHandle反除錯,如果被除錯了,那麼KiRaiseUserExceptionDispatcher函式會被呼叫,走異常處理流程;如果是不被除錯的狀態,不會走向異常流程。


vmp3.0.9全保護拆分解析


8.檢測硬體斷點,是通過SEH異常來處理的


首先在SEH鏈中對當前模組的SEH頭下一個軟體斷點


vmp3.0.9全保護拆分解析


然後把圖示中的Dr0、Dr1、Dr2、Dr3、Dr6、Dr7除錯暫存器都修改為0


vmp3.0.9全保護拆分解析


然後F9再次到CALL eax的時候如果是GetpRrocessAffinityMask函式呼叫,說明反除錯已經順利通過。


PS:上面對CALL eax下的是硬體斷點,注意不要下軟體斷點,因為前面ZwSetInformationThread後(User-mode反除錯)或者第三次最後一次NtQuerySystemInformation後(Kernel-mode)反除錯會有如下圖所示的軟體斷點檢測,其實vmp的記憶體保護一部分的原理和這個一致,程式碼特徵幾乎都一樣,取出來的HEX位元組也是存放在esi暫存器中。所以為了方便,最好下硬體斷點,因為硬體斷點檢查觸發的時機都是在SEH函式中,很好攔截。


vmp3.0.9全保護拆分解析


二、反虛擬機器


1.CPUID判斷ECX最高位31位是否為1,如果是1那麼就是在虛擬機器中,如果是0那就是在宿主機上。我自己加殼的這個樣本有兩個CPUID檢測點,等它執行後修改ecx最高位為0就行。


不過下面的貼圖演示的是使用修改虛擬機器的.vmx配置檔案的方式,更加方便。


2.使用GetSystemFirewareTable獲取系統韌體資訊,判斷其中有無下列字串:VMware、VirtualBox、Parallels。注意大小寫,只需要等GetSystemFirewareTable執行完成後對記憶體搜尋VMware字串(因為我用的VMware虛擬機器),然後填充為0就可以過虛擬機器檢測了。下面我會貼一個指令碼配合OD+StrondOD+DrxProtect使用的,主要就是填充VMware字串。


vmp3.0.9全保護拆分解析


三、IAT解密


1.我沒有分析它是如何加密的,只是簡單的分析了呼叫函式的解密過程,其實十分簡單:進入解密函式後單步f7,當看到類似:lea register,dword ptr[register+imm](register:暫存器,imm:立即數)的語句,在執行完成後register中就是函式,再跟蹤幾步通過ret一類的就去執行真正的函式了
2.不知有無遺漏。。。


四、記憶體保護


1.記憶體保護和上面分析的軟體斷點幾乎一樣,對你修改的記憶體下硬體訪問斷點,就可以看到在取HEX位元組然後運算,不再貼圖了,只要把取出來的esi的數值替換為原來的數值就行了
2.不知有無遺漏。



原文連結:[原創]vmp3.0.9全保護拆分解析-『加殼脫殼』-看雪安全論壇

本文由看雪論壇 cat喵  原創,轉載請註明來自看雪社群


相關文章