Сейчас на форуме: asfa, Rio (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Как скрыть от программы запуск в среде VMware?
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 1.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 21 декабря 2012 23:39 · Поправил: stepsid
· Личное сообщение · #1

всех приветствую!

поискал решение на форуме, явного ответа не нашел.
Вопрос: как спрятать от программы то, что она запускается в виртуальной среде VMware.
Прошу Вас делиться положительным или отрицательным опытом.

Итак, что мною было сделано в процессе поиска решения.
1. Нашел два документа, объясняющих как обнаружить запуск программы под виртуальной машиной
а. Mechanisms to determine if software is running in a VMware virtual machine
б. VMDetection

2. Добавил параметры в конфигурационный файл .vmx
смотри ниже.

После перезагрузки VM, использовал утилиты
утилита 1, утилита 2 для обнаружения запуска в виртуальной среде. Обе утилиты показали отсутсвие виртуальной среды.
2. Модифицировал serial number vmware SMBIOS, убрав упоминание о Vmware (Vmware-, VMW)
3. Удалял VMTools.
4. Мониторил с помощью Procmon активность программы на предмет поиска строки vmware в запросах к файловой системе и реестру. Не нашел явных запросов.
5. Отключал у процессора поддержку виртуализации, что бы исключить проверку по CPUID hypervisor present bit

Следующий этап решения проблеммы - запуск программы в среде отладчика, поиск и блокировка проверяющего кода.
Судя по всему, задачка не совсем тривиальная. Разработчик программы снабдил свое творение не только защитой от запуска в виртуальной среде,
но и защитой от запуска в среде отладчика + частично зашифровал исполняемый код.
Честно говоря, последный раз отладчиком пользовался лет 18 назад.
Но сейчас посмотрю что и как, почитаю статьи на тему - думаю разберусь.
И если у кого-то есть опробированное решение разворачивания комплекса отладки дебагера+дизассемблера, работающего в стелс режиме, на виртуальное машине -
буду рад услышать совет. Желательно с сылками на установочные дистрибутивы и на "покурить мануалы"
Спасибо.

Да поможет нам 0xCD03h и 0x90h.

PS:
привожу список настроек vmware ws9, с которыми гостевая система проходит большинство проверок на наличие виртуальной среды.
Ссылка на неплохое описание параметров в .vmx файла
Code:
  1. #основные параметры
  2. monitor_control.virtual_rdtsc = "FALSE"  
  3. monitor_control.restrict_backdoor = "TRUE"
  4. isolation.tools.getPtrLocation.disable = "TRUE"
  5. isolation.tools.setPtrLocation.disable = "TRUE"
  6. isolation.tools.setVersion.disable = "TRUE"
  7. isolation.tools.getVersion.disable = "TRUE"
  8. monitor_control.disable_directexec = "TRUE" 
  9. monitor_control.disable_btinout = "TRUE"
  10. monitor_control.disable_btmemspace = "TRUE"
  11. monitor_control.disable_btpriv = "TRUE"
  12. monitor_control.disable_btseg = "TRUE"
  13. ## неактуальны для WS9, можно удалить
  14. #monitor_control.disable_chksimd = "TRUE"   
  15. #monitor_control.disable_ntreloc = "TRUE"   
  16. #monitor_control.disable_selfmod = "TRUE" 
  17. #monitor_control.disable_reloc = "TRUE"  
  18. #оборудование
  19. #CPU/маскирование CPUID
  20. featMask.vm.cpuid.family="val:15"
  21. featMask.vm.cpuid.model="val:3"
  22. featMask.vm.cpuid.stepping="val:4"
  23. #отключение Hypervisor_bit и настройка вложенной (nested) виртуализации для установки Hyper-V
  24. hypervisor.cpuid.v0 = "FALSE"
  25. hypervisor.cpuid.v1 = "FALSE"
  26. mce.enable = "TRUE"
  27. ##настройка nested виртуализации. можно отключить.
  28. vhv.enable = "TRUE"
  29. featMask.vm.hv.capable = "Min:1"
  30. vmGenCounter.enable = "FALSE"
  31. #сетевой адаптер
  32. ethernet0.addressType = "static"
  33. ##указать свой MAC
  34. ethernet0.Address = "ХХ:ХХ:ХХ:ХХ:ХХ:ХХ"   
  35. #отключение VMCI из списка оборудования гостевой системы.
  36. vmci.available = "FALSE"
  37. vmci0.present = "FALSE"
  38. #дополнительная изоляция гостевой системы
  39. guest.commands.enabled = "FALSE"
  40. RemoteDisplay.maxConnections = "1"
  41. tools.setInfo.sizeLimit = "1048576"
  42. isolation.device.connectable.disable = "TRUE"
  43. isolation.device.edit.disable = "TRUE"
  44. isolation.tools.copy.disable = "TRUE"
  45. isolation.tools.dnd.disable = "TRUE"
  46. isolation.tools.setGUIOptions.enable = "FALSE"
  47. isolation.tools.paste.disable = "TRUE"
  48. isolation.tools.hgfs.disable = "TRUE"
  49. isolation.tools.hgfsServerSet.disable = "TRUE"
  50. isolation.monitor.control.disable = "TRUE"
  51. isolation.tools.ghi.autologon.disable = "TRUE"
  52. isolation.bios.bbs.disable = "TRUE"
  53. isolation.tools.getCreds.disable = "TRUE"
  54. isolation.tools.ghi.launchmenu.change = "TRUE"
  55. isolation.tools.memSchedFakeSampleStats.disable       = "TRUE"
  56. isolation.tools.ghi.protocolhandler.info.disable = "TRUE"
  57. isolation.ghi.host.shellAction.disable = "TRUE"
  58. isolation.tools.dispTopoRequest.disable      = "TRUE"
  59. isolation.tools.trashFolderState.disable = "TRUE"
  60. isolation.tools.ghi.trayicon.disable = "TRUE"
  61. isolation.tools.unity.disable = "TRUE"
  62. isolation.tools.unityInterlockOperation.disable = "TRUE"
  63. isolation.tools.unity.taskbar.disable = "TRUE"
  64. isolation.tools.unityActive.disable = "TRUE"
  65. isolation.tools.unity.windowContents.disable = "TRUE"
  66. isolation.tools.unity.push.update.disable = "TRUE"
  67. isolation.tools.vmxDnDVersionGet.disable = "TRUE"
  68. isolation.tools.guestDnDVersionSet.disable = "TRUE"
  69. isolation.tools.diskShrink.disable = "TRUE"
  70. isolation.tools.diskWiper.disable = "TRUE"
  71. isolation.tools.autoInstall.disable = "TRUE"
  72. vmsafe.enable = "FALSE"
  73. isolation.tools.vixMessage.disable = "TRUE"
  74. tools.guestlib.enableHostInfo = "FALSE"
  75. sharedFolder0.present = "FALSE"
  76. sharedFolder1.present = "FALSE"
  77. #отключение неиспользуемого оборудования
  78. usb.generic.autoconnect = "FALSE"
  79. serial0.present = "FALSE"
  80. serialX.present = "FALSE"
  81. floppy0.present = "FALSE"
  82. floppyX.present = "FALSE"
  83. parallel0.present = "FALSE"
  84. parallelX.present = "FALSE"


Совет: Не должны быть установлено VMware Tools. Все неиспользуемое оборудование - отключайте.
Пример:
Code:
  1. pciBridge0.present = "TRUE"
  2. pciBridge4.present = "TRUE"
  3. pciBridge4.virtualDev = "pcieRootPort"
  4. pciBridge4.functions = "8"
  5. #pciBridge5.present = "TRUE"
  6. #pciBridge5.virtualDev = "pcieRootPort"
  7. #pciBridge5.functions = "8"
  8. #pciBridge6.present = "TRUE"
  9. #pciBridge6.virtualDev = "pcieRootPort"
  10. #pciBridge6.functions = "8"
  11. #pciBridge7.present = "TRUE"
  12. #pciBridge7.virtualDev = "pcieRootPort"
  13. #pciBridge7.functions = "8"
  14. pciBridge0.pciSlotNumber = "17"
  15. pciBridge4.pciSlotNumber = "21"
  16. #pciBridge5.pciSlotNumber = "22"
  17. #pciBridge6.pciSlotNumber = "23"
  18. #pciBridge7.pciSlotNumber = "24"




Ранг: 1.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 10 июля 2013 22:15 · Поправил: stepsid
· Личное сообщение · #2

ntldr пишет:
cpuid с eax = 1 и проверка 31 бита в ecx, оно?


вот что тут есть по этому поводу у микропрограмм.
однако, если не ошибаюсь, то vmware может маскировать
GPUID по EAX 0,1,5,80000000h,80000001h,80000008h,8000000Ah (блокировка svm/vmx)
по поводу GPUID eax=80000000Ah сюда
Code:
  1. cpuid.eax.0="----:----:----:----:----:----:----:----"
  2. skip
  3. cpuid.eax.8000000A="----:----:----:----:----:----:----:----"

есть особенности, связанные с уровнями и методами реализации виртуализации

Однако, при установленных параметрах:
Code:
  1. hypervisor.cpuid.v0="FALSE"
  2. hypervisor.cpuid.v1="FALSE"

AIDA64 и pcwizard2012 не видят "поднятый" бит Hypervisor в свойствах процессора.
есть другой метод тестирования установленного Hypervisor bit , кроме как самому написать?



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 14 июля 2013 07:28
· Личное сообщение · #3

Интересная темка. Твоя софтина детектит только варю или любую вм?



Ранг: 1.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 14 июля 2013 11:03
· Личное сообщение · #4

spinz
а вчитаться в тему?
я ставлю задачу скрыть присутствие виртуальной среды, а не обнаружить ее.
и я не пишу инструментарий, я пытаюсь настроить\модифицировать саму виртуальную машину конкретного разработчика.



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 14 июля 2013 11:26
· Личное сообщение · #5

весьма вчитался, не увидел. там только р3 или все же дрова?



Ранг: 1.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 14 июля 2013 13:30 · Поправил: stepsid
· Личное сообщение · #6

spinz
р3 это в каком смысле? если ring3, то все изменения требуется делать до загрузки гостевой системы.
я же написал все на предыдущей странице.
и bios-ы (системный, контроллеров), и "движок" виртуальной машины, и драйвера устройств.
везде убираются известные строки, меняется, по необходимости, VendorID.
подобное уже делалось, в том или ином виде, для прежних версий (ws 4, ws 6).



Ранг: 1.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 14 июля 2013 13:37
· Личное сообщение · #7

stepsid
опс. извини, я сам не понял о чем ты спрашивал.
ты говорил о той программе, которую я исследую, которая определяет наличие виртуальной среды - tnt d3 bot.
думаю, что она определяет любую виртуальную среду, так как при работе программа сообщает о наличии виртуальной машины вообще, без конкретики.
можешь попробовать сам. спроси в пм - брошу линк на архив.



Ранг: 3.0 (гость)
Активность: 0.01=0.01
Статус: Участник

Создано: 15 июля 2013 13:02
· Личное сообщение · #8

stepsid залей куда нить свой wmware-vmx.exe с которого убрал следы от вари и сылку на бота



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 15 июля 2013 15:12
· Личное сообщение · #9

stepsid пишет:
при работе программа сообщает о наличии виртуальной машины вообще

в этом и вопрос. ты тестил бота только под варей?другие виртуалки он детектит?



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 15 июля 2013 15:15
· Личное сообщение · #10

Если он детектит только варю, это одно. Если он умеет из р3 концептуально отличать натив и виртуалку - даже интересно



Ранг: 1.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 15 июля 2013 15:54
· Личное сообщение · #11

spinz
другие не пробовал, только варю.
spinz пишет:
Если он умеет из р3 концептуально отличать натив и виртуалку - даже интересно

в варе вполне может. в верхнем посте ссылка есть на тему.
"...
If you run your guest with binary translation, we can't intercept CPUID executed at CPL3, because that code runs in direct execution. Under binary translation, we can only intercept the CPL0 CPUID instructions that we translate. Under hardware-assisted virtualization, we intercept all CPUID instructions, regardless of privilege level. I assume you are issuing CPUID from user code at CPL3. You should be able to play with the preferred execution mode and see the effects of binary translation vs. VT-x.
Under binary translation, if you "disable acceleration," we can intercept all CPUID instructions, since then everything is translated..."

этот бот может иметь базу эталонных (реальных) ответов CPUID и сравнивать текущие ответы по CPUID с теми что должны быть.
пример: если посмотришь, по умолчанию, все биты о термодетекторах в виртуальной машине выставлены в 0.



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 15 июля 2013 16:36
· Личное сообщение · #12

детект по CPUID это фейк по сути, кривые руки девелоперов ВМ



Ранг: 1.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 15 июля 2013 17:14 · Поправил: stepsid
· Личное сообщение · #13

spinz пишет:
детект по CPUID это фейк по сути, кривые руки девелоперов ВМ

в смысле определения уровня виртуализации?
а тут либо скорость (трансляция бинарного кода), либо совместимость, по-моему.



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 15 июля 2013 17:30
· Личное сообщение · #14

Логично. Сваять быструю недектируемую ВМ нереально



Ранг: 1.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 15 июля 2013 17:52 · Поправил: stepsid
· Личное сообщение · #15

spinz пишет:
Логично. Сваять быструю недектируемую ВМ нереально

не детектируемую - это вполне реально, буде у разработчиков такая задача.
замечу, что всего-то и надо:
- предоставить пользователям самим выбирать VendorID оборудования (контроллеры, CPU итд);
- убрать определенные сигнатуры из биоса и драйверов;
А вот с временными задержками исполнения виртуальной машины - проверка по RDTSC - вот тут, согласен, сложнее. Определение виртуальной среды, как правило, происходит по четко выверенным временным отпечаткам - ибо все остальные рудименты можно убрать. Что, собственно, я и попытался сделать - убрал "рудименты" - но это не скрывает виртуальную среду.



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 15 июля 2013 18:21
· Личное сообщение · #16

Убирать ничего не надо, пусть вертится на реальном железе, с небольшими ограничениями. VT-d для этого и придумали. Параметры временнЫх задержек легко эмулятся. Пусть софт антидетекта будет уверен, что работает на одноядерном пне-1.8ГГц. Тогда все становится легко ))



Ранг: 1.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 15 июля 2013 18:39 · Поправил: stepsid
· Личное сообщение · #17

так с одноядерным пнем на варе не вопрос. маскИруешь CPUID по F:M:S - будет тебе все что захочешь.
работать на реальном железе не получится, так как pci pass-through совсем не однозначен (касается только контроллеров), кроме того, нет возможности использовать реальную мат.плату, со всеми вытекающими. так что, убирать "рудименты" - надо.



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 15 июля 2013 18:56
· Личное сообщение · #18

глянь в сторону мелкомягкого гипервизора, там гость работает на вполне реальном железе



Ранг: 0.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 августа 2013 10:52
· Личное сообщение · #19

А как вам удалось вырезать/изменить OEMStringArray из vmware-vmx.exe? Вот эти 2 строчки:
Code:
  1. [MS_VM_CERT/SHA1/27d66596a61c48dd3dc7216fd715126e33f59ae7]
  2. Welcome to the Virtual Machine

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



Ранг: 1.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 17 августа 2013 21:58
· Личное сообщение · #20

NRiche
подробнее опишу немного позже.
Вкратце: весь файл vmware-vmx.exe по сути архив из нескольких файлов.
Исполняемый модуль, несколько биосов для разных контроллеров, SMIBIOS и EFIBIOS. Загружать будем SMIBIOS.
Первым делом извлекаем ВСЕ необходимые файлы и указываем в конфигурации гостевой системы параметры загрузки интересующий нас биосов.
Затем производим изменения в бинарниках файлов биосов с изменением необходимых контрольных сумм.
Тоже с драйвером виртуального видеоадаптера. Основная задача - убрать известные нам сигратуры.
Важно! В самом vmware-vmx.exe меняем сигратуры только там, где это требуется. Это определяется по смещению, полученному опытным путем, причем это смещенеие не должно быть в пределах относительного файлового адресного пространства используемых нами биосов.
Тогда проблем с запуском не будет.



Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 сентября 2013 18:58
· Личное сообщение · #21

stepsidПривет, можешь контакт какойнить свой кинуть, тоже с такой проблемой столкнулся как ты, вообще не выходит vmx.exe отредактировать... может ты поможешь...


<< . 1 . 2 .
 eXeL@B —› Вопросы новичков —› Как скрыть от программы запуск в среде VMware?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати