Я пытаюсь найти способ программно определить, что моя программа работает на виртуальной машине, насколько я знаю, для параллелей это не так.
На вкладке производительности диспетчера задач Windows 8 отображается опция "Virtaulization", что это значит? Когда я запускаю Windows 8 на виртуальной машине, он меняется на виртуальные процессоры и виртуальную машину: да, так некоторые из них, как Windows 8 обнаруживает, что он запущен на виртуальной машине, как Windows 8 обнаруживает, что он работает на виртуальной машине? Возможно ли получить эту информацию программно? Я пробовал как на параллелях, так и на vm ware, и оба отлично работают.
На VMware вы можете проверить, что CD-привод vendor- должен быть "VMware" или "VMware, Inc." или что-то вроде этого.
Я не знаю о рабочей станции VMware, но на ESXi ваш MAC-адрес обычно начинается с "00:50:56". Вы тоже можете это использовать.
Посмотрите на virt-what. Возможно, вы можете перенести его в Windows.
А возможно, как обнаружить, что установка выполняется на виртуальной машине? могу помочь тебе.
Вы должны взглянуть на эту интересную статью Red Pill... or how to detect VMM using (almost) one CPU instruction
от Joanna Rutkowska
которая была здесь, но теперь мертва и может быть просмотрена только с помощью waybackmachine здесь и для Virtualization: Red Pill or Blue?
Steven McElwee
который также был здесь, но теперь его можно увидеть только здесь.
Вот код:
int swallow_redpill()
{
unsigned char m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3";
*((unsigned*)&rpill[3]) = (unsigned)m;
((void(*)())&rpill)();
return (m[5]>0xd0) ? 1 : 0;
}
Он должен возвращать 1, если работает на виртуальной машине, и 0, если нет.
Изменение: он может возвращать ложные срабатывания на современном процессоре и, по- видимому, лучше сочетать пару тестов вместе, чтобы убедиться, что результат реален.