Как определить, что вы работаете под виртуальной машиной? - PullRequest
27 голосов
/ 02 сентября 2008

Есть ли способ определить изнутри ВМ, что ваш код выполняется внутри ВМ?

Я полагаю, есть более или менее простые способы идентификации конкретных систем виртуальных машин, особенно если на виртуальной машине установлены расширения провайдера (например, для VirtualBox или VMWare). Но есть ли общий способ определить, что вы не работаете непосредственно с процессором?

Ответы [ 12 ]

0 голосов
/ 02 сентября 2008

Один хороший пример - это, очевидно, выполнение запроса WMI для производителя материнской платы, и если он возвращает «Microsoft», вы находитесь в виртуальной машине. Я думал, что это только для VMWare. Вероятно, существуют разные способы определения программного обеспечения для каждого хоста виртуальной машины.

Эта статья здесь http://blogs.technet.com/jhoward/archive/2005/07/26/407958.aspx содержит несколько полезных советов и ссылок на несколько способов определения наличия виртуальной машины (по крайней мере, VMWare и VirtualPC).

0 голосов
/ 02 сентября 2008

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

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

Например, на клиенте VMWare под управлением Windows vmxnet.sys будет сетевым драйвером, отображаемым как ускоренный адаптер AMD PCNet для VMware.

...