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