After reading numerous threads on Stack Overflow about how to protect software, I realized you can't. Thankfully my software is targetted at hosting businesses (not a lot of them at that) and a handful of consumers. I don't think the software will be popular enough that anyone is going to crack it, but I would like to protect it.
In one of the threads I found, it had a list of half decent options. I have decided I would like to go with "Simple registration with revokable keys, verified online frequently."
I figured since my application is a C# NET Console Application that will be ran through a management container, I can just issue keys for it. Perhaps do a MySQL Database and keep a list of keys that can only be used on one install, and another list of keys that can be used on X installs. My application will be ran with command line parameters at startup anyways, so adding one like "-key 29839X900AQ" or something will alleviate the need for them to have to really worry about it too much.
Does anyone know of any information/sites that offer help on setting something like this up?
One way to do this is to use a web service where you keep a list of all revoked/disabled licenses (maybe in a database). From your app, you will ping the service from time to time to see if the currently used license has been revoked. If so, the license validation fails.
If you can use a third party system, take a look at CryptoLicensing which supports this exact scenario via its "Notify License Service On Validation" license setting.
Disclaimer: I work at LogicNP Software, the developers of CryptoLicensing.