检测虚拟机的代码

引用:

.386
.model flat, stdcall
option casemap:none

; VMware hessam salehi (kernex)
; HKEY_LOCAL_MACHINE\software\VMWare, Inc.\VMware tools
   ; include .inc
   include  \MASM32\include\windows.inc
   include  \MASM32\include\user32.inc
   include  \MASM32\include\kernel32.inc
   include  \MASM32\include\advapi32.inc
   ; include .lib
   includelib  \MASM32\lib\user32.lib
   includelib  \MASM32\lib\kernel32.lib
   includelib  \MASM32\lib\advapi32.lib

.data
MsgCaption      db “VMware Detector 1.0″,0
Msgare          db “you are in a vmware !!”,0
Msgnot  db “you are not in a vmware !!”,0
szTestKey       db “software\VMWare, Inc.\VMware tools”,0
hKey  db “InstallPath”,0
.code
start:
 INVOKE     RegOpenKeyEx, HKEY_LOCAL_MACHINE, addr szTestKey, 0,\
                 KEY_WRITE or KEY_READ, addr hKey
      .if eax == ERROR_SUCCESS
  invoke MessageBox, NULL,addr Msgare, addr MsgCaption, MB_OK
      .else
  invoke MessageBox, NULL,addr Msgnot, addr MsgCaption, MB_OK
      .endif
 invoke ExitProcess,NULL
end start

引用:

start:
  PUSH EBP
  MOV EBP,ESP
       try_again:
       …..
   rdtsc           
 mov ebx,eax
 rdtsc
 sub eax,ebx
  push eax
 cmp eax,1       ; infrequent some CPUs return the value 1,
 jz try_again   ; which seems to be a bug! in this case we try again.
 Invoke printf, ADDR print_result,eax 
  pop eax
 cmp eax,0200h
 jb no_vm
 Invoke printf, ADDR print_vm ; you ARE in a VM
 jmp finish
no_vm:
 Invoke printf, ADDR print_novm ; You are NOT in a VM
finish:
  MOV ESP,EBP
  POP EBP
  RETN