64-bitowe wykrywanie Windows VMware
Próbuję opracować aplikację, która wykrywa, czy program działa wewnątrz maszyny wirtualnej.
W przypadku 32-bitowego systemu Windows istnieją już metody wyjaśnione w następującym linku:http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual
Próbuję zaadaptować kod dotyczący wykrywania Virtual PC i VMware w 64-bitowym systemie operacyjnym Windows. W przypadku VMware kod może wykryć pomyślnie w 64-bitowym systemie operacyjnym Windows XP. Ale program ulega awarii, gdy uruchamiam go w rodzimym systemie (Windows 7 64-bitowy system operacyjny).
Umieszczam kod w pliku .asm i definiuję niestandardowy krok kompilacji za pomocą pliku ml64.exe. Kod asm dla 64-bitowego systemu Windows to:
<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>
Nazywam tę część w pliku cpp, takim jak:
<code>__try { returnValue = IsInsideVM(); } __except(1) { returnValue = false; } </code>
Z góry dziękuję.