判断是否虚拟机
来源:互联网 发布:meryl streep 人工智能 编辑:程序博客网 时间:2024/05/17 22:41
Opt("MustDeclareVars", 1)If _VCheck() Then MsgBox(0, "", "True")Else MsgBox(0, "", "False")EndIf Func _VCheck() Local $strComputer = ".", $sMake, $sModel, $sBIOSVersion, $bIsVM, $sVMPlatform Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem") If IsObj($colItems) Then For $objItem In $colItems ;MsgBox(0,"","Name: " & $objItem.Name) $sMake = $objItem.Manufacturer $sModel = $objItem.Model Next EndIf $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems ;MsgBox(0,"",$objItem.BIOSVersion(0)) $sBIOSVersion = $objItem.SMBIOSBIOSVersion Next EndIf $bIsVM = False $sVMPlatform = "" MsgBox(0, "", "Manufacturer=" & $sMake) MsgBox(0, "", "Model=" & $sModel) MsgBox(0, "", "BIOSVersion=" & $sBIOSVersion) If $sModel = "Virtual Machine" Then ; Microsoft virtualization technology detected, assign defaults $sVMPlatform = "Hyper-V" $bIsVM = True ; Try to determine more specific values Switch $sBIOSVersion Case "VRTUAL - 1000831" $bIsVM = True $sVMPlatform = "Hyper-V 2008 Beta or RC0" Case "VRTUAL - 5000805", "BIOS Date: 05/05/08 20:35:56 Ver: 08.00.02" $bIsVM = True $sVMPlatform = "Hyper-V 2008 RTM" Case "VRTUAL - 3000919" $bIsVM = True $sVMPlatform = "Hyper-V 2008 R2" Case "A M I - 2000622" $bIsVM = True $sVMPlatform = "VS2005R2SP1 or VPC2007" Case "A M I - 9000520" $bIsVM = True $sVMPlatform = "VS2005R2" Case "A M I - 9000816", "A M I - 6000901" $bIsVM = True $sVMPlatform = "Windows Virtual PC" Case "A M I - 8000314" $bIsVM = True $sVMPlatform = "VS2005 or VPC2004" EndSwitch ElseIf $sModel = "VMware Virtual Platform" Then ; VMware detected $sVMPlatform = "VMware" $bIsVM = True ElseIf $sModel = "VirtualBox" Then ; VirtualBox detected $bIsVM = True $sVMPlatform = "VirtualBox" Else EndIf If $bIsVM Then MsgBox(0, "", "IsVirtualMachine=True") MsgBox(0, "", "VirtualMachinePlatform=" & $sVMPlatform) Else MsgBox(0, "", "IsVirtualMachine=False") EndIf Return $bIsVMEndFunc ;==>_VCheck
$a = _CheckVM()If $a = "" Then MsgBox(0, "我不在虚拟机里", "我不在虚拟机里!")Else MsgBox(0, "我在虚拟机里!", "我在虚拟机里,我的理由是" & @CRLF & @CRLF & $a)EndIf ;检查是否运行于虚拟机环境。返回空值说明运行于真实环境,返回一个字符串,说明运行于虚拟机环境并给出解释。;方法:检查虚拟机服务/进程,硬盘,BIOS 主板/芯片组;发现2个以上即确定为虚拟机环境 Func _CheckVM() $strComputer = '.' $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2') $vmhit_count = 0 $vmhit_details = "" ; 检查虚拟机管理程序 If ProcessExists("VBoxService.exe") Or ProcessExists("VBoxTray.exe") Or ProcessExists("VMwareTray.exe") Or ProcessExists("VMwareUser.exe") Then _AddVMHit($vmhit_count, $vmhit_details, "RUNNING SOFTWARE", "Found a Vbox or VMware guest OS service or tray process") ; 检查虚拟机设备 If Not IsObj($objWMIService) Then MsgBox(0, "", "? WTF?") Return "" EndIf ; 检查虚拟机硬盘 $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive', 'WQL', 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems $vReturn = $objItem.Model Select Case StringInStr($vReturn, "VBOX HARDDISK") _AddVMHit($vmhit_count, $vmhit_details, "DISKS", "Found device ""VBOX HARDDISK""") Case StringInStr($vReturn, "QEMU HARDDISK") _AddVMHit($vmhit_count, $vmhit_details, "DISKS", "Found device ""QEMU HARDDISK""") Case StringInStr($vReturn, "VMWARE VIRTUAL IDE HARD DRIVE") _AddVMHit($vmhit_count, $vmhit_details, "DISKS", "Found device ""VMWARE VIRTUAL IDE HARD DRIVE""") Case StringInStr($vReturn, "VMWARE Virtual S SCSI Disk Device") _AddVMHit($vmhit_count, $vmhit_details, "DISKS", "Found device ""VMWARE Virtual S SCSI Disk Device""") EndSelect Next EndIf ; 检查虚拟机BIOS $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems Select Case StringInStr($objItem.BIOSVersion(0), "Vbox") _AddVMHit($vmhit_count, $vmhit_details, "BIOS", "Found Vbox BIOS version") Case StringInStr($objItem.SMBIOSBIOSVersion, "virt") _AddVMHit($vmhit_count, $vmhit_details, "BIOS", "Found Vbox BIOS version") EndSelect Next EndIf ; 检查虚拟机主板/芯片组 $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Baseboard", "WQL", 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems Select Case StringInStr($objItem.Name, "Base Board") And StringInStr($objItem.Product, "440BX Desktop Reference Platform") _AddVMHit($vmhit_count, $vmhit_details, "MOTHERBOARD", "Found VMware-style motherboard, ""440BX Desktop Reference Platform"" / Name=""Base Board""") EndSelect Next EndIf If $vmhit_count >= 2 Then Return $vmhit_details & @CRLF & @CRLF & "Hits in " & $vmhit_count & " of 4 hardware categories - probably a virtual machine." Else Return "" EndIfEndFunc ;==>_CheckVM Func _AddVMHit(ByRef $vmhit_count, ByRef $vmhit_details, $this_hit_category, $this_hit_text) If StringInStr($vmhit_details, "In CATEGORY:" & $this_hit_category & ":") Then $vmhit_details &= " and " & $this_hit_text Else If $vmhit_details > "" Then $vmhit_details &= @CRLF $vmhit_details &= "In CATEGORY:" & $this_hit_category & ": " & $this_hit_text $vmhit_count += 1 EndIfEndFunc ;==>_AddVMHit
0 0
- 判断是否虚拟机
- 判断服务器是否为虚拟机
- 判断程序是否运行在虚拟机里
- 判断程序是否在虚拟机中运行
- Android 虚拟机判断蓝牙是否开启
- 判断程序是否运行在虚拟机里 收藏
- 如何判断 Linux 是否运行在虚拟机上
- 如何判断 Linux 是否运行在虚拟机上
- 深入理解Java虚拟机笔记---判断对象是否存活
- 深入理解Java虚拟机笔记---判断对象是否存活
- java虚拟机判断代码是否是热点代码方式
- java虚拟机中如何判断对象是否存活
- 深入理解Java虚拟机之判断对象是否存活
- 判断程序是否运行在虚拟机中的代码
- 判断是否安装Framework+飞信虚拟机模拟环境 .net真正脱离框架
- 判断程序是否运行在虚拟机中的代码,请人翻译
- js判断客户端是否装有java虚拟机(安装的全部版本)
- .net 判断程序是否运行在虚拟机上(方法1)
- POJ之1007
- IOS-关于XMPP的libidn 不支持arm64的问题
- ssh登录失败:Host key verification failed.
- #MySQL中重命名及复制
- Mac 下修改intellij内存设置
- 判断是否虚拟机
- spring 源码解读与设计详解:2 BeanFactory
- jQuery基础 -- 如何判断页面元素存在与否
- linux 查看库依赖关系
- 基于Platinum库的DMR实现(android)
- Hadoop常用命令
- shell脚本知识(三) 正则表达式 grep sed awk
- Android开发中如何解决加载大图片时内存溢出的问题
- 安卓4.4中应用无法读取修改sd卡的问题——程序员解决方案