My upcoming shareware application is almost ready. There is some more testing to be done in Windows 2000 and Windows XP. I am also going to try to run it in Ubuntu using Mono, but that will come after the initial release. I’m arguing with myself about whether I should implement the GUI in WPF in a future release or if I should stay with WinForms so that I can run with Mono.
Apart from testing I still have to implement some sort of licensing system. I would prefer having the keys generated by the PayPal manager I have in PHP so that the sales process can be fully automated. It will take some extra care since an issued key has to work in the future. I can’t upgrade that part of the code without invalidating all issued keys.
My first attempt created a key based on the customers email address. The big flaw with it was that it was only possible to do one check so if someone figured out the algorithm for creating the key I would have free keys online forever. I need to create a license key that I can do several different checks on in different versions of my program.
At the moment I’m thinking of using hashes of GUID’s. That way I can incorporate different GUID’s in different compiles of the program. It will also be possible to include lists of invalid GUID’s both in the application and as part of the automatic upgrade manifest.
The next problem will be to inline the validity checks in my c# code so that the potential cracker has more than one place to shortcut. I don’t believe it will be cracker proof. It just has to be hard enough to stand the first attempt at cracking it.
Hopefully I will make the release early September.