Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Программа и Интерфейс , Приложение своё

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

Оформил: 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;

Перевод контента на русский язык:

Функция Delphi для проверки, запущена ли программа в окружении виртуальной машины VMware. Функция использует специфический метод обнаружения VMware, интерпретируя инструкции IN к порту 0x5658 и проверяя значение EAX на магическое значение 0x564D5868.

Расшифровка кода:

  1. Определена функция IsVMwarePresent с вызовом конвенцией stdcall, что означает, что параметры ожидается на стеке.
  2. Функция инициализирует переменную Result в значение False, указывая, что VMware не присутствует по умолчанию.
  3. Код использует директиву {$IFDEF CPU386} для проверки, запущена ли программа на платформе x86 (i386). Если это условие истинно, то код внутри блока try будет выполнен.
  4. Внутри блока try код использует ассемблерный язык для обнаружения VMware:
    • Он настраивает регистры EAX, EBX, ECX и EDX с конкретными значениями.
    • Выполняет инструкцию IN (ввод из порта) к порту 0x5658, хранящий результат в EAX.
    • Сравнивает значение EBX (которое было настроено на 0x564D5868) с значением, хранящимся в EAX. Если они совпадают, то устанавливает Result в значение True, указывая, что VMware присутствует.
  5. Если происходит любая ошибка при выполнении кода на ассемблерном языке, функция установит Result в значение False.
  6. Функция возвращает значение Result.

Обратите внимание, что данный метод обнаружения не является официально документированным VMware и может измениться в будущих версиях. Поэтому рекомендуется использовать дополнительные проверки (например, идентификаторы устройств, информация о BIOS) для увеличения надежности обнаружения.

Чтобы запустить этот код, вам нужно будет иметь компилятор Delphi и платформу x86 (i386). Вы можете вызвать функцию IsVMwarePresent из вашего основного программы или модуля, чтобы определить, присутствует ли VMware.

Программа запускается в пространстве VMware, если она использует интерцептация инструкций IN для порта 0x5658 с магическим значением 0x564D5868 в регистре EAX.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложение своё ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:01:00/0.0055251121520996/1