Phillip14
Contributor
Contributor

VMware ESXI Genshin Impact with Windows 10 OS (Hide virtualization from guest OS)

As the title says I'm trying to get Genshin Impact to run on a Windows 10 VM on VMware ESXI version 6.7. It's taken quite a long time but so far I've managed to set up a VM with a NVidia Geforce 2070 passed through to the vm. I added the line ```hypervisor.cpuid.v0 = "FALSE"``` to the vmx file and hooked up a dummy monitor to the GPU to allow Parsec to remotely connect to it. I've tested several games such as Minecraft Java Edition, Subnautica Below Zero(running on Steam), and Rocket League(running on the Epic Games Launcher) and they all work fine.

After looking for a while on line I've come up with several more lines to add to the vmx file that seem to fix a similar problem with a game called Sword of the New World. However, when I run Genshin Impact it still comes up with a gui saying "Sorry, this application cannot run under a Virtual Machine."

I have also found that if running the vm off of KVM with Linux(which I am not willing to do after spending three weeks teaching myself how to setup ESXI with a VM that can be remotely accessed with parsec) apparently upon adding

```

<cpu mode='host-passthrough' check='none'>

...

    <feature policy='disable' name='hypervisor'/>

</cpu>

```

to the xml file, Genshin Impact works just fine.

I feel that there must be an equivalent string I can add to the vmx file for VMware ESXI that would do the same thing but after quite a bit of research I haven't found anything that works. I did come across a lot of users and forums that explain that it will not work on Shadow or virtual box, but nothing about VMware. Does anybody know an equivalent command for ESXI?

.vmx file:

```

.encoding = "UTF-8"

config.version = "8"

virtualHW.version = "14"

vmci0.present = "TRUE"

floppy0.present = "FALSE"

numvcpus = "6"

memSize = "11264"

bios.bootRetry.delay = "10"

powerType.suspend = "soft"

tools.upgrade.policy = "manual"

sched.cpu.units = "mhz"

sched.cpu.affinity = "all"

vm.createDate = "1602110300706076"

scsi0.virtualDev = "lsisas1068"

scsi0.present = "TRUE"

sata0.present = "TRUE"

usb_xhci.present = "TRUE"

scsi0:0.deviceType = "scsi-hardDisk"

scsi0:0.fileName = "Nix_1.vmdk"

sched.scsi0:0.shares = "normal"

sched.scsi0:0.throughputCap = "off"

scsi0:0.present = "TRUE"

ethernet0.virtualDev = "e1000e"

ethernet0.networkName = "VM Network"

ethernet0.addressType = "generated"

ethernet0.wakeOnPcktRcv = "FALSE"

ethernet0.present = "TRUE"

sata0:0.deviceType = "cdrom-image"

sata0:0.fileName = "/vmfs/volumes/5f7df0e5-3420089e-16a9-002655daae9a/os_images/Windows.iso"

sata0:0.present = "TRUE"

displayName = "Nix"

guestOS = "windows9-64"

toolScripts.afterPowerOn = "TRUE"

toolScripts.afterResume = "TRUE"

toolScripts.beforeSuspend = "TRUE"

toolScripts.beforePowerOff = "TRUE"

tools.syncTime = "FALSE"

uuid.bios = "56 4d e9 ca 46 e7 34 5c-b4 66 e3 ce a8 07 1c ac"

uuid.location = "56 4d e9 ca 46 e7 34 5c-b4 66 e3 ce a8 07 1c ac"

vc.uuid = "52 9a c9 a3 02 99 09 28-07 36 8d 25 db 2c be cf"

sched.cpu.min = "0"

sched.cpu.shares = "normal"

sched.mem.min = "11264"

sched.mem.minSize = "11264"

sched.mem.shares = "normal"

ethernet0.generatedAddress = "00:0c:29:07:1c:ac"

vmci0.id = "-1475928916"

cleanShutdown = "FALSE"

sata0:0.startConnected = "TRUE"

nvme0.present = "TRUE"

config.readOnly = "FALSE"

extendedConfigFile = "Nix_1.vmxf"

sound.autoDetect = "TRUE"

sound.virtualDev = "hdaudio"

sound.present = "TRUE"

sound.allowGuestConnectionControl = "TRUE"

sound.fileName = "-1"

svga.vramSize = "268435456"

mks.enable3d = "TRUE"

pciPassthru0.present = "TRUE"

pciPassthru1.present = "TRUE"

pciPassthru0.id = "00000:010:00.0"

pciPassthru0.deviceId = "0x1e84"

pciPassthru0.vendorId = "0x10de"

pciPassthru0.systemId = "5f74b25d-327c-6a86-6713-002655daae9a"

pciPassthru1.id = "00000:010:00.1"

pciPassthru1.deviceId = "0x10f8"

pciPassthru1.vendorId = "0x10de"

pciPassthru1.systemId = "5f74b25d-327c-6a86-6713-002655daae9a"

cpuid.coresPerSocket = "6"

svga.numDisplays = "2"

svga.autodetect = "FALSE"

tools.guest.desktop.autolock = "FALSE"

nvram = "Nix_1.nvram"

pciBridge0.present = "TRUE"

svga.present = "TRUE"

pciBridge4.present = "TRUE"

pciBridge4.virtualDev = "pcieRootPort"

pciBridge4.functions = "8"

pciBridge5.present = "TRUE"

pciBridge5.virtualDev = "pcieRootPort"

pciBridge5.functions = "8"

pciBridge6.present = "TRUE"

pciBridge6.virtualDev = "pcieRootPort"

pciBridge6.functions = "8"

pciBridge7.present = "TRUE"

pciBridge7.virtualDev = "pcieRootPort"

pciBridge7.functions = "8"

hpet0.present = "TRUE"

RemoteDisplay.maxConnections = "1"

sched.cpu.latencySensitivity = "medium"

disk.EnableUUID = "TRUE"

numa.autosize.cookie = "60001"

numa.autosize.vcpu.maxPerVirtualNode = "6"

sched.swap.derivedName = "/vmfs/volumes/5f7df0e5-3420089e-16a9-002655daae9a/Nix_1/Nix_1-0b2ace3b.vswp"

pciBridge0.pciSlotNumber = "17"

pciBridge4.pciSlotNumber = "21"

pciBridge5.pciSlotNumber = "22"

pciBridge6.pciSlotNumber = "23"

pciBridge7.pciSlotNumber = "24"

scsi0.pciSlotNumber = "160"

ethernet0.pciSlotNumber = "192"

usb_xhci.pciSlotNumber = "224"

vmci0.pciSlotNumber = "32"

sata0.pciSlotNumber = "33"

scsi0.sasWWID = "50 05 05 6a 46 e7 34 50"

ethernet0.generatedAddressOffset = "0"

vm.genid = "-1816076186780706416"

vm.genidX = "-8688614713756288280"

monitor.phys_bits_used = "43"

vmotion.checkpointFBSize = "4194304"

vmotion.checkpointSVGAPrimarySize = "268435456"

softPowerOff = "FALSE"

tools.remindInstall = "FALSE"

toolsInstallManager.lastInstallError = "0"

nvme0.pciSlotNumber = "256"

toolsInstallManager.updateCounter = "3"

sched.mem.pin = "TRUE"

sound.pciSlotNumber = "34"

svga.guestBackedPrimaryAware = "TRUE"

hypervisor.cpuid.v0 = "FALSE"

pciPassthru0.pciSlotNumber = "1184"

pciPassthru1.pciSlotNumber = "1216"

migrate.hostLog = "./Nix_1-0b2ace3b.hlog"

scsi0:0.redo = ""

monitor_control.virtual_rdtsc = "false"

monitor_control.restrict_backdoor = "true"

isolation.tools.getPtrLocation.disable = "true"

isolation.tools.setPtrLocation.disable = "true"

isolation.tools.setVersion.disable = "true"

isolation.tools.getVersion.disable = "true"

monitor_control.disable_directexec = "true"

usb_xhci:4.present = "TRUE"

usb_xhci:4.deviceType = "hid"

usb_xhci:4.port = "4"

usb_xhci:4.parent = "-1"

```

This is what I got for ```systeminfo``` in the vm windows command line:

```

Hyper-V Requirements:      VM Monitor Mode Extensions: No

                           Virtualization Enabled In Firmware: Yes

                           Second Level Address Translation: No

                           Data Execution Prevention Available: Yes

```

And yes the virtual machine name is Latin for snow. I themed them.

Also let me know if you need any more info. I'd be happy to comply.

0 Kudos
1 Reply
continuum
Immortal
Immortal

Hi Phillip

some of the parameters to hide that you are using a VM seem to be copied from my vmx-parameter site:

http://sanbarrow.com/vmx/vmx-advanced.html#isolationtools

I compiled that list about 10 years ago. Every gamedeveloper that wants to prevent you from using his game inside a VM will be aware of those parameters.

Have you tried this ones as well ?

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_btmemspace = "true"

monitor_control.disable_btpriv = "true"

monitor_control.disable_btseg = "true"

By the way - after watching this arms race between the gamer-scene and the game-developrs since 2004 I am really surprised that the race still seems to be going on  these days.

As far as I know I would assume that any developer  who really wants to protect his game can use one of the afaik at least 2 or 3 well known procedures to detect a VM.

Often just looking at the computer hardware info will give it away that a VM is used.

Look at your "PC" that pretends to be a real PC ...

You use 2 video-cards: one expensive Hi-END card and a second one which identifies as VMware SVGA.2.

Your PC has an LSI-SAS Scsi-controller and an NVME-port. At the same time you used a CD-drive which introduces itself as "NECVMWARE ..."

Then you installed RAM-dims with a total of 11 GB - maybe one 8gb dim plus 3 pieces of  1gb dims ???

You installed a PCI-express network-card and allowed it to use a MAC-address from the well known VMware-range.

Then finally you ordered your "pretend to be a just another normal Gaming PC" with a mainboard that was build in the last century and somehow managed to get one with 6 CPU-sockets.

And while you spend some money for the NVIDIA you used a cheap audio-card and a completely fake looking mainboard.

So assume you are a game deveoper for a minute - would you believe that this Windows 10 "gaming PC" was built with real hardware ???

Your example vmx-file creates a PC that can be conclusively identified as a VMware VM with just a quick look into the Windows devicemanager.

The game developer does not even need to use more advanced detection procedures ...

Just checking plausibilty of the hardware combination will be enough with a vmx-file like this.

Your VM pretends to be an impossible combination of hardware ingredients - with some big red flags: mac-address in the vmware-range, existance of a vmci-device, ancient mainboard using 6 sockets instead of for example one socket with 4 cores ....

Honestly I assume that nowadays users do not have a real chance to hide that they use a VM.

Dont know if you noticed that back in the win7 times there existed a well known patch that reconfigured a Windows 7 VM to cheat the Windows 7 piracy detection.

With that patch a VM appeared to be a genuine OEM build from the same vendor   as the host computer.

I dont think that antipiracy protection developers have not learned their lessons since then ....

I assume that game developers allow a bit of cheating as the discussion in the forums on these topics may have a community-building effect 🙂

After half an hour with google I think that at the moment using latest WS 16 on a Windows host may work for a while ...

Anyway - just posting a question like this one in the VMware forum is actually contra-productive.

Keeping uptodate with latest gossip from the scene sure is part of the job of a Genshin Impact developer ...

Anyway - good luck ... if you actually find a working combination of vmx-parameters - dont talk about it in public - the Game developers are listening too.

Ulli

Do you need support with a recovery problem ? - send a message via skype "sanbarrow"
0 Kudos