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.