Я пытаюсь найти способ программно обнаружить, что моя программа работает на виртуальной машине, насколько я знаю, что для параллелей не существует общего способа сделать это.
На вкладке производительности диспетчера задач Windows 8 отображается параметр «Virtaulization», что это значит? Когда я запускаю Windows 8 на виртуальной машине, она меняется на виртуальные процессоры и виртуальную машину: да, так как Windows 8 обнаруживает, что она работает внутри виртуальной машины, как Windows 8 обнаруживает, что она работает на виртуальной машине? Можно ли получить эту информацию программно? Я пробовал как на параллелях, так и VMware и оба отлично работает.
Вы должны взглянуть на эту интересную статью Red Pill... or how to detect VMM using (almost) one CPU instruction
от Joanna Rutkowska
который раньше был Вот но теперь он мертв и может быть просмотрен только с обратная машина здесь а также 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, если нет.
Редактировать: он может возвращать ложные срабатывания на современном процессоре и его видимо лучше совмещать пара тесты вместе, чтобы убедиться, что результат реален.
В VMware вы можете проверить наличие поставщика компакт-дисков — «VMware» или «VMware, Inc.». или что-то вроде этого.
Я не знаю о рабочей станции VMware, но на ESXi ваш MAC-адрес обычно начинается с «00:50:56». Вы могли бы использовать это тоже.
Посмотри на вирт-то,. Может быть, вы можете перенести его на Windows.
И возможно Как определить, что установка запущена на виртуальной машине? могу помочь тебе.