首页
社区
课程
招聘
[原创]检测vmware的简单方法(可以得到版本)
发表于: 2010-4-8 17:18 7368

[原创]检测vmware的简单方法(可以得到版本)

2010-4-8 17:18
7368
BOOL
DetectVMware(int *Version)
{
    int magic, ver;

    magic = 0;
    ver = 0;

  __try
  {
    __asm
    {
      push ebx
      mov  ecx, 0xa
      mov  edx, 0x5658
      mov  eax, 0x564d5868
      in   eax, dx
      mov  [ver],   eax
      mov  [magic], ebx
      pop  ebx
    }
  }
  __except(GetExceptionCode() == EXCEPTION_PRIV_INSTRUCTION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
  {
    return FALSE;
  }
  

    if(magic == 0x564d5868)
    {
        *Version = ver;
        return TRUE;
    }

    return FALSE;
}

int _tmain(int argc, _TCHAR* argv[])
{
  int v;
  if (DetectVMware(&v)) {
    printf("VMWARE: %d\n", v);
  } else
    printf("NOT VMWARE\n");
  
  return 0;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 75
活跃值: (803)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
试了下有效,查了下,原来是用的vmware和vmware tools通信的一个接口 以及真实机不能运行io指令
学习了~
2010-4-8 17:57
0
雪    币: 75
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
呵呵 如果自己修改下 不就完了?
2010-4-9 02:37
0
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
解释一下嘛~

__asm
{
push ebx
mov ecx, 0xa
mov edx, 0x5658
mov eax, 0x564d5868
in eax, dx
mov [ver], eax
mov [magic], ebx
pop ebx
}
2010-4-9 09:52
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
5
就是magic-code
是vmware设计用来使得vmtools正确获取版本的,楼上可以
自己反汇编1下vmware看看
2010-4-9 10:11
0
雪    币: 75
活跃值: (803)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
看到了,就贴上来了,帮助大家理解
VMware后门是vmware和vmware tools通信的一个接口。例如,vmware-checkvm程序就是利用这个后门检测自己是否运行在vmware里。

  这个后门开在IO端口0x5658。利用这个后门时,必需:

  l EAX = 0x564D5868 ( “VMXh” )

  l EBX 为参数,一般不用。

  l ECX 低 16 位为功能号。其实是一个函数数组的索引。Vmware 调用对应的函数处理后门请求。 这个函数数组共有

  l 36 个元素,但某些没有定义。ECX 的高 16 位为功能参数。

  l EDX = 0x5658 ( “VX” ),为 IO 端口号。

  通过读端口 (in) 命令调用后门。

  后门详细描述

  0 未定义

  1 getMhz 得到 CPU 速率

  2 APM 函数族

  3 getDiskGeo

  4 getPtrLocation

  5 setPtrLocation

  6 得到宿主机剪贴板数据长度

  7 读宿主机剪贴板数据

  8 设置宿主机剪贴板数据长度

  9 向宿主机剪贴板写数据

  10 得到 vmware 版本

  11 取设备信息

  12 连接或断开设备

  13 取 GUI 配置信息

  14 设置 GUI 配置信息

  15 取宿主机屏幕分辨率

  16 未定义

  17 未定义

  18 osNotFound, vmware 提示插入引导盘

  19 GetBiosUUID

  20 取虚拟机内存大小

  21 未定义

  22 OS2 系统用到的一个函数

  23 getTime,取宿主机时间

  24 stopCatchup

  25 未定义

  26 未定义

  27 未定义

  28 initScsiIoprom

  29 未定义

  30 Message,通道函数族

  31 rsvd0

  32 rsvd1

  33 rsvd2

  34 ACPID 函数

  35 未定义
2010-4-9 10:35
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
7
接口一关就没了。。。还是推荐red pill,简单稳定,R3可用
2010-4-9 10:53
0
游客
登录 | 注册 方可回帖
返回
//