Sorry Talon, I didn't see your reply - I'd been off for a week around then
and I expect most things got set to 'read' without being read.
What I have done in the past for commercially sensitive software distributed
only around our own offices (we have 160 in 80 countries) might be a tad
over the top for your stuff, but you can water it down...
I concatenate our product code, their hard disk serial number and create a
checksum (say 1*1st digit + 2*2nd digit etc) and take the last 4 characters
in hex e.g.
A621-1A23-7904-1234
I then xor them with another 4-digit hex number, then jumble the characters
and get them to send me that string.
When I get it, I simply reverse the sequence and check the checksum
I now know the product code and their hard disk serial number
I then send them (similarly scrambled) the hard disk serial number, a start
date, an end date, and a checksum. They enter it, the program saves it to
the registry. Every time the program runs, it unscrambles it, checks the
checksum, checks the hard disk serial, and checks the dates.
If the dates are invalid, I write to an obscure registry location and check
for this every time.
Also, if you want to secure your program against hackers, you will need to
check in various places, not just one. Also, for some checks, add a
randomise function so it only checks once in a hundred tries (so stepping
through the code to find the check is difficult), add checks such as
x=now
for y=1 to 20:y=y:next
if datediff("s",x,now)=0 then do_check
so if someone is stepping through the code, the check won't happen
also add checks to check the checks (!) i.e. call the check subroutines with
known-invalid codes to se if they come back validated as okay - if they do,
someone's modified the code.
It all depends how secure you want to be, how paranoid you are, how much
time and money you are prepared to spend on it, and how much you think your
product is worth.
HTH,
Ian