распознавать виртуальную среду - PullRequest
2 голосов
/ 28 февраля 2012

в одном из моих последних собеседований на работу мне задали вопрос, который до сих пор я даже не могу найти, как его решить.

, поскольку это очень интересный вопрос, я подумал, что, может быть, у кого-то здесь возникнет идея.

Вопрос в простом: «Предложите способ создания приложения, которое сможет распознавать, работает оно на виртуальной машине или нет». (VM относится не к CLR или JVM, а к полностью виртуализированной среде, которую вы можете создать с помощью VMware)

Есть идеи?

1 Ответ

4 голосов
/ 28 февраля 2012

Взгляните на Обнаружение препятствующей виртуальной машине , презентацию о том, как сделать обратное (остановка приложения, обнаружившего, что оно работает на ВМ, чтобы предотвратить изменение поведения вредоносных программ)

В этой презентации перечислен ряд различных механизмов, которые обычно используются для обнаружения среды виртуальной машины:

  • Найдите в операционной системе (например, в реестре, файловой системе) «контрольный сигнал»."Признаки того, что это виртуальная машина (ссылки на VMWare - это пустая жертва)
  • Посмотрите, где в памяти размещены критические структуры памяти (такие как IDT ) - как правило, это вышев памяти на виртуальных машинах, чем на физических машинах.
  • Ищите виртуальное оборудование, специфичное для ВМ (например, сетевые адаптеры или USB-контроллеры)
  • Ищите аномалии в синхронизации часовс хост-машиной.
  • Ищите возможности процессора для ВМ - некоторые виртуальные маКитай вводит дополнительные инструкции на машинном языке помимо стандартного набора команд x86 (для таких вещей, как общение гостя с хостом)

В конечном счете, однако, не существует 100% надежного способа определения, работаете ли вы на виртуальной машине.машина - если цель состоит в том, чтобы предоставить полностью необнаружимую среду, то каждый из этих механизмов может быть «исправлен», так что виртуальная машина будет полностью необнаружима.

...