64-Bit-Windows-VMware-Erkennung
Ich versuche, eine Anwendung zu entwickeln, die erkennt, ob ein Programm in einer virtuellen Maschine ausgeführt wird.
Für 32-Bit-Windows gibt es bereits Methoden, die unter dem folgenden Link erläutert werden:http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual
Ich versuche, den Code für die Erkennung von Virtual PC und VMware in einem 64-Bit-Windows-Betriebssystem anzupassen. Für VMware kann der Code in einem Windows XP 64-Bit-Betriebssystem erfolgreich erkannt werden. Das Programm stürzt jedoch ab, wenn ich es auf einem nativen System (Windows 7 64-Bit-Betriebssystem) ausführe.
Ich füge den Code in eine .asm-Datei ein und definiere den benutzerdefinierten Erstellungsschritt mit der Datei ml64.exe. Der ASM-Code für 64-Bit-Windows lautet:
<code>IsInsideVM proc push rdx push rcx push rbx mov rax, 'VMXh' mov rbx, 0 ; any value but not the MAGIC VALUE mov rcx, 10 ; get VMWare version mov rdx, 'VX' ; port number in rax, dx ; read port ; on return EAX returns the VERSION cmp rbx, 'VMXh'; is it a reply from VMWare? setz al ; set return value movzx rax,al pop rbx pop rcx pop rdx ret IsInsideVM endp </code>
Ich nenne diesen Teil in einer cpp-Datei wie:
<code>__try { returnValue = IsInsideVM(); } __except(1) { returnValue = false; } </code>
Danke im Voraus.