Thanks. that is the only solution i got so far. But with this solution, I will have to deploy my app for each individual download copy, and each of them I will need to embed a unique serial number. this deployment process will be huge amount of work and it will take heaps of space out of my web space to store each download copy...
u know what i mean?
You are completely wrong.
You can create a formula or function that validates a serial. The flow will be something like this:
a) you give the user a serial number (on a piece of paper or the sleeve of the CD)
b) the user installs the software, and is asked for the serial
c) the software generates a 'random' number based on certain states of the hardware (date, time, hardware address, size of the registry)
d) the serial number and random number are sent to your web-service
e) your web-service delivers a third number, the validation key
f) the user's software take the serial number, random number, and validation key, and validates that the three work together
g) if not the user is prompted again
Example:
The Validate() function takes three integers, and checks that they add to 10.
The user gets a Serial Number of 1398.
When the software is installed, the random number -293484 is generated.
These two numbers are sent to the server.
The server (after collecting/verifying things like email address, phone number, and registered name) figures out that the response number should be 292096.
The Validate function takes the Serial (1398) the random number (-293484) and the validation response (292096) and adds them together to get 10. Knowing that 10 is the number it needs, it validates the user's software.
The strength of this system relies on the mathematical complexity of the authentication algorithm. If your validation is just "Add up to 10," you aren't going to have a good licensing scheme.