Pull to refresh
3
0
Максим Шудрак @VitalityM

R&D в сфере информационной безопаcности

Send message

Детектим виртуальную машину на C#: 1 уровень

Reading time 14 min
Views 25K

Одним жуть каким прохладным январским утром от знакомого прилетел вопрос — как на C# определить, не запущена ли программа в ОС (оконное приложение в ОС Windows 7 или новее) на виртуальной машине.


Требования к такому детектору были достаточно жёсткими:

  1. Должен быть полностью в исходных кодах,
  2. Должен собираться с помощью Visual Studio,
  3. Должен работать из-под аккаунта непривилегированного пользователя (нельзя использовать методы, требующие, к примеру, установки драйверов устройств, или иных операций, для которых нужны права администратора),
  4. Разрешено использовать .NET Framework 4.5 и никаких лишних зависимостей (типа Visual C++ Redistributable Package).


Под катом описание реализованного детектора на C# (в следующей части — с некоторыми элементами C++) и приличным количеством неприличного кода с использованием Visual Studio 2015 Community.


Структура публикации


  • 1 уровень. Изучение матчасти и простейших существующих решений:

    • немного теории касательно виртуализации,
    • реализация проверки ВМ с помощью данных из Windows Management Instrumentation (WMI).

  • 2 уровень. Поиск статей и публикаций про детектирование запуска в виртуальных машинах:

    • допиливаем реализацию с WMI,
    • работа с инструкцией CPUID.

  • 3 уровень. Поиск материалов с хакерских конференций:

    • допиливаем работу с CPUID,
    • делаем сводную таблицу параметров и результатов тестирования.
Читать дальше →
Total votes 30: ↑29 and ↓1 +28
Comments 27

Information

Rating
Does not participate
Location
San Francisco, California, США
Date of birth
Registered
Activity