繞過SE的虛擬機檢測


https://www.52pojie.cn/thread-598022-1-1.html

第一處:
特征碼81 7D E4 68 58 4D 56
        cmp dword ptr ss:[ebp-0x1Ch],0x564D5868h //把564D5868隨便改一下就行了
        jnz L0069B0FF
        push -0x4h
        pop eax
        jmp L0069B101
L0069B0FF:
        xor eax,eax
L0069B101:
        call L006B3C4C
        retn//這里把eax賦值0也可以
原理:in eax,dx這個大家都知道
第二處:
特征碼55 8B EC 83 EC 14

        push ebp//直接mov eax,0  retn
        mov ebp,esp
        sub esp,0x14h
        push ebx
        push esi
        jmp L0069AFA9

原理:關鍵部分vm了,不清楚檢測方式,無意中發現的
-----------------

 

 

第一個是檢測注冊表
[HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS]
"SystemManufacturer"="VMware, Inc."
564D5868h既是"VMware, Inc."ascii的hash值
這個注冊表的好像會在重啟之后被vmware恢復 目前我的辦法是寫個.reg 每次啟動虛擬機時手動覆蓋一次

第二個檢測是cpuid的1號功能 ecx的最高位
.vmx文件中添加
cpuid.1.ecx = "0111:1111:1101:1010:1111:1011:1011:1111"
即可直接過掉 這個檢測好像是從vmp3.x學來的

 

評論有


是這個吧? se和vmp3不太一樣,se直接改ecx最高位可以,但vmp好像不行。

int m;
__asm {
mov eax, 0x1
cpuid
mov m, ecx
}

if (m & 0x80000000)
   printf("vmware\n");

 

vmp3.x中還有另外一個檢測
win7及以上 EnumSystemFirmwareTables + GetSystemFirmwareTable 獲取FirmwareTableBuffer
xp NtOpenSection OBJECT_ATTRIBUTES.ObjectName == "\device\physicalmemory" + NtMapViewOfSection打開物理內存
然后從獲取到的buffer里直接搜索特征字符串"VMware" "VirtualBox" "Parallels" 判斷點可以搜索特征cmp byte[edx], 56h定位
這個檢測目前我也沒有什么好的辦法永久解決 可能需要用到一些修改硬件信息的軟件 目前我是手動讓api調用返回失敗來臨時bypass這個檢測

參考:
https://forum.tuts4you.com/topic/38701-vmprotect-ultimate-308/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM