怎么判断程序运行在虚拟机

怎么判断程序运行在虚拟机里面

参看这篇文章

  1. 判断CPUID
    1. 指令EAX输入为1,如果ECX返回为0,则是物理机。如果ECX返回为1,则是虚拟机
  2. 判断特殊的EAX值
    1. 调取CPUID 的值为EAX=40000000,返回值会提供虚拟化供应商的名称
  3. 判断特殊的I/O端口
    1. 在vmware,主机和虚拟机之间通讯是使用特别的I/O端口的,如果这个端口存在,那么就是虚拟机环境
  4. 检查MAC地址的前六位
    1. 这个很容易实现,见下面列表
      1. VMWARE:00:05:69
      2. VMWARE:00:0C:29
      3. VMWARE: 00:1C:14
      4. VMWARE: 00:50:56
      5. VirtualBox: 08:00:27
  5. 检查注册表键值
    1. 针对Windows系统,可以看下面的键值
      1. HKLM\SOFTWARE\Vmware Inc.\Vmware Tools
      2. HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SCSI PORT 2\SCSI BUS 0\Target Id 0\Logical Unit Id 0\Identifier
      3. SYSTEM\CurrentControlSet\Enum\SCSI\Disk&Ven_VMware_&Prod_VMware_Virtual_S
      4. SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\root#vmwvmcihostdev
      5. SYSTEM\CurrentControlSet\Control\VirtualDeviceDrivers
  6. 检查运行的进程
    1. VMware
      1. vmtoolsd.exe
      2. vmwaretrat.exe
      3. vmwareuser.exe
      4. vmacthlp.exe
    2. VirtualBox
      1. vboxservice.exe
      2. vboxtray.exe
  7. 检查存在的文件
    1. Vmware

      C:\windows\System32\Drivers\VBoxMouse.sys C:\windows\System32\Drivers\VBoxGuest.sys C:\windows\System32\Drivers\VBoxSF.sys C:\windows\System32\Drivers\VBoxVideo.sys C:\windows\System32\vboxdisp.dll C:\windows\System32\vboxhook.dll C:\windows\System32\vboxmrxnp.dll C:\windows\System32\vboxogl.dll C:\windows\System32\vboxoglarrayspu.dll C:\windows\System32\vboxoglcrutil.dll C:\windows\System32\vboxoglerrorspu.dll C:\windows\System32\vboxoglfeedbackspu.dll C:\windows\System32\vboxoglpackspu.dll C:\windows\System32\vboxoglpassthroughspu.dll C:\windows\System32\vboxservice.exe C:\windows\System32\vboxtray.exe C:\windows\System32\VBoxControl.exe

  8. 检查运行的服务
    • VMTools
    • Vmhgfs
    • VMMEMCTL
    • Vmmouse
    • Vmrawdsk
    • Vmusbmouse
    • Vmvss
    • Vmscsi
    • Vmxnet
    • vmx_svga
    • Vmware Tools
    • Vmware Physical Disk Helper Service
| 访问量:
Table of Contents