Ich habe schon eine Funktion mit der ich erkennen kann ob das Programm in einer Virtuellen Machine ausgeführt wird falls ja beendet sich das Programm, nun hat ein User allerdings "VMware vCenter Converter" benutzt um seinen lokalen PC als VMware zu klonen und das kann ich einfach nicht mehr als VM erkennen, hat da jemand einen Rat?
VM Umgebung erkennen und blockieren
-
Tyzer -
18. Juni 2019 um 14:56 -
Erledigt
-
-
Ich habe schon eine Funktion mit der ich erkennen kann ob das Programm in einer Virtuellen Machine ausgeführt wird falls ja beendet sich das Programm, ...
Welche Funktion verwendest Du denn momentan (Code, Link) ?
Dies hier wäre ggf. eine Möglichkeit :
https://www.autoitscript.com/forum/topic/13…ect-current-os/
Gruß Musashi
-
Bin mir ziemlich sicher, dass er prüft welche Beschreibung die Festplatte hat. VM-Platten haben meistens den Namen des VM-Programms irgendwie eingebaut, aber das trifft ja nicht zu wenn man klont.
Das einzige was funktionieren könnte, wäre auf Infos zuzugreifen die die VM stellt, also BIOS-Infos und ähnliches. Die sind nämlich nicht in einem HDD-Image enthalten.
-
Ja momentan benutze ich
Code
Alles anzeigenFunc _IsInVBox($strComputer = '.') Local $x = 0, $objWMIService, $colItems $objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2') If Not IsObj($objWMIService) Then Return SetError(1, 0, 0) $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive', 'WQL', 0x30) If IsObj($colItems) Then For $objItem In $colItems $vReturn = $objItem.Model If StringInStr($vReturn, "VBOX HARDDISK") Then Return True ExitLoop EndIf If StringInStr($vReturn, "QEMU HARDDISK") Then Return True ExitLoop EndIf If StringInStr($vReturn, "VMWARE VIRTUAL IDE HARD DRIVE") Then Return True ExitLoop EndIf If StringInStr($vReturn, "VIRTUAL HD") Then Return True ExitLoop EndIf Next EndIf ;Copyright (C) 2011 Fennek/sl4y3r EndFunc ;==>_IsInVBox
und noch ein paar andere RegReads, ich hab mir das geklonte Windows in einer VM bisher noch nicht selber angeschaut da meine PCs einfach zu groß sind um sie zu klonen da hab ich nicht mehr genug speicher für aber gut ich werd wohl Windows auf irgendeinem Gerät neuinstallieren damit ich weniger zu klonen habe
-
Das einzige was funktionieren könnte, wäre auf Infos zuzugreifen die die VM stellt, also BIOS-Infos und ähnliches. Die sind nämlich nicht in einem HDD-Image enthalten.
Ja, genau das beschreiben auch u.a. UEZ in dem von mir angegebenen Link.
ZitatYou can use WMI and check for Manufacturer in Win32_BIOS or Vendor from Win32_ComputerSystemProduct.
Both values are on my vm: VMware, Inc. and VMware Virtual Platform
EDIT (ungetestet) : Tyzer
Code
Alles anzeigenMsgBox(64, "_IsVirtualMachine()", _IsVirtualMachine()) Func _IsVirtualMachine() ; Returns 1 or 0. Local $oWMIService = ObjGet("winmgmts:\\localhost\root\cimv2") Local $oColItems = $oWMIService.ExecQuery("Select * From Win32_ComputerSystemProduct", "WQL", 0x30) If IsObj($oColItems) Then For $oObjectItem In $oColItems If StringRegExp($oObjectItem.Name, '(?i)VirtualBox|VMWare|Virtual PC') Then Return 1 EndIf Next EndIf Return SetError(1, 0, 0) EndFunc ;==>_IsVirtualMachine
Gruß Musashi
-
Vielen dank für die schnelle Hilfe
-
Darf ich fragen, wieso du nicht möchtest, dass dein Programm in einer VM betrieben wird? Ich hab bisher noch keinen guten Grund gefunden und sehe es eher als Hindernis... aufgrund der Windows 10 Politik,Funktionsweise,... arbeite ich auf einem Rechner mit Linux und starte die Win10 VM ausschließlich für Programme die nicht unter Linux laufen. (Von Sicherheitsaspekten ganz zu schweigen). Dementsprechend könnte ich dein Programm nie benutzen.
Es würde mich daher interessieren, aus welchem Grund/Gründen du das ausführen in der VM verhindern willst.
Mit freundlichen Grüßen,
Kanashius.