Hi,

i also have had a lot of trouble with "hackers" who spread my software. Similar like Erik i tried to make the application secure. In my opinion i think the easier a protection works, the better it is. Just put pieces of the key checks all around the application, add some parts in your sprite class for example and never ever combine the "enter key" with a "check key" routine. Just close the app and restart it again. This way it is harder to find the logic
UPX is also fine and if you edit the header you can not decompile it via upx -d filename.exe.
Finally, i know this link is not very serious but the author has had damn cool ideas: http://www.iamaphex.cjb.net/
Especially the "load an encrypted dll out of a ressource" sample.

Christian