>If your app is high-value you should consider that any hardware based protection you try to use is already defeated by the use of a VM, and use something else.
Also, all hardware-related protection schemes (unfortunate phrase, sounds like protection racket) generally deurinate some of the end users. Some likely scenarios (some of which I've seen happen):
- when based on computer ID of any kind, be it processor, BIOS, MAC or whatever - software lasts longer than hardware. I've replaced the motherboard without reinstalling anything several times. Everything kept working. The app which would complain wouldn't be my favorite for long.
- based on some disk ID - some of these IDs change on reformat, and I've seen these fail when someone's idea of defragmentation was to copy everthing out, reformat, copy back. Some factory, hardware ID is even more likely to change within the app's lifetime, simply because the disks are cheap nowadays, so the user may just buy a new one and copy everything (or use some disk image tool) to the new one. Can be expected to happen frequently nowadays as more and more stuff is moved to SSD.
The thing which works is online registration, even by email. And you get to keep track of your users. The ugly thing that many do nowadays is to have the app call home on startup and refuse to work if no network. Which is perhaps OK for freebie versions - the maker gets feedback on how often is the freebie used - but for paid versions it gets really ugly. How many times do you have to show your ticket when going to a movie? Once per scene?