Как узнать виртуальная машина или нет windows

Обновлено: 06.07.2024

Услышав слово «виртуализация», одни пользователи ничего не представляют, так как не имеют понятия, что это такое. У других возникают ассоциации с гостевой операционной системой, установленной на виртуальную машину, например, через Virtual Box. Увы, виртуализация имеет мало общего с программными виртуальными машинами. На самом деле она позволяет одновременно и полноценно работать за одним компьютером двум и более пользователям независимо один от другого.

В этой публикации мы расскажем, как узнать, поддерживает ли процессор виртуализацию, установленный на компьютере или ноутбуке. Помогут в этом информация на официальном сайте устройства, сторонние приложения, а также инструменты операционной системы.

Что такое виртуализация

Давайте сначала разберемся для чего нужна виртуализация процессора. Осень 2003 года. Intel демонстрирует Vanderpool Technology (VT) — технологию образования на одном физическом компьютере «партиций» — разделов, позволяющих одновременно запускать несколько разных или одинаковых операционных систем. Каждый пользователь может полноценно работать на своём месте, аппаратные ресурсы становятся для них общими. До этого подобная фишка была доступной только для серверных станций.

Для реализации этой функции виртуализацию должен поддерживать центральный процессор. Пользователям потребуются отдельные мыши и клавиатуры, подключаемые через USB, а также индивидуальные устройства вывода (мониторы, телевизоры). Аппаратные ресурсы делятся приблизительно поровну, но могут распределяться и программно.

Ранее, когда устройства ввода работали через порт PS/2, применялись разветвители для подключения пары мышек или клавиатур к компьютеру.

На одном оборудовании могут размещаться разные операционные системы, изолированные одна от другой. Это позволяет не только сэкономить на приобретении аппаратуры, но и облегчить труд разработчиков, которые создают продукты для разных платформ. Подробнее, что такое виртуализация и как её включить для процессоров Intel, читайте по ссылке, а для AMD — на странице.

Как узнать, поддерживает ли процессор виртуализацию

Определить, реализована ли на вашем центральном процессоре виртуализация, можно несколькими способами.

1. Диспетчер задач

Запустите этот системный инструмент комбинацией клавиш Ctrl + Shift + Esc или через Win + X. Если отобразится миниатюрное окошко, кликните Подробнее.

A2kWN8erUxpcAAAAAElFTkSuQmCC

Во вкладке Производительность щёлкните по блоку ЦП. Внизу справа ищите строчку Виртуализация.

1vAAAAAElFTkSuQmCC

Здесь вы можете узнать включена ли виртуализация процессора или нет.

2. Командная строка

Запустите командную строку. Для этого нажмите Win + R, а в открывшемся окне введите cmd и нажмите Enter.

+tlnT3nx+9nedahyf8DdxK8mMLYGhwAAAAASUVORK5CYII=

В командную строку введите systeminfo и отправьте команду кнопкой ОК. Нужную информацию найдёте внизу окна.

g8e6PUx4CkmXQAAAABJRU5ErkJggg==

3. Официальный сайт

Требуемая информация приводится на официальной странице процессора в интернете и в бумажной документации, входящей в комплект поставки. Во втором случае детально изучите руководство пользователя или иную сопроводительную документацию. В первом — нажмите клавиши Alt + S для вызова поисковой строки. Введите Система и нажмите Открыть.

ogfvueq+L81i99lbvzEFQAAAABJRU5ErkJggg==

Скопируйте название модели процессора и найдите его на официальном сайте (на примере Intel).

oSZqd98pYbgAAAABJRU5ErkJggg==

На странице опуститесь к разделу Усовершенствованные технологии и отыщите строчку Технология виртуализации Intel (VT-x).

d445DLkUUUDT1FU1SKEEEIIISRpuPq9cchlyKOKBp6iqKpFCCGEEEJI0nD1e+OQy5BHVUkDT1EURVEURVEURVHUF0Xvyv8fjApbrHiNSlAAAAAASUVORK5CYII=

4. Intel Processor Identification Utility

Это средство для автоматического определения модели центрального процессора производства Intel, установленного в материнскую плату компьютера или ноутбука. Утилита отобразит подробную сводку об устройстве, в том числе поддерживаемые технологии. К ним относится и виртуализация.

Загрузите утилиту со страницы, запустите полученный файл, выберите язык интерфейса и жмите Далее.

EAAAAASUVORK5CYII=

Обязательно инсталлируйте Microsoft Visual Studio 2015, без неё утилита не установится.

pWke6fweJU9jMu0uKDgAAAABJRU5ErkJggg==

Укажите каталог для распаковки файлов Intel Processor Identification Utility, затем кликните Установить.

wEoX+hmEsj+2wAAAABJRU5ErkJggg==

Запустите приложение, ознакомившись с условиями его использования.

Xm3ZwuPqMCUAAAAASUVORK5CYII=

Разрешите или запретите программному обеспечению отправлять на серверы Intel сведения о работе утилиты.

iN9ljF0S0vc2o1zNv+kdd5Z9jvvZ+OezPOuC0f8P1dqv89XfDCYAAAAASUVORK5CYII=

После завершения идентификации кликните по разделу Технологии ЦП.

eGDEAAAAASUVORK5CYII=

Ищите строчку Технологии виртуализации Intel. Если текст белый, значит, виртуализация поддерживается, если серый — нет. Полученную информацию вы можете экспортировать в текстовый файл через главное меню: Файл – Сохранить.

wEMvXnv1xb94wAAAABJRU5ErkJggg==

Выберите каталог для хранения файла и нажмите ОК.

we2eRctFDDIRgAAAABJRU5ErkJggg==

Сохранённые данные выглядят следующим образом:

wHHHKOK7YTG0AAAAABJRU5ErkJggg==

4. SecurAble

Этот бесплатный портативный инструмент отобразит три характеристики процессора: разрядность, аппаратную поддержку DEP и виртуализации. После запуска программы смотрите на значение третьего блока.

wGWALTrtq+d9QAAAABJRU5ErkJggg==

Кликнув по кнопке, вы откроете краткую справку о технологии визуализации.

5. AIDA64

Это популярная информационно-диагностическая утилита, отображающая в том числе и поддерживаемые процессором технологии.

Скачайте программу с официального сайта, установите (укажите язык интерфейса, папку для распаковки файлов) и запускайте её.

wNHecDWioX3KwAAAABJRU5ErkJggg==

В вертикальном меню слева разверните раздел Компьютер, в нём кликните DMI. Правее перейдите в подраздел Intel vPro. Внизу смотрите на значение строчки CPU VT-x.

wEvvYE7ja+JoQAAAABJRU5ErkJggg==

6. AMD-V Technology and Microsoft Hyper-V System Compatibility Check

Эта утилита позволяет узнать, включена ли виртуализация на процессорах AMD и совместима ли система с Hyper-V. Если виртуализация отключена, то утилита сообщит об этом и предложит включить её в BIOS.

ZmE++1KdAC38BshDJEApDiocAAAAASUVORK5CYII=

Выводы

Теперь вы знаете как проверить поддерживает процессор виртуализацию. Windows 10 позволяет своими встроенными средствами узнать всё необходимое. Для этого можно также воспользоваться сторонними и фирменными для обоих производителей CPU утилитами. Кроме того, информацию об этом можно найти на официальном сайте и в бумажной документации.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Не каждому хочется, чтобы его, кхм, новый текстовый редактор какие-нибудь неприятные дядьки исследовали под виртуальной машиной. Детект виртуалок — обязательный функционал определенного рода софта, и поэтому наша рубрика ну совершенно никак не может обойтись без обзора соответствующих способов!

Во-первых, любая виртуальная машина несет на своем борту какое-нибудь специфическое оборудование. Это касается видеоадаптера, жесткого диска, идентификатора процессора, версии BIOS, MAC-адреса сетевой карты.

Во-вторых, виртуальные машины оставляют следы в системе в виде запущенных вспомогательных процессов, драйверов и других специфических объектов.

В-третьих, если как следует покопаться в реестре виртуальной машины, там можно найти много всяких интересных ключей, характерных только для виртуальных машин.

Ну и в-четвертых, некоторые производители специально оставляют возможности, позволяющие обнаружить их продукты.

Что же касается общих признаков наличия виртуальной машины, предложенных в свое время госпожой Рутковской (характерное расположение таблиц IDT, GDT и LDT, а также время выполнения операций процессором), то в настоящий момент все эти признаки трудно поддаются анализу и приведению к какому-нибудь общему знаменателю, главным образом из-за многоядерности и многоликости современных процессоров.

Начнем, пожалуй, с жесткого диска. Если посмотреть идентификатор жесткого диска в диспетчере устройств на виртуальной машине, то в его составе можно увидеть интересные строчки:

Самый простой способ узнать наименование жесткого диска — прочитать значение ключа с именем «0» в ветке реестра HKLMHARDWARESYSTEMCurrentControlSetServicesDiskEnum.

В этом месте перечисляются все дисковые накопители в системе, и первым, как раз в ключе с именем «0», будет тот диск, с которого произошла загрузка системы.

Идентификатор жесткого диска VirtualBox в реестре

Идентификатор жесткого диска VirtualBox в реестре

Как читать реестр, я думаю, ты знаешь. Используем сначала API RegOpenKeyEx для открытия нужного ключа, далее с помощью RegQueryValueEx читаем значение. Выглядеть это должно примерно вот так:

Далее все просто — используем strstr для поиска нужных нам строк в считанном значении и, в зависимости от результата сравнения, делаем вывод. Версия BIOS содержится в ключе «SystemProductName» в ветке HKLMHARDWAREDESCRIPTIONSystemBIOS. К примеру, для VMware там будет лежать строка «VMware Virtual Platform», а для VirtualBox — «VBOX –1».

Прочитать это все можно с помощью все тех же API — RegOpenKeyEx и RegQueryValueEx.

Версия BIOS Parallels Workstation в реестре

Версия BIOS Parallels Workstation в реестре

Данные о видеоадаптере можно подглядеть в HKLMSystemCarrentControlSetEnumPCI. В этой ветке перечислено все, что подключено к шине PCI, в том числе и видеокарта. Для VirtualPC это строчка вида VEN_5333&DEV_8811&SUBSYS_00000000&REV_00, которая определяет видеоадаптер S3 Trio 32/64, эмулируемый виртуалкой от Microsoft — на реальном железе такое оборудование нынче днем с огнем не сыскать (а у меня такая была в конце прошлого века. — Прим. ред.). Для VirtualBox видеокарта описана последовательностью VEN_80EE&DEV_BEEF&SUBSYS_00000000&REV_00, что расшифровывается как «VirtualBox Display», а у Parallels Workstation — строка VEN_1AB8&DEV_4005&SUBSYS_04001AB8&REV_00 определяет видеоадаптер «Parallels Display».

Помимо этого, в VirtualBox можно найти строку VEN_80EE&DEV_CAFE&SUBSYS_00000000&REV_00, определяющую некий «VirtualBox Device», а у Parallels Workstation строки VEN_1AB8&DEV_4000&SUBSYS_04001AB8&REV_00 и VEN_1AB8&DEV_4006&SUBSYS_04061AB8&REV_00, определяющие «Parallels Tools Device» и «Parallels Memory Controller» соответственно.

Алгоритм действий следующий: пытаемся открыть нужный нам ключ, и если он открывается успешно, то оборудование, описанное этим ключом, в наличии и можно делать вывод о присутствии какой-либо виртуальной машины:

Идентификатор процессора определяется с помощью команды cpuid. Благодаря ей можно получить много всякой полезной информации об установленном процессоре. Вид выдаваемой этой командой информации зависит от содержимого регистра EAX. Результат работы команды записывается в регистры EBX, ECX и EDX. Подробно про эту команду можно почитать в любой книге по программированию на ассемблере. Для наших целей мы будем использовать эту инструкцию, предварительно положив в регистр EAX значение 0x40000000:

После выполнения этого кода на VMware Workstation в переменных ID_1, ID_2 и ID_3 будут записаны значения 0x61774d56, 0x4d566572 и 0x65726177 соответственно (в символьном представлении это не что иное, как «VMwareVMware»), на VirtualBox в ID_1 и в ID_2 будет лежать значение 0x00000340, а на Parallels Workstation в ID_1 0x70726c20, в ID_2 — 0x68797065 и в ID_3 — 0x72762020 (что соответствует строке «prl hyperv»).

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

Ты наверняка знаешь, что первые три байта MAC-адреса сетевой карты определяют ее производителя. Производители виртуальных машин в этом плане не исключение:

Вытащить эти первые три байта из MAC-адреса нам поможет API-функция GetAdaptersInfo:

Для нормальной работы практически все виртуальные машины требуют установки дополнений к гостевой операционной системе, например VBoxGuestAddition для VirtualBox или Parallels Tools для Parallels Workstation. Без этих дополнений работа с виртуальной машиной несколько затруднительна (ни тебе нормального разрешения экрана и полноэкранного режима, ни взаимодействия с USB-девайсами, ни нормальной настройки сетевых подключений). В общем, все производители виртуалок не рекомендуют использовать их без этих дополнений. А эти самые дополнения оставляют очень заметный след в виде запущенных процессов:

Для поиска процесса по имени мы воспользуемся функциями CreateToolhelp32Snapshot, Process32First и Process32Next:

Помимо непосредственно самих процессов, демаскирующим признаком могут стать окна, открытые этими процессами. Окон в каждой из рассматриваемых виртуальных машин может быть довольно много, и все их мы перечислять не будем, а ограничимся одним или двумя. Итак:

Открытые окна для VMware (красным выделено окно класса VMSwitchUserControlClass)

Открытые окна для VMware (красным выделено окно класса VMSwitchUserControlClass)

Найти окно по имени класса очень просто — для этого есть функция FindWindow:

Помимо процессов и окон, указывающих на наличие ВМ, можно найти и другие «подозрительные» объекты — например, если покопаться в гостевой ОС виртуальной машины утилитой WinObj или какой-нибудь аналогичной, то можно найти вот такие объекты:

«Подозрительные» объекты в VirtualBox

«Подозрительные» объекты в VirtualBox

Проверить наличие «подозрительного» объекта очень просто, достаточно попытаться открыть его с помощью CreateFile:

Помимо признаков наличия специфического оборудования, в реестре можно увидеть и другие следы, оставляемые виртуальными машинами. Некоторые из них базируются в ветке HKLMHARDWAREACPIDSDT. Достаточно в этом месте проверить наличие таких вот ключей:

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

Ключ PRLS__ в реестре Parallels Workstation

Ключ PRLS__ в реестре Parallels Workstation

Некоторые производители (в частности, VMware и Microsoft) специально реализуют возможности управления своими продуктами, которые можно использовать для наших целей.

В Virtual PC используются инвалидные (не «инвалидные», а «альтернативно одаренные». И вообще-то они «недействительные». — Прим. ред.) команды процессора с опкодами 0x0F, 0x3F, 0x07 и 0x0B, попытка выполнения которых на реальном процессоре вызовет исключение, в то время как на Virtual PC все пройдет нормально. С помощью этих команд можно достаточно просто задетектить виртуалку от Microsoft:

В VMware Workstation для взаимодействия гостевой и основной ОС реализован небольшой бэкдор в виде порта с номером 0x5658. Для его использования необходимо в EAX положить «магическое» число 0x564d5868 (в символьном представлении — «VMXh»), а в ECX записать одну из команд взаимодействия гостевой и основной ОС (например, команда 0x0A возвращает версию установленной VMware Workstation). Короче, выглядит все это приблизительно так:

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

Существует ли способ определить из виртуальной машины, что ваш код выполняется внутри виртуальной машины?

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

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

Классический трюк для обнаружения виртуальной машины состоит в том, чтобы заполнить ITLB, выполнить инструкцию, которая должна быть виртуализирована (что обязательно очищает такое состояние процессора, когда он дает управление гипервизору), а затем выполнить еще немного кода, чтобы определить, заполнен ли ITLB. Первая бумага на нем расположена здесь , а также довольно красочное объяснение из блога исследователя и альтернативная обратная ссылка на статью блога (Images broken).

Суть обсуждения этого вопроса заключается в том, что всегда есть способ обнаружить вредоносный гипервизор, и гораздо проще обнаружить тот, который не пытается скрыть.

Red Hat имеет программу, которая определяет, под каким (если таковые имеются) продуктом виртуализации она работает.: virt-what .

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

Более эмпирический подход заключается в проверке известных драйверов устройств виртуальной машины. Вы можете написать запросы WMI, чтобы найти, скажем, адаптер дисплея VMware, дисковод, сетевой адаптер и т. д. Это было бы удобно, если бы вы знали, что вам нужно беспокоиться только об известных типах узлов виртуальных машин в вашей среде. Вот пример выполнения этого в Perl, который может быть перенесен на язык по вашему выбору.

Однажды я наткнулся на фрагмент кода ассемблера, который говорил вам, находитесь ли вы в виртуальной машине. Я погуглил, но не смог найти оригинальную статью.

Я нашел это, хотя: определить, если ваша программа работает внутри виртуальной машины.

Надеюсь, это поможет.

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

Если вам нужно, в Linux наиболее распространенным способом является просмотр /sys/devices/virtual/dmi/id/product_name , в котором будет указано имя ноутбука/материнской платы в большинстве реальных систем и гипервизора в большинстве виртуальных систем. dmidecode | grep Product - Еще один распространенный метод, но я думаю, что для этого Требуется root-доступ.

Вы можете определить, находитесь ли вы в виртуальной машине, посмотрев на MAC-адрес вашего сетевого подключения. Xen, например, обычно рекомендует использовать определенный диапазон адресов 00: 16: 3e: xx:xx: xx.

Это не гарантируется, поскольку администратор системы должен указать, какой MAC-адрес ему нравится.

В системах Linux вы можете попытаться найти общие файлы на /proc.

Пример, existente из /proc / vz / tell you-Это OpenVZ.

Вот полное руководство по обнаружению окружения виртуальной машины под Linux без необходимости "пить таблетки":)

TrapKIT предоставляет ScoopyNG, инструмент для идентификации VMware - он пытается обойти методы уклонения, но не обязательно нацелен на любое программное обеспечение виртуализации, кроме VMware. Доступны как исходные, так и двоичные файлы.

ОТВЕТЫ

Ответ 1

Вы можете попытаться использовать следующий PowerShell script, он использует WMI, чтобы узнать, является ли машина виртуальной машиной или физической машиной.

Ответ 2

Насколько я знаю, нет простого способа сделать это.

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

Трюк, который вы можете попробовать, это определить, установлены ли инструменты VMWare или VirtualBox Tools. В большинстве случаев они устанавливаются на гостевой ОС для обеспечения необходимых функций, но будет сложно поддерживать различные установки GUIDS на вашем конце, чтобы это не идеальное решение.

enter image description here

--- Кроме того, если виртуальная машина работает в среде Linux KVM, вывод будет таким же

Ответ 3

Чтобы проверить это из командной строки, вы можете запустить это: systeminfo | find "System"

Пример вывода для виртуального сервера:

Пример вывода для физического сервера:

Ответ 4

Нет простого способа узнать, работаете ли вы в голом металле или на виртуальном компьютере, самое лучшее, что вы можете сделать, это получить некоторую информацию об оборудовании и сделать обоснованное предположение, например, если машина сетевой адаптер, который содержит Microsoft, VMware, Oracle, Hyper-V, Virtual или VirtualBox, скорее всего, это виртуальная машина, учитывая, что ни Microsoft, ни Oracle, ни VMware не создают сетевые карты.

Ответ 5

Запустите командную строку командной строки systeminfo, чтобы просмотреть детали системы системы. Там вы найдете информацию о виртуле и физической машине.

Ответ 6

Единственный * программный * способ, которым я знаю это надежно:

  • Напишите приложение, которое сканирует вашу сеть (или диапазон IP), чтобы получить список машин.
  • Покажите эти машины человеку и попросите их установить флажок, если это VM.
  • Распечатайте отчет.

Ответ 7

Это возвращает "1" для ограниченного диапазона рабочих столов и ноутбуков в моей среде и "0" для рабочих станций VMWare 9, ESX 5.5 и Citrix 6.5 и 7.6. BIOSCharacteristic "50" (один "зарезервирован для системного поставщика" ) Я нашел только в четырех виртуальных средах, чтобы работать в обратном порядке.

Изменить: или там:

Возвращает "5" на рабочем столе HP "0" на рабочей станции VMware 9 и ESX 5.5, а не проверяется другими.

Ответ 8

вы можете использовать эту команду в cmd или powershell

Вы найдете строку со следующим текстом (или подобным):

Производитель системы: VMware, Inc. Модель системы: виртуальная платформа VMware

Читайте также: