Как скрыть виртуальную машину от приложения
Не каждому хочется, чтобы его, кхм, новый текстовый редактор какие-нибудь неприятные дядьки исследовали под виртуальной машиной. Детект виртуалок — обязательный функционал определенного рода софта, и поэтому наша рубрика ну совершенно никак не может обойтись без обзора соответствующих способов!
Во-первых, любая виртуальная машина несет на своем борту какое-нибудь специфическое оборудование. Это касается видеоадаптера, жесткого диска, идентификатора процессора, версии BIOS, MAC-адреса сетевой карты.
Во-вторых, виртуальные машины оставляют следы в системе в виде запущенных вспомогательных процессов, драйверов и других специфических объектов.
В-третьих, если как следует покопаться в реестре виртуальной машины, там можно найти много всяких интересных ключей, характерных только для виртуальных машин.
Ну и в-четвертых, некоторые производители специально оставляют возможности, позволяющие обнаружить их продукты.
Что же касается общих признаков наличия виртуальной машины, предложенных в свое время госпожой Рутковской (характерное расположение таблиц IDT, GDT и LDT, а также время выполнения операций процессором), то в настоящий момент все эти признаки трудно поддаются анализу и приведению к какому-нибудь общему знаменателю, главным образом из-за многоядерности и многоликости современных процессоров.
Начнем, пожалуй, с жесткого диска. Если посмотреть идентификатор жесткого диска в диспетчере устройств на виртуальной машине, то в его составе можно увидеть интересные строчки:
Самый простой способ узнать наименование жесткого диска — прочитать значение ключа с именем «0» в ветке реестра HKLMHARDWARESYSTEMCurrentControlSetServicesDiskEnum.
В этом месте перечисляются все дисковые накопители в системе, и первым, как раз в ключе с именем «0», будет тот диск, с которого произошла загрузка системы.
Идентификатор жесткого диска VirtualBox в реестре
Как читать реестр, я думаю, ты знаешь. Используем сначала API RegOpenKeyEx для открытия нужного ключа, далее с помощью RegQueryValueEx читаем значение. Выглядеть это должно примерно вот так:
Далее все просто — используем strstr для поиска нужных нам строк в считанном значении и, в зависимости от результата сравнения, делаем вывод. Версия BIOS содержится в ключе «SystemProductName» в ветке HKLMHARDWAREDESCRIPTIONSystemBIOS. К примеру, для VMware там будет лежать строка «VMware Virtual Platform», а для VirtualBox — «VBOX –1».
Прочитать это все можно с помощью все тех же API — RegOpenKeyEx и RegQueryValueEx.
Версия BIOS Parallels Workstation в реестре
Данные о видеоадаптере можно подглядеть в HKLMSystemCarrentControlSetEnumPCI. В этой ветке перечислено все, что подключено к шине PCI, в том числе и видеокарта. Для VirtualPC это строчка вида VEN_5333&DEV_8811&SUBSYS_00000000&REV_00, которая определяет видеоадаптер S3 Trio 32/64, эмулируемый виртуалкой от Microsoft — на реальном железе такое оборудование нынче днем с огнем не сыскать (а у меня такая была в конце прошлого века. — Прим. ред.). Для VirtualBox видеокарта описана последовательностью VEN_80EE&DEV_BEEF&SUBSYS_00000000&REV_00, что расшифровывается как «VirtualBox Display», а у Parallels Workstation — строка VEN_1AB8&DEV_4005&SUBSYS_04001AB8&REV_00 определяет видеоадаптер «Parallels Display».
Помимо этого, в VirtualBox можно найти строку VEN_80EE&DEV_CAFE&SUBSYS_00000000&REV_00, определяющую некий «VirtualBox Device», а у Parallels Workstation строки VEN_1AB8&DEV_4000&SUBSYS_04001AB8&REV_00 и VEN_1AB8&DEV_4006&SUBSYS_04061AB8&REV_00, определяющие «Parallels Tools Device» и «Parallels Memory Controller» соответственно.
Алгоритм действий следующий: пытаемся открыть нужный нам ключ, и если он открывается успешно, то оборудование, описанное этим ключом, в наличии и можно делать вывод о присутствии какой-либо виртуальной машины:
Идентификатор процессора определяется с помощью команды cpuid. Благодаря ей можно получить много всякой полезной информации об установленном процессоре. Вид выдаваемой этой командой информации зависит от содержимого регистра EAX. Результат работы команды записывается в регистры EBX, ECX и EDX. Подробно про эту команду можно почитать в любой книге по программированию на ассемблере. Для наших целей мы будем использовать эту инструкцию, предварительно положив в регистр EAX значение 0x40000000:
После выполнения этого кода на VMware Workstation в переменных ID_1, ID_2 и ID_3 будут записаны значения 0x61774d56, 0x4d566572 и 0x65726177 соответственно (в символьном представлении это не что иное, как «VMwareVMware»), на VirtualBox в ID_1 и в ID_2 будет лежать значение 0x00000340, а на Parallels Workstation в ID_1 0x70726c20, в ID_2 — 0x68797065 и в ID_3 — 0x72762020 (что соответствует строке «prl hyperv»).
Использование MAC-адреса для идентификации производителя сетевой карты, конечно, не самый надежный способ (ибо MAC-адрес довольно-таки просто поменять), но тем не менее его вполне можно применить для детекта виртуальных машин в качестве дополнительной проверки.
Ты наверняка знаешь, что первые три байта MAC-адреса сетевой карты определяют ее производителя. Производители виртуальных машин в этом плане не исключение:
Вытащить эти первые три байта из MAC-адреса нам поможет API-функция GetAdaptersInfo:
Для нормальной работы практически все виртуальные машины требуют установки дополнений к гостевой операционной системе, например VBoxGuestAddition для VirtualBox или Parallels Tools для Parallels Workstation. Без этих дополнений работа с виртуальной машиной несколько затруднительна (ни тебе нормального разрешения экрана и полноэкранного режима, ни взаимодействия с USB-девайсами, ни нормальной настройки сетевых подключений). В общем, все производители виртуалок не рекомендуют использовать их без этих дополнений. А эти самые дополнения оставляют очень заметный след в виде запущенных процессов:
Для поиска процесса по имени мы воспользуемся функциями CreateToolhelp32Snapshot, Process32First и Process32Next:
Помимо непосредственно самих процессов, демаскирующим признаком могут стать окна, открытые этими процессами. Окон в каждой из рассматриваемых виртуальных машин может быть довольно много, и все их мы перечислять не будем, а ограничимся одним или двумя. Итак:
Открытые окна для VMware (красным выделено окно класса VMSwitchUserControlClass)
Найти окно по имени класса очень просто — для этого есть функция FindWindow:
Помимо процессов и окон, указывающих на наличие ВМ, можно найти и другие «подозрительные» объекты — например, если покопаться в гостевой ОС виртуальной машины утилитой WinObj или какой-нибудь аналогичной, то можно найти вот такие объекты:
«Подозрительные» объекты в VirtualBox
Проверить наличие «подозрительного» объекта очень просто, достаточно попытаться открыть его с помощью CreateFile:
Помимо признаков наличия специфического оборудования, в реестре можно увидеть и другие следы, оставляемые виртуальными машинами. Некоторые из них базируются в ветке HKLMHARDWAREACPIDSDT. Достаточно в этом месте проверить наличие таких вот ключей:
Проверку реализуем так же, как мы проверяли наличие определенного оборудования. Просто делаем попытку открыть нужный нам ключ и, в случае успеха, делаем вывод о наличии ВМ.
Ключ PRLS__ в реестре Parallels Workstation
Некоторые производители (в частности, VMware и Microsoft) специально реализуют возможности управления своими продуктами, которые можно использовать для наших целей.
В Virtual PC используются инвалидные (не «инвалидные», а «альтернативно одаренные». И вообще-то они «недействительные». — Прим. ред.) команды процессора с опкодами 0x0F, 0x3F, 0x07 и 0x0B, попытка выполнения которых на реальном процессоре вызовет исключение, в то время как на Virtual PC все пройдет нормально. С помощью этих команд можно достаточно просто задетектить виртуалку от Microsoft:
В VMware Workstation для взаимодействия гостевой и основной ОС реализован небольшой бэкдор в виде порта с номером 0x5658. Для его использования необходимо в EAX положить «магическое» число 0x564d5868 (в символьном представлении — «VMXh»), а в ECX записать одну из команд взаимодействия гостевой и основной ОС (например, команда 0x0A возвращает версию установленной VMware Workstation). Короче, выглядит все это приблизительно так:
Как видишь, признаков, характерных для виртуальных машин, предостаточно, и для того, чтобы их увидеть, сильно глубоко копать совсем не нужно.
Вывести полное имя программы, под которым она была запущена.
Здравствуйте! Пожалуйста, помогите с написанием вот такой программы: Вывести полное имя.
Вывести полное имя программы, под которым она была запущена/
Здравствуйте! Пожалуйста, помогите с написанием вот такой программы: Вывести полное имя.
Как запустить форму если она ещё не запущена?
нужно запустить форму если она ещё не запущена
Как узнать программе, запущена ли она из авторана или нет?
Есть вариант как-то узнать является ли родительским процессом explorer.exe и ещё вариант как-то.
Пробовал iCore_Virtual_Accounts_2.5.1.257, но она ставится только на windows xp а у меня win7. Сурово.
Тут недавно всплывала похожая тема, но с другого конца - Определить запущено ли приложение из под виртуальной машины
Учитывая, что общего способа определить виртуалку, похоже, нет, можно дальше экспериментировать. ИМХО в настройках виртуалки "Свойства системы" увидеть бы + сеть на вирте отключите Сеть отключить нельзя, так как для работы проги нужен интернет. В Свойствах системы что конкретно нужно? Галки где-нибудь стоят ими нет, имхо скрин лучше будет На вирт поставил русскую win 7. Выдает туже ошибку. Может дело в железе которое видит программа?
Диспетчер устройств: В свойствах всё норм
Пошерстил инет и возник вопрос, а, что за прога, которую Вы пытаетесь запустить?
Возможно у данной проги стоит защита против эмуляторов? Возможно у данной проги стоит защита против эмуляторов? Пытаюсь запустить игрушку warface. У нее есть функция предварительного анализа "железа" на котором она запускается, думаю здесь виртуалка и палится. По поводу защиты есть такая тема Определить запущено ли приложение из под виртуальной машины, но я в кодинге не силен, по этому толком разобраться не смог. Вот скрин диспетчера устройств виртуальной ос. Может попробовать изменить наименования некоторых комплектующих? только как это сделать? пробовал способ изменения в реестре, но никак не могу получить право, windows 7 домашняя расширенная. Но и такой способ предусматривает изменение наименования комплектующих в диспетчере устройств, думаю программу которая делает самостоятельный анализ системы этим не ввести в заблуждение. Подскажите как можно изменить названия комплектующих, особенно видеокарты? Есть вариант искажения данных в драйверах перед установкой, но как это сделать не могу понять. Если кто подскажет буду премного благодарен. А зачем вы запускаете игрушку в виртуалке?
Там же графика будет существенно медленнее. А зачем вы запускаете игрушку в виртуалке?
Там же графика будет существенно медленнее.
Это не важно нужен сам факт online.
Добавлено через 20 часов 55 минут
Существуют ли программы которые создают виртуальные мониторы, как "виртуальные системные блоки" типа Virtualbox? т.е. чтобы можно было их переключать, но они должны быть как отдельный монитор со всеми вытекающими.
Мне нужно чтобы на одном дисплее было 2-4 полноценных экрана, как будь то это два монитора сдвинутые рядом. Чтобы каждый распознавался как отдельный монитор. как я понял предложенная утилита таких возможностей не дает, поправьте если ошибаюсь.
Добавлено через 2 минуты
При запуске системы на одном мониторе должен быть запуск интерфейса, а на второй просто расширятся.
Как подключить форму, что б при запуске программы она запускалась первой ?
У меня имеется программа,и имеется интерфейс для ее "запуска" , мне необходимо подключить эту.
Как в проекте указать адрес для другой программы, что бы она запускалась на всех компах (ЛИНУКС)
Написал две прожки на кют. Прога№1 запускает прожку №2. Но вот в чем проблема, я не знаю как лутчше.
Проверить в процедуре запущена ли она из другой сессии
Есть одна процедура, которая должна выполняться в одно время только от одной сессии, все остальные.
Можно ли скрыть форму, но при этом что бы она "работала"?
Здравствуйте! Программа многооконная. Требуется по очереди открывать по несколько окон. Но при.
Я уже изрядно над ним поиздевался, не пинайте сильно, но все равно не смог добиться нужного результата.
К слову, в комплекте к данному софту есть таблэтка, которая позволяет его запустить в виртуалбоксе. Выглядит примерно вот так:
Таблэтка рабочая, действительно в виртуалбоксе работает (сам виртуалбокс не хочу использовать потому что нужно пробросить видеокарту в виртуалку)
Подскажите, что я делаю не так (либо чего я еще не сделал)?
Прошу особо обратить внимание вот на этот кусок XML'ки:
ибо тут я сосредоточил особое количество костылей, которые, по заявлению интернетов, должны работать, но не работаютНе знаю, как с CAD-овской штуковиной, но в случае с драйвером NVidia это решалось вот так:
а что именно не работает, софт не запускается? Или виртуалка не стартует с этими костылями.
Мне кажется примерно это же я передаю через параметры напрямую в qemu в этом куске:
С Nvidia драйвером я решил вопрос очень просто: установил драйвер 335 (начиная с 338 они блочат виртуалку)
disee ★★★ ( 04.12.17 09:07:45 )Последнее исправление: disee 04.12.17 09:08:59 (всего исправлений: 1)
Виртуалка стартует и работает отлично. А вот софт стартовать не хочет.
Есть у меня нешуточное подозрение, что они детектят по жестким дискам.
В офтопике диски определяются как
А в таблэтке для virtualbox есть как раз лечение для этого:
А вот как что-то подобное для kvm сделать - не знаю.
Если есть мысли - накидывайте, буду признателен
Призываю в тред господ, положительно замеченных в тредах про kvm/qemu: Lavos , Novell-ch , dyasny , Harliff , targitaj .
Спасите, помогите, не дают работать (пожалуйста)
сам виртуалбокс не хочу использовать потому что нужно пробросить видеокарту в виртуалку
Дык с линуксового хоста вроде ж можно пробрасывать виртуящиком видюху в гостя, не?
Тоже пробовал. Беда, что все эти 6 решений не работают под x64. А мне очень бы хотелось иметь более 4гб оперативы на процесс
Для начала конечно стоит погуглить по softwarename, чтобы узнать что оно проверяет. В крайнем случае ты можешь всегда взять отладчик и узнать сам. Или просто спросить у разработчиков объяснив ситуацию, если у тебя конечно это все легально.
anonymous_sama ★★★★★ ( 04.12.17 10:30:47 )Последнее исправление: anonymous_sama 04.12.17 10:32:41 (всего исправлений: 1)
Тоже об этом подумал. про мою ситуацию с %softwarename% есть буквально одна страничка в этих интернетах, на которой говорится, что софт смотрит на:
- MAC адрес (fixed)
- бит гипервизора в CPUID (fixed)
- всякую инфу про материнскую плату (fixed)
Тоже подумал в сторону дебагера. Даже установил windbg, но столкнулся с двумя следующими проблемами:
disee ★★★ ( 04.12.17 10:38:32 )Последнее исправление: disee 04.12.17 10:40:12 (всего исправлений: 1)
Ты всегда можешь поставить VirtualBox в qemu/kvm, или просто все-таки использовать VirtualBox если с ним работает, похоже оно не стоит того времени.
Сейчас мне кажется, что у меня осталась последняя неопробованная опция: где-нибудь взять PCI-e контроллер для SATA и пробросить его в виртуалку, дабы иметь не виртуализованный диск. Возможно это поможет.
Если же нет, увы, действительно остается только:
- жрать что дают и сидеть в VB (очень не хочу)
- дуалбут (еще больше не хочу)
А вот как что-то подобное для kvm сделать - не знаю.
Если есть мысли - накидывайте, буду признателен
Это упущение. Напиши об этом разработчикам на форум и в багтрекер.
в исходниках qemu
ving2 ★ ( 04.12.17 13:10:47 )Последнее исправление: ving2 04.12.17 13:10:58 (всего исправлений: 1)
<бред>Может он по модели процессора проверяет и если видит что-то отличное от Intel/AMD - орёт что виртуализация и болт?</бред>
если собрать конкретный список того что именно sw проверяет и как оно выглядит в госте, то можно запостить все это в qemu-devel или в багзиллу
а еще, серьезные платящие клиенты могут жаловаться в sw напрямую, и требовать изменить политику
dyasny ★★★★★ ( 04.12.17 23:13:01 )Последнее исправление: dyasny 04.12.17 23:13:40 (всего исправлений: 1)
так у него в конфиге, гипервизор hv_vendor_id=null т.е. наличия гипервизора он определить не должен. А процессор он хостовой указал. Конечно долго можно гадать нужно просто проверить. Судя по таблетке vbox, у него в дисках затык.
ving2 ★ ( 05.12.17 03:04:34 )Последнее исправление: ving2 05.12.17 03:07:36 (всего исправлений: 1)
Проблема решилась использованием PCI-E SATA контроллера и пробросом его в виртуалку. Удивило, что для sata контроллера не нужны всякие vfio или pci-stub
ТС, я автор этого батника для SolidWorks :) Ты бы на рутрекере в ЛС меня спросил, что оно палит и как - я бы ответил :)
Тут должно быть что-то вроде этого:
Все, что касается SMBIOS/DMI, можно было упихать в секцию smbios
Поменяй если хочется и пересобери
пардон, мб я чего не понял. но зачем лезть в исходники qemu, если он замечательно и так работает с raw-дисками, не виртуализируя их?
у меня в компе 1 винт. на нем стоит венда7 и убунта. раз-два в год мне требуется эта венда, и я гружу её в kvm с этого же диска (главное не просохатить таймаут в grub, иначе повторно начнет грузится уже запущенная убунта и будет плохо)
Только что всё сделал проще в своей Windows 10 под Qemu+KVM+VirtIO. Для всех жестких дисков поставил Disk Bus = VirtIO.
Удалил в виртуальной машине CD-ROM. Скопировал ISO на жесткий диск виртуальной машины. Открыл ISO (Win 10 позволяет монтировать iso файлы без проблем). И с него установил SolidWorks.
SolidWorks 2018 устанавливается отлично и больше не ругается на виртуальную машину.
В XML конфиг машины вписал только скрывание гипервизора, подмену вендора для драйверов NVidia, проброс реального процессора с хоста и проброс smbios с хоста. Доп параметры командной строки не прописывал.
Как и обещал, публикую материал о настройке безопасной и анонимной виртуальной машины на базе операционной системы Windows XP. Материал окажется полезным для всех тех, кто занимается сомнительными видами деятельности, например, фродом в партнерских программах или банальным мошенничеством. Это действительно полезный материал, который заслуживает вашего внимания. Весь софт, представленный в этом посте, даёт возможность менять те или иные данные вашей виртуальной машины практически на лету, что очень удобно и даёт возможность не палить данные своего настоящего железа. Итак, приступим.
Для начала скачиваем и устанавливаем саму виртуальную машину. Я рекомендую VMware Workstation. Программа платная, если не изменяет память, но, наверное, есть какие-то альтернативные пути её получения. Главное, не нарушайте законодательство страны, в которой живете. Всё же я рекомендую приобрести эту программу у разработчика, но также вы можете просто скачать её с какого-нибудь торрент-трэкера, установить в зашифрованном файловом контейнере и особо не запариваться из-за каких-то там авторских прав.
Устанавливаем CCleaner + утилиту CCEnhancer. Эта утилита в значительной степени увеличивает возможности программы, тем самым давая вам возможность вычищать намного больше различного мусора. В настройках советую выставить режим очистки хотя бы с 3 проходами. Время очистки немного увеличится, но так будет гораздо надёжнее.
Скачиваем HardDiskSerialNumberChanger. Как понятно из названия, эта простенькая программа меняет серийный номер жесткого диска, что очень даже в тему, когда вам надо менять данные о своей системе при работе в той или иной не совсем чистой сфере деятельности.
Качаем парочку портативных браузеров на выбор. Рекомендую классическую сборку Firefox и Iron Portable (браузер на базе Chrome, но более заточенный на анонимность). Вообще, чем больше разных браузеров для работы, тем лучше, так как вы можете под отдельную тему использовать свой браузер и тем самым будет меньше шансов запутаться и натворить косяков. Ну, это моё мнение.
По хорошему бы установить на нашу виртуальную систему VeraCrypt и KeePass. О пользе этих программ я подробно рассказал в предыдущем посте о настройке безопасной рабочей системы за 60 минут. Обязательно к прочтению!
Open VPN protector автоматически обрубает соединение с интернетом, если ваш VPN падает. Отличная вещь, которая не даёт засветить ваш реальный IP. Лучше установить, иначе может возникнуть достаточно неприятная ситуация.
Соответственно, в этом случае вам нужен VPN. Я рекомендую TorGuard, так как он не дорогой и надёжный. На ваш выбор бесчисленное множество серверов в различных странах. Плати и пользуйся. К слову, оплатить можно в биткоинах, что тоже радует мамкиных манимейкеров. Зарегистрировался по реферальной ссылке? Молодец, спасибо, +100 к фарту тебе, дружище. Кстати, в этом случае у вас фактически будет двойной VPN, если вы запустите его на основной машине, а затем подрубите на виртуальной.
Для постоянной смены IP адреса рекомендую использовать SSH туннели. Для работы с туннелями качаем программу Plinker. Ссылки нет, но вы держитесь!
Боевая машина готова к бою!
Комментарии (3):
лол ты думаешь что 4г модем тебя спасет? даже трингуляции и ты как на лодоне, молчу о других возможностях.
Читайте также: