#include <windows.h>
#pragma comment(linker, "/entry:main")

int main()
{
  
  __asm
  {
    mov    dx, 1
_l1:
    verr  dx        //其中的 dx, 可以为其他。只要 dx & 4 == TRUE, 那么就会在 vmware 中发生异常,而外部没有发现这种现象
    shl    dx, 1
    jmp    _l1
  }

  return 0;
}

  • 标 题:答复
  • 作 者:SyserDebug
  • 时 间:2007-04-19 13:39

bool VMWareTest()
{
  BYTE PortValue1,PortValue2;
  __try
  {
    __asm
    {
      pushad 
      pushfd
      xor ebx,ebx
      mov ecx,0xa 
      mov eax, 'VMXh'      ; EAX=magic
      mov dx, 'VX'      ; DX=magic
      in  eax, dx        ; specially processed io cmd
      cmp ebx, 'VMXh'      ; also eax/ecx modified (maybe vmw/os ver?)
      jne local_001
      mov gInVMWARE,1
local_001:
      popfd
      popad
    }
  }
  __except(EXCEPTION_EXECUTE_HANDLER)
  {
    gInVMWARE=false;
  }
  return gInVMWARE;
}

bool VirtualPCTest()
{
  __try
  {
    __asm
    {
      pushad      
      mov  ebx, 0 // Flag
      mov  eax, 1 // VPC function number
      __emit 0Fh
      __emit 3Fh
      __emit 07h
      __emit 0Bh
      test ebx, ebx
      jnz local_001
      mov gInVirtualPC,1
local_001:
      popad
    }

  }
  __except(EXCEPTION_EXECUTE_HANDLER)
  {
    gInVirtualPC=false;
  }
  if(gInVirtualPC)
    DbgPrint("Syser : Host machine is VirtualPC !\n");
  return gInVirtualPC;
}

  • 标 题:答复
  • 作 者:peaceclub
  • 时 间:2007-04-20 14:34

楼主提的指令是vmware虚拟cpu不支持的,所以会异常退出.
现在007里都包含此指令,其实可以直接硬断nop掉,就可以继续在vmware里跑了.