Определить, что программа запущена в пространстве VMware

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Оформил: DeeCo

Автор: http://www.swissdelphicenter.ch

////////////////////////////////////////////////////////////////////////////////

//

// Simple VMware check on i386

//

// Note: There are plenty ways to detect VMware. This short version bases

// on the fact that VMware intercepts IN instructions to port 0x5658 with

// an magic value of 0x564D5868 in EAX. However, this is *NOT* officially

// documented (used by VMware tools to communicate with the host via VM).

//

// Because this might change in future versions — you should look out for

// additional checks (e.g. hardware device IDs, BIOS informations, etc.).

// Newer VMware BIOS has valid SMBIOS informations (you might use my BIOS

// Helper unit to dump the ROM-BIOS (http://www.bendlins.de/nico/delphi).

//

function IsVMwarePresent(): LongBool; stdcall; // platform;

begin

Result := False;

{$IFDEF CPU386}

try

asm

mov eax, 564D5868h

mov ebx, 00000000h

mov ecx, 0000000Ah

mov edx, 00005658h

in eax, dx

cmp ebx, 564D5868h

jne @@exit

mov Result, True

@@exit:

end;

except

Result := False;

end;

{$ENDIF}

end;

{/codecitation}

Добавить комментарий