Обнаружение VMWare (анти) EXCEPTION_PRIV_INSTRUCTION?
Можно ли избежать обнаружения VMWare следующим методом?
Я обнаружил, что этот код используется очень часто:
push edx
push ecx
push ebx
mov eax, 'VMXh'
mov ebx, 0 // anything but 'VMXh'
mov ecx, 10 // get VMWare version
mov edx, 'VX' // port number
in eax, dx // read port
cmp ebx, 'VMXh' // is it a reply from VMWare?
je lblInVMWare
xor ecx, ecx // not in VMWare - clear return value
lblInVMWare:
mov [nVersion], ecx // vmware product type
pop ebx
pop ecx
pop edx
Есть описание как это работает:https://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual
Короче говоря, этот «волшебный»/специальный порт (in eax, dx // read port
) что-то дает и это невозможно запустить на реальном компьютере из-за исключения (привилегированная инструкция)
Согласно этой статье я попытался использовать несколько параметров в своем файле VMX:
monitor_control.disable_directexec = true"
monitor_control.disable_chksimd = "true"
monitor_control.disable_ntreloc = "true"
monitor_control.disable_selfmod = "true"
monitor_control.disable_reloc = "true"
monitor_control.disable_btinout = "true"
monitor_control.disable_brmemspace = "true"
monitor_control.disable_btpriv = "true"
monitor_control.disable_btseg = "true"
isolation.tools.getPtrLocation.disable = "true"
isolation.tools.setPtrLocation.disable = "true"
isolation.tools.setVersion.disable = "true"
isolation.tools.getVersion.disable = "true"
и удалил VMWare Tools, но не удалось
(Я использую x32dbg, чтобы посмотреть, что происходит - код успешно работает на виртуальной машине и не дает мне никаких исключений)