Определите при выполнении в виртуальной машине

Если вы ищете записи, которые являются уникальными в вашем списке файлов

cat $path/$files|uniq -u>/tmp/output.txt
grep -f /tmp/output.txt $path/$files
39
задан Jim McKeeth 23 April 2009 в 00:04
поделиться

8 ответов

В прошлом году я написал об этом серию статей с исходным кодом. VMware и Wine обнаружения находятся здесь . Виртуальный ПК здесь . Все три из них имеют довольно железное обнаружение, потому что есть задокументированные обратные вызовы для гипервизора (в случае Wine - расширение стандартной DLL). Я разместил непроверенный детектор VirtualBox (не установлен для тестирования) в разделе комментариев. Parallels также может быть обнаружен с помощью обратного вызова, но он не установлен. Ссылка на документацию (которая плохая, так как она от исследователя безопасности, специализирующегося на эксплойтах), но расположена здесь здесь , если она у вас установлена ​​и вы заинтересованы. Здесь также есть PPT , который содержит некоторую информацию по обнаружению Sandbox, Bochs и Xen.

34
ответ дан 27 November 2019 в 02:48
поделиться

Code Project shows a way to Detect if your program is running inside a Virtual Machine that goes in much detail on how to accomplish it to give a good understanding

5
ответ дан 27 November 2019 в 02:48
поделиться

I think the best approach to this is to check the hardware profiles. Virtualized hardware usually uses part of the companies name. If you check the motherboard description while in Virtual PC, you will notice it is made by "Microsoft Corporation". Likewise in VMWare, your ethernet adapter will be prefixed with VMNet.

2
ответ дан 27 November 2019 в 02:48
поделиться

В этой теме на форумах SysInternals есть пара ответов (конечно, в Delphi), включая одну функцию IsVM. Я проверил на XP и Win2003, размещенных на XP и Vista в VMWare, с хорошими результатами.

2
ответ дан 27 November 2019 в 02:48
поделиться

Здесь опубликован способ WMI: http://blogs.msdn.com/virtual_pc_guy/archive/2005/10/27/484479.aspx

I've double checked in an XP image running on Virtual PC, and the value they're testing for is still the same. I won't guarantee what other VMs return here, though...

I've actually got a Delphi program I wrote a couple of years ago to get a list of and change the default printer using WMI, without requiring 3rd party components or anything like that. In case you're not used to working with WMI from Delphi, I can send you a copy so you have something to work off (it's not necessarily Unicode-compatible, though, but it shouldn't be too hard for me to upgrade it if need be).

1
ответ дан 27 November 2019 в 02:48
поделиться

I used the RedPill method (translated to Delphi, but the code isn't that hard to understand) which worked fairly well. I also included a few extra checks using WMI calls to get things like the network adapter vendor name and copyrights, but that was for detecting specific versions of Virtual PC.

My understanding of the RedPill method is that it should work and detect all virtual machines based on the nature of how it works. There is the possiblity that false positives might be generated also as the new Windows within Windows feature of Windows 7 can be configured to run selected programs in a copy of Windows XP seamlessly inside Windows 7.

1
ответ дан 27 November 2019 в 02:48
поделиться

Если вы хотите в целом обнаружить присутствие любого типа виртуализации, вам лучше всего проанализировать характеристики производительности. Возьмите что-то, что значительно медленнее в виртуализации (например, тяжелая рабочая нагрузка MMU, такая как вилка-бомба), и сравните его с обычным приложением пользовательского пространства, привязанным к процессору. По соотношению вы можете легко определить.

Самый простой с точки зрения усилий, если вы заботитесь только об определенных VMM, - это поискать их оборудование, например, устройства PCI VMware:

00: 07.3 Мост: Intel Corporation 82371AB / EB / MB PIIX4 ACPI (версия 08) Подсистема: Набор микросхем виртуальной машины VMware Inc

15ad: 1976

Значение поставщика - «15ad»

. Также существуют определенные бэкдор-порты, которые работают с различными VMM в различных версиях. Уловка SIDT тоже хороша, но что, если VMM отсутствует в списке, который проверяет его код?

0
ответ дан 27 November 2019 в 02:48
поделиться

Мне повезло, я просто посмотрел на MAC-адрес, поскольку всем производителям предоставляется блок, и первые 3 части являются уникальными для них.

//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
ответ дан 27 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: