2

My situation is this: we have a product with a license that successfully deactivates if the licensing files are copied from one location to the next. This works across PCs perfectly as well. However, we just discovered a use case where this does not work as intended: if the software is licensed in a VM, and the VM is copied and loaded a second time, this works around the license copy protection as the software thinks it is still a part of the same system. What techniques are there that can be used to identify whether or not the software is installed in a virtual system, and if that VM has been copied in order to circumvent copy protection?

I understand that this is a fairly broad question, but I am not looking for the exact methodology as to how I should implement copy protection. I am looking for tried and true techniques for how to detect the presence of a virtual machine, and what things to check for in order to make sure that the VM itself has not been replicated.

If I have not asked this in the right place (does StackOverflow have a section for broad Q&A discussions instead of a point blank "ask question get answer" format?), please move this to the appropriate location.

codewario
  • 19,553
  • 20
  • 90
  • 159
  • You can't detect whether a VM image was copied _in order to ..._. That's intent, you'd need a mind reader. But even detecting that an image was copied is pretty much impossible. It's just bits. Is the bit sequence 10001 copied? If you can't tell from 5 bits, how many bits do you need? – MSalters Mar 12 '14 at 09:52

1 Answers1

1

There are VMware APIs which you can use to find the VMs running on the same ESXserver (hypervisor). I'm not sure if these work across esx servers, but it might be possible if they are connected on the same vCenter. Also, there are some methods for the service discovery on VMs, these needs support from the specific service as well (in your case, your software). I believe, hooks can be inserted from a guest VM when a service starts up and which can be invoked from other VMs.

in your case, lets say when your program comes up in one VM, you can insert the hook. And say, if the VM is replicated and later when your program comeup on the replicated VM, invoke the hook to see if the service is running on another VM (you can possibly share some keys with the hook so that new VM service get to know the other guy is running the same key)

We have done a similar thing long back while we were working on a vm based project. But i don't really remember the exact details now.

But I don't think there is a way to figure out if the VM is getting replicated or not.

joe
  • 1,136
  • 9
  • 17
  • I was hoping maybe I could get the actual path of the loaded virtual disks and maybe bind our license to that (if we're in a virtual environment) – codewario Oct 04 '13 at 13:18