Подтвердить что ты не робот

Определите, когда вы работаете на виртуальной машине

Есть ли официальный способ для приложения определить, работает ли он в VMWare или Virtual PC (или что-то еще, что Microsoft называет его сейчас)? Код, который я видел, обычно является взломом, который воспользовался некоторым нечетным поведенческим побочным эффектом в конкретной версии VMWare или Virtual PC.

В идеале код Delphi, но если вы можете ссылаться на официальное объяснение, я уверен, что смогу его преобразовать.

4b9b3361

Ответ 1

В прошлом году я написал серию статей с исходным кодом. Обнаружение VMware и Wine здесь. Виртуальный ПК здесь. Все три из них имеют довольно железистое обнаружение, потому что есть документальные обратные вызовы для гипервизора (в случае Wine, расширение для стандартной DLL). Я помещаю в раздел комментариев непроверенный детектор VirtualBox (не проверяя его). Параллели можно обнаружить с помощью обратного вызова, но у меня его нет. Ссылка на документацию (которая неудовлетворительна, поскольку она от исследователя безопасности, ориентированного на эксплойты), но расположена здесь, если вы ее установили и заинтересованы, Там также есть PPT здесь, в котором есть информация об обнаружении Sandbox, Bochs и Xen. В нем не много кода, но это может дать вам отправную точку, если вам нужно их обнаружить.

Ответ 3

Я думаю, что лучший подход к этому - проверить аппаратные профили. Виртуализированное оборудование обычно использует часть названия компаний. Если вы проверите описание материнской платы на виртуальном ПК, вы заметите, что это сделано корпорацией Microsoft. Аналогично в VMWare ваш адаптер ethernet будет префикс VMNet.

Ответ 4

В этом потоке на форумах SysInternals есть несколько ответов (в Delphi, конечно), включая одну функцию IsVM. Я тестировал на XP и Win2003, размещенные как на XP, так и на Vista в VMWare с хорошими результатами.

Ответ 5

Здесь есть WMI-способ: http://blogs.msdn.com/virtual_pc_guy/archive/2005/10/27/484479.aspx

Я дважды проверял изображение XP, работающее на Virtual PC, и значение, которое они тестируют, по-прежнему остается прежним. Я не буду гарантировать, что другие VM вернутся сюда, хотя...

У меня есть программа Delphi, которую я написал пару лет назад, чтобы получить список и изменить принтер по умолчанию с использованием WMI, не требуя сторонних компонентов или чего-либо подобного. Если вы не привыкли работать с WMI из Delphi, я могу отправить вам копию, чтобы у вас было что-то для работы (это не обязательно совместимо с Unicode, но мне не должно быть слишком сложно обновить ее если потребуется).

Ответ 6

Я использовал метод RedPill (переведен на Delphi, но код не так уж трудно понять), который работал достаточно хорошо, Я также включил несколько дополнительных проверок, используя вызовы WMI, чтобы получить такие вещи, как имя и авторские права сетевого адаптера, но это было для обнаружения определенных версий Virtual PC.

Мое понимание метода RedPill заключается в том, что он должен работать и обнаруживать все виртуальные машины, основываясь на характере работы. Существует вероятность того, что ложные срабатывания могут быть сгенерированы также, так как новая ОС Windows в Windows 7 может быть настроена для запуска отдельных программ в копии Windows XP без проблем внутри Windows 7.

Ответ 7

Чтобы определить, что машина физическая или VM

dmidecode | egrep -i 'manufacturer|product'

Если команда dmidecode не найдена, установите соответствующие обороты.

Это проверено в соответствии с машинами EXSI, VMWARE и hyperv.

Ответ 8

Если вы хотите вообще обнаружить присутствие любого типа виртуализации, лучше всего анализировать характеристики производительности. Возьмите что-то, что значительно медленнее в виртуализации (например, тяжелая рабочая нагрузка MMU, например, вилка-бомба), и время, затрачиваемое на обычное приложение для пользовательского пространства. Из соотношения, которое вы можете легко сказать.

Самый простой в плане усилий, если вы только заботитесь о некоторых VMM, - это искать их оборудование, то есть устройства VMware PCI:

00: 07.3 Мост: Корпорация Intel 82371AB/EB/MB PIIX4 ACPI (rev 08)   Подсистема: набор микросхем виртуальной машины VMware Inc

15ad: 1976

Значение поставщика: "15ad"

Существуют также специальные порты backdoor, которые работают в разных VMM в различных версиях. SIDT трюк тоже хорош, но что, если VMM отсутствует в списке, который проверяет его код?

Ответ 9

Мне посчастливилось просто взглянуть на MAC-адрес, поскольку всем производителям дается блок, и первые 3 части уникальны для них.

//look at the MAC address and determine if it a Virtual Machine
$temp = preg_split("/\s+/",exec("/sbin/ifconfig -a eth0 2>&1 | /bin/grep HWaddr"), -1, PREG_SPLIT_NO_EMPTY);
//Virtual Box MACs all start with '08:00:27:xx:xx:xx'
if (strpos($temp[4], '08:00:27') !== false) $_SESSION['DEVELOPMENT'] = true;  

Ответ 10

dmidecode -s system-product-name

Протестировано на VirtualBox, результат:

Virtualbox