From: Karl M. <kme...@me...> - 2018-02-08 16:12:13
|
I was hoping to ask for some design help on VMWare. I am developing a new licensing feature for a desktop app. A typical solution to this problem is a stand-alone license server which just counts concurrent licensed instances on the LAN. Unfortunately, the customer has taken that offtheytable and require us to do software only, disconnected, per seat activation. I know their environment and their reasons are mission critical for them... So to implement the license policy requires us to uniquely identify each physical machine the app is installed with a UUID. For the case of Windows running hardware, we can make a hash value from the serial numbers in the bios through WMI and treat the hash value as a UUID. Although there is a risk a determined cheat could spoof their bios we decided that was an acceptable risk since bios spoofing is clumsy. Above a certain level of effort they could just edit our assembly and crack the security check anyway... The case of Windows in a guest OS on VMWare is harder to design something robust to very simple cheating. Just about everything in the guest OS is configurable and easily replicated with thevmxand checkpointing. So guest OS features like the bios or MAC addresses just seem too easy for a user to spoof by making many instances of particular (licensed) guest image. I am looking for something an application can query which identifies the underlying host in a robust way. One solution I been exploring is using theVMXhIO port to query the underlying host. Using the IO Port was very attractive since it seemed to require minimal dependencies, installation and configuring and was typically on by default According to https://sites.google.com/site/chitchatvmback/backdoor#cmd0fh command 13h will provide the bios UUID but then I realized that VMWare allows multiple instances of a particular guest image as long as they run on physically distinct hosts. It seems I really need to be asking for the/HOST's/UUID The PowerCLI does seem to provide that data with the Get-VMHost command https://www.vmware.com/support/developer/PowerCLI/PowerCLI41U1/html/Get-VMHost.html something like (Get-VMHost -Name MY_VCENTER_IP).ExtensionData.hardware.systeminfo.uuid Is therea IOPort way to get the same or equivalent value - the physical host UUID? I just need a stable and robust way to identify what (physical) machine the app is running on. Ideally, one which is simple to implement and does not have a lot of dependencies or configuration for the customer to deal with. thanks Karl Meissner |