Загрузка...

Защита от запуска на всех видов Virtual Machine (VM)

Тема в разделе C# создана пользователем r3xq1 26 июн 2020. 1128 просмотров

  1. r3xq1
    r3xq1 Автор темы 26 июн 2020 https://t.me/DarkSoft_Extra 119 27 июл 2018
    Создаём класс NativeMethods.cs
    Записываем в него следующий код:
    Код
    namespace AntiVM
    {
    using System;
    using System.Runtime.InteropServices;

    internal static class NativeMethods
    {
    [DllImport("kernel32.dll", BestFitMapping = false, CharSet = CharSet.Unicode)]
    internal static extern IntPtr GetModuleHandle(string lpModuleName);
    }
    }
    Теперь создаём класс CheckVirtual.cs который делает всю магию космоса
    Код
    namespace AntiVM
    {
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Management;
    using System.Windows.Forms;

    public static class CheckVirtual
    {
    /* Created r3xq1 */

    /// <summary>
    /// <b>Метод для проверки на запуск в среде RDP</b> (Remote Desktop Protocol)
    /// </summary>
    public static bool IsRdpAvailable => SystemInformation.TerminalServerSession == true;

    /// <summary>
    /// <b>Метод для проверки запуска в песочнице.</b>
    /// <para>Если исполняемый файл будет запущен внутри Песочницы то возвращяем <b>true</b> иначе <b>false</b></para>
    /// </summary>
    /// <returns><b>true</b> или <b>false</b></returns>
    public static bool SandBoxies => Process.GetProcessesByName("SbieCtrl").Length > 0 && NativeMethods.GetModuleHandle("SbieDll.dll") != IntPtr.Zero;

    /// <summary>
    /// <b>Метод для проверки Vmware. Inc на машине пользователя.</b>
    /// <para>Проходится по списку <b>VirtualNames</b> и если находит совпадения то возвращает <b>true</b> иначе <b>false</b></para>
    /// </summary>
    /// <returns><b>true</b> или <b>false</b></returns>
    public static bool CheckWMI()
    {
    var VirtualNames = new List<string>
    {
    "virtual", "vmbox", "vmware", "virtualbox", "box",
    "thinapp", "VMXh", "innotek gmbh", "tpvcgateway",
    "tpautoconnsvc", "vbox", "kvm", "red hat"
    };
    List<string> list = GetModelsAndManufactures();
    foreach (string spisok in list)
    {
    return VirtualNames.Contains(spisok); // true
    }
    return false;
    }

    /// <summary>
    /// <b>Метод для получения информации о Производителе и Модели машины на системе пользователя.</b>
    /// </summary>
    /// <returns>Возвращает Модель и Производителя компьютера.</returns>
    private static List<string> GetModelsAndManufactures()
    {
    var ModMan = new List<string>();
    try
    {
    using var searcher = new ManagementObjectSearcher(@"root\CIMV2", "SELECT * FROM Win32_ComputerSystem");
    using var items = searcher.Get().OfType<ManagementObject>().Where(p => p != null).FirstOrDefault();
    ModMan.Add(items["Manufacturer"]?.ToString().ToLower());
    ModMan.Add(items["Model"]?.ToString().ToLower());
    }
    catch { }
    return ModMan;
    }

    /// <summary>
    /// <b>Инициализатор проверки всех методов на наличие запуска в среде VMware</b> (Virtual Machine)
    /// </summary>
    /// <returns></returns>
    public static bool Inizialize() => SandBoxies || IsRdpAvailable || CheckWMI();
    }
    }
    Реализация проверки
    Код
    namespace AntiVM
    {
    using System;

    internal static class Program
    {
    [STAThread]
    public static void Main()
    {
    Console.Title = "Anti Virtual Machine - (VM)";

    if (CheckVirtual.Inizialize())
    {
    Console.WriteLine("Обнаружена виртуальная машина");
    }
    else
    {
    Console.WriteLine("Вы работаете на рабочей машине.");
    }

    Console.Read();
    }
    }
    }
    Проверялось на нескольких виртуалках, всё отработало как надо, тестируйте.
    Проект лежит на Гите.
     
    26 июн 2020 Изменено
  2. sierra
    sierra 13 дек 2021 имаджинирую 215 23 фев 2020
    AnyRun определяет как "Рабочая машина" (не вм)
     
    1. r3xq1 Автор темы
      sierra, ага, ну по процессу можно чекнуть дополнительно. В коде нету.
    2. wDude
      r3xq1, ну и ладно, всего лишь дополнить проверку процессов, главное показать пример, как примерно определять VM (так сказать дать удочку, а не рыбу)
Загрузка...
Top