Określ, kiedy działa na maszynie wirtualnej

Czy istnieje Oficjalny sposób na określenie, czy aplikacja działa w VMWare lub Virtual PC(czy jak to Microsoft nazywa teraz)? Kod widziałem jest zwykle hack, który wykorzystał jakiś dziwny efekt uboczny behawioralne w określonej wersji VMWare lub wirtualnego komputera.

Najlepiej kod Delphi, ale jeśli można link do oficjalnego wyjaśnienia to jestem pewien, że mogę go przekonwertować.

Author: Jim McKeeth, 2009-04-23

10 answers

Napisałem serię artykułów na ten temat w zeszłym roku, z kodem źródłowym. VMware i Wine detection są tutaj . Wirtualny PC jest tutaj . Wszystkie trzy z nich mają dość żelazną detekcję, ponieważ istnieją udokumentowane wywołania zwrotne do hipernadzorcy (w przypadku Wine, rozszerzenie do standardowej biblioteki DLL). W komentarzu umieściłem nieprzetestowany Detektor VirtualBox (nie mam go zainstalowanego do testowania). Parallels może być wykrywalny za pomocą wywołania zwrotnego również, ale nie mam go zainstalowanego. Link do dokumentacji (która jest słaba, ponieważ pochodzi od badacza bezpieczeństwa koncentrującego się na exploitach), ale znajduje się tutaj, Jeśli masz go zainstalowanego i jesteś zainteresowany. Istnieje również PPT tutaj, który zawiera pewne informacje na temat wykrywania piaskownicy, Bochs i Xen. Nie ma w nim dużo kodu, ale może dać ci punkt wyjścia, jeśli będziesz musiał je wykryć.

 34
Author: Marshall Fryman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-11 04:47:36

Projekt kodu pokazuje sposób na wykrycie, czy twój program działa wewnątrz maszyny Wirtualnej, który szczegółowo opisuje, jak go wykonać, aby dobrze zrozumieć

 5
Author: TStamper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-22 23:55:18

Myślę, że najlepszym podejściem do tego jest sprawdzenie profili sprzętowych. Zwirtualizowany sprzęt zwykle używa części nazwy firmy. Jeśli zaznaczysz Opis płyty głównej w wirtualnym komputerze, zauważysz, że jest ona wykonana przez "Microsoft Corporation". Podobnie w VMWare Karta ethernet będzie poprzedzona znakiem vmnet.

 2
Author: John T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-22 23:57:14

Ten wątek na forach SysInternals zawiera kilka odpowiedzi (oczywiście w Delphi), w tym jedną funkcję IsVM. Przetestowałem NA XP i Win2003 hostowane na XP i Vista w VMWare z dobrymi wynikami.

 2
Author: Bruce McGee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-25 16:03:47

Tu jest sposób WMI: http://blogs.msdn.com/virtual_pc_guy/archive/2005/10/27/484479.aspx

Dwukrotnie sprawdzałem obraz XP uruchomiony na wirtualnym komputerze, a wartość, dla której testują, jest nadal taka sama. Nie gwarantuję jednak, jakie inne maszyny wirtualne tu wrócą...

Właściwie mam program Delphi, który napisałem kilka lat temu, aby uzyskać listę I zmienić domyślną drukarkę za pomocą WMI, bez konieczności stosowania komponentów innych firm lub czegoś podobnego. W jeśli nie jesteś przyzwyczajony do pracy z WMI z Delphi, mogę wysłać Ci kopię, więc masz coś do pracy off (niekoniecznie jest to zgodne z Unicode, choć, ale nie powinno być zbyt trudne dla mnie, aby uaktualnić go w razie potrzeby).

 1
Author: Michael Madsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-23 00:11:36

Użyłem metody RedPill (przetłumaczonej na Delphi, ale kod nie jest taki trudny do zrozumienia), która działała dość dobrze. Włączyłem również kilka dodatkowych kontroli za pomocą połączeń WMI, aby uzyskać takie rzeczy, jak nazwa dostawcy karty sieciowej i prawa autorskie, ale to było do wykrywania konkretnych wersji wirtualnego komputera.

Moje zrozumienie metody RedPill jest takie, że powinna ona działać i wykrywać wszystkie maszyny wirtualne w oparciu o naturę działania. Istnieje możliwość, że fałszywe pozytywy mogą być generowane również jako nowa funkcja Windows w systemie Windows 7 może być skonfigurowany do uruchamiania wybranych programów w kopii systemu Windows XP bezproblemowo wewnątrz systemu Windows 7.

 1
Author: skamradt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-24 23:45:12

Miałem szczęście tylko patrząc na adres MAC, ponieważ wszyscy producenci otrzymują blok, a pierwsze 3 części są dla nich unikalne.

//look at the MAC address and determine if it's a Virtual Machine
$temp = preg_split("/\s+/",exec("/sbin/ifconfig -a eth0 2>&1 | /bin/grep HWaddr"), -1, PREG_SPLIT_NO_EMPTY);
//Virtual Box MACs all start with '08:00:27:xx:xx:xx'
if (strpos($temp[4], '08:00:27') !== false) $_SESSION['DEVELOPMENT'] = true;  
 1
Author: DAE51D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-01 01:40:36

Aby określić, że maszyna jest fizyczna lub VM

dmidecode | egrep -i 'manufacturer|product'

Jeśli nie znaleziono polecenia dmidecode zainstaluj odpowiednie rpm.

Jest to testowane na maszynach EXSI, VMWARE i hyperv.

 1
Author: Sampath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-22 22:40:52

Jeśli chcesz ogólnie wykryć obecność dowolnego rodzaju wirtualizacji, najlepiej analizować charakterystykę wydajności. Weź coś, co jest znacznie wolniejsze w wirtualizacji(np. MMU ciężkie obciążenie pracą, jak Fork-bomb) i zmierz go z normalną aplikacją przestrzeni użytkownika związaną z procesorem. Z proporcji można łatwo stwierdzić.

Najprostszym pod względem wysiłku, jeśli zależy Ci tylko na niektórych VMMs, jest szukanie ich sprzętu - tj. urządzeń VMware PCI:

00:07.3 Mostek: Intel Corporation 82371AB/EB / MB PIIX4 ACPI (rev 08) Podsystem: VMware Inc Virtual Machine Chipset

15ad:1976

Wartość sprzedawcy to '15AD'

Istnieją również specyficzne porty backdoor, które działają na różnych VMMs w różnych wersjach. SIDT trick też jest dobry, ale co jeśli VMM nie jest na liście, że jego kod sprawdza?

 0
Author: nosatalian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-29 08:45:20
dmidecode -s system-product-name

Testowane na VirtualBox, wynik:

Virtualbox
 0
Author: Emilio Hodge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-07 02:35:07