I don't have any proper expertise in the matter (I'm sure RhinoBull is nodding his head vigorously as he reads this :-P) but I've had a play about with control systems in my programs, and the method I used was to have important strings in the data encrypted and for a key to be required to decrypt it...the key itself would be different for everyone as the program then scrambles the key you input based on a value taken from the computer (hard drive name, computer name, that sort of thing) and the unscrambled key would be used to decrypt those important strings.

As your program has to be online to be used though, perhaps a server/client auth system would be better, and the authentication data would be based on the above plus the current hour and date on the client's PC...the server then sends the right data for the client to use for that hour and an hour later it needs to reauth (or every minute, every day, it's entirely up to you :-))

I am considering writing a bit of code which would encrypt and hard-wire the encryption key into the program and then compile the project so that everyone who gets a copy has a slightly different version with different methods, so if it did get out then I'd know who it was...one day I will do it, probably...one day!