Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/58: Рейтинг темы: голосов - 58, средняя оценка - 4.69
38 / 38 / 16
Регистрация: 14.03.2012
Сообщений: 168

Определить запущена программа на виртуальной машине или на настоящей

19.07.2013, 15:46. Показов 11112. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сабж. Например запустил программу, нажал на кнопку, и вылезло сообщение "Виртуалка" - Это если на виртуалке запущено ну и т,д
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.07.2013, 15:46
Ответы с готовыми решениями:

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

Как определить, что программа выполняется в виртуальной машине?
Подскажите, как можно определить, что программа выполняется в виртуальной машине (например, VirtualBox). Вариант с дескрипторными таблицами...

Как определить, на виртуальной машине ли запущен bat-файл или нет?
Вот, что и нужно, чтобы при запуске бат файла в виртуальной машине выводилось сообщение:"Произведён запуск на виртуальной...

14
 Аватар для Gemorg
178 / 153 / 10
Регистрация: 08.11.2012
Сообщений: 224
19.07.2013, 17:26
Цитата Сообщение от Никита12345 Посмотреть сообщение
Сабж. Например запустил программу, нажал на кнопку, и вылезло сообщение "Виртуалка" - Это если на виртуалке запущено ну и т,д
Проверяйте при запуске программы оборудование на виртуальной машине на присутствие таких вещей как:
Дисковод - VBOX CD-ROM
Жесткий диск - VBOX HARDDISK
Видеокарта - VgaSave

Если что нибудь из списка имеется то скорей всего программа запущена на виртуалке.
2
38 / 38 / 16
Регистрация: 14.03.2012
Сообщений: 168
19.07.2013, 17:43  [ТС]
Gemorg, Попробуем...
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
19.07.2013, 18:42
VB.NET Скопировано
1
2
3
4
5
6
7
    Function Virtual() As Boolean
        For Each R In New Management.ManagementObjectSearcher(New Management.ManagementScope("\\.\root\cimv2"), _
                    New Management.SelectQuery("Select Manufacturer from  Win32_BaseBoard")).Get
            Dim Manuf = R.Properties("manufacturer").Value.ToString.ToLower
            Return Manuf.Contains("microsoft corporation") Or Manuf.Contains("vmware") Or Manuf.Contains("virtual")
        Next
    End Function
0
38 / 38 / 16
Регистрация: 14.03.2012
Сообщений: 168
19.07.2013, 19:45  [ТС]
Step_UA, А как с этим работать не подскажите?
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
19.07.2013, 19:59
функция возвращает True если запущенна под виртуалкой, False в противном случае ... или перенесите код функции:
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
     ...
        For Each R In New Management.ManagementObjectSearcher(New Management.ManagementScope("\\.\root\cimv2"), _
                    New Management.SelectQuery("Select Manufacturer from  Win32_BaseBoard")).Get
            Dim Manuf = R.Properties("manufacturer").Value.ToString.ToLower
            If Manuf.Contains("microsoft corporation") Or Manuf.Contains("vmware") Or Manuf.Contains("virtual") then
                MsgBox("Виртуальная машина")
            Else
                MsgBox("Не похоже на виртуальную машину :)")
            End If
        Next
0
38 / 38 / 16
Регистрация: 14.03.2012
Сообщений: 168
19.07.2013, 20:05  [ТС]
Step_UA, На виртуалке и на настоящей машине пишит одно и тоже "Не похоже на виртуальную машину "
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
19.07.2013, 20:08
Посмотрите в режиме отладки, какое значение принимает переменая Manuf
1
38 / 38 / 16
Регистрация: 14.03.2012
Сообщений: 168
19.07.2013, 20:14  [ТС]
Step_UA, На компе - asustek computer inc. На виртуалке - oracle corporation. Ну теперь то все ясно. Спасибо! Но только инетересно на всех ли виртуалках будет так написано?
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
19.07.2013, 20:32
Нет, поэтому и производится сравнение с microsoft corporation, vmware ...
oracle corporation - раньше подписывалась как virtualbox
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
19.07.2013, 20:51
Цитата Сообщение от Никита12345 Посмотреть сообщение
Определить запущена программа на виртуальной машине или на настоящей
Только эвристика. Надежного и стопроцентно рабочего способа нет.
Кое-что можно "заподозрить", перебирая имена устройств в оборудовании, есть также у
разных виртуалок свои особые "бэкдоры", можно проверять систему на их наличие, также
искать процессы и службы, которые работают только в виртуальной среде и имеют
специфические имена. Чем больше способов в совокупности будет применяться, тем выше
надежность детекта. Тема сложная, короче говоря.

Поищите в Гугле документ под названием "thwarting virtual machine detection", может найдете
что-то интересное. Еще есть вот такая статья:
http://www.codeproject.com/Art... -a-Virtual

Добавлю, что в некоторых ситуациях граница между виртуальной машиной и физической становится
весьма размытой. Например, если вы установите роль Hyper-V на Windows Server 2008, он сам станет
виртуальной машиной (т.н. bare metal Hypervisor).
1
38 / 38 / 16
Регистрация: 14.03.2012
Сообщений: 168
19.07.2013, 22:50  [ТС]
Вобщем выкладываю весь код. Может кому то понадобится. Добавил еще проверку на название CD И DVD Дисковода

VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Imports System.Management
Public Class Form1
    Dim a As String
    Dim searcher As ManagementObjectSearcher = New ManagementObjectSearcher("SELECT * FROM Win32_MotherboardDevice")
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For Each wmi As ManagementObject In searcher.Get()
            a = (wmi("Name"))
        Next
        For Each R In New Management.ManagementObjectSearcher(New Management.ManagementScope("\\.\root\cimv2"), New Management.SelectQuery("Select Manufacturer from  Win32_BaseBoard")).Get
            Dim Manuf = R.Properties("manufacturer").Value.ToString.ToLower
            If Manuf.Contains("oracle") Or Manuf.Contains("microsoft corporation") Or Manuf.Contains("vmware") Or a = "VBOX CD-ROM" Then
                MsgBox("Виртуальная машина")
            Else
                MsgBox("Не похоже на виртуальную машину :)")
            End If
        Next
    End Sub
End Class
Добавлено через 1 час 57 минут
Возникла одна проблемка... Если запускать эту программу в режиме отладки - ВСЕ ОК! Если запускать готовый проэкт в exe - Вылазит ошибка! Как быть?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
19.07.2013, 22:56
Не уверен, но кажется для работы с WMI-запросами нужны права администратора.
0
38 / 38 / 16
Регистрация: 14.03.2012
Сообщений: 168
19.07.2013, 23:05  [ТС]
Убежденный, Уже разобрался... Мой Антивирь (Comondo) пихает все в santbox а оттуда значит прога не может пробраться(
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
19.07.2013, 23:18
Цитата Сообщение от Никита12345 Посмотреть сообщение
Мой Антивирь (Comondo) пихает все в santbox а оттуда значит прога не может пробраться(
Значит, нужно добавить проверку, запущена ли программа из-под антивируса
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.07.2013, 23:18
Помогаю со студенческими работами здесь

Определить, программа запущена на ноутбуке или десктопе
Здравствуйте, подскажите как можно проверить ноутбук или системный блок?

Программа не запускается на виртуальной машине Windows XP
Наваял програмку на delphi XE 2 в Windows 7 x64 (компилировал под х32). У одного человека она не запускается на виртуальной машине с XP. ...

Страшно тормозит моя программа на виртуальной машине
Привет всем! Я написал программу на .NET с несколькими таблицами, находящимися во вкладках. Данные в таблицы загружаются просто из...

Узнать программа запущена пользователем или из автозагрузки
Здравствуйте, как можно узнать была ли программа запущена пользователем или автоматически при загрузки ОС? (если она добавлена в...

Проверка: программа запущена от имени администратора или нет
Нужно поверить: программа запущена от админа или нет! Если от админа, то программа спокойно запускается, а если нет, то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер