pxhb 发表于 2017-4-10 19:00

绕过SE的虚拟机检测


第一处:
特征码81 7D E4 68 58 4D 56
      cmp dword ptr ss:,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,0retn
      mov ebp,esp
      sub esp,0x14h
      push ebx
      push esi
      jmp L0069AFA9
原理:关键部分vm了,不清楚检测方式,无意中发现的
-----------------

Pizza 发表于 2017-4-10 19:32

第一个是检测注册表

"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学来的

Pizza 发表于 2017-4-12 19:16

Hmily 发表于 2017-4-12 10:18
是这个吧?




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, 56h定位
这个检测目前我也没有什么好的办法永久解决 可能需要用到一些修改硬件信息的软件 目前我是手动让api调用返回失败来临时bypass这个检测

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

梁萧 发表于 2017-4-10 19:27

SE哪个版本啊。

amscracker 发表于 2017-4-10 19:40

_BaZzi 发表于 2017-4-10 19:32
第一个是检测注册表

"SystemManufacturer"="VMw ...

靶子师傅有没有VMP SDK方面的资料啊!易语言的做授权使用的等你好久了还以为你消失了

pxhb 发表于 2017-4-10 19:45

_BaZzi 发表于 2017-4-10 19:32
第一个是检测注册表

"SystemManufacturer"="VMw ...

{:1_921:}收藏一份

c66d88 发表于 2017-4-10 19:54

看不懂,全是大神

文可う润心 发表于 2017-4-10 20:24

表示看不懂,支持下

pxhb 发表于 2017-4-10 20:32

梁萧 发表于 2017-4-10 19:27
SE哪个版本啊。

都可以,全部吧

xie83544109 发表于 2017-4-10 21:04

{:1_914:}
介个太强大鸟

[VIP]一年半载 发表于 2017-4-10 21:35

MARK 一下 我右侧收藏按钮貌似不好用
页: [1] 2 3 4 5 6
查看完整版本: 绕过SE的虚拟机检测