views:

89

answers:

6

Hi. There is a Windows program which is downloaded after entering a valid serial in a web page. Now, I want to limit the user to install the program only on one single PC, the one he or she installed for the first time.

I need some advice on creating a such system. Thank you.

P.S. Serial key must be entered on the web page instead of the installer.

A: 

Base the serial number on some hardware configuration. If the hardware changes, then invalidate the serial number. Microsoft windows uses this type of approach during the activation of the product.

Hope this helps some.

Chris
The problem is if he wants to limit downloads in the first place by using a key, then he needs to generate 2 keys which isn't a nice user experience.
Ian
A: 

If you write a custom installer then you could send an acknowledgement to your web server upon successful install that sends a serial # generated from the hardware, and the serial # they used to download the file.

Then if you find the same serial # but a different hardware serial, you can send a response back saying that you could not activate the software...

EDIT

Here is some info on getting hardware info (assuming a .NET environment, but you can find similar for the environment you are using).

Ian
+1  A: 

The usual solution is:
Create a hash describing the system (don't know the exact way to get it though, GIYF) & combine it with the serial, so when the user installs the program he has to enter the serial, then gets a key he has to enter on the website which splits the entered key into the serial and the system hash and checks if the system hash and serial match the stored ones and then returns another key (or an error if the serial was already used) he has to enter into the program.

Using the Mac Adress as a system key is not a good solution as it can easily be faked.

dbemerlin
A: 

set up a web service and database ... they have to validate to be able to install. the problem with your model at the moment is that you are protecting or hiding your software behind the server. You want peopel to have the software even if they cant use it (usually). the serial key stage should be there to unlock the software at runtime.

Its the only model that works for computer games.

You need to poll various pieces of hardware to generate a guid, hash it against a product key and you have a reproducible yet complex and hard to forge piece of data.

http://edn.embarcadero.com/article/26040 A link to the .com interfaces to get at the guids

an alternative would be to use something like sysinfo or dxdiag and save the rseults to a file ... hash it and use that as the serial. A lot less coding involved - but a bit messier.

Store this and issue the installation key - easy to spot and manage reinstalls then. Ie you really don't want to go 'computer says no' - its really a marketing opportinuty

John Nicholas
A: 

You could try blocking the key on install and unblocking the key when they uninstall. That way they can only use the key once between each uninstall.

piggles
+1  A: 

Sounds like you need to create a downloadable activex control program that will run on the client's machine in which it will interrogate:

  • MAC of network adapter
  • Windows Version, including SP
  • Hard disk serial number
  • Processor make and CPU type

And relay the information back to the website, then generate the key, and attach the key to the download installer and permit the user to download the installer in which the key is then read in at run-time and checked against the machine that is running on.

The only thing is the ActiveX must be written in C/C++ as you cannot do it on the .NET language as that is assuming the client's machine will have the runtime installed which IMHO is a dangerous assumption.

Hope this helps, Best regards, Tom.

tommieb75
This seems more likely to be a solution for me. Because my customer don't want the users to enter the serial twice by entering it again in the setup executable. I'm not eager to generate the download package again (injecting the user-entered serial in it) before sending it to the user.
frbry
So If I understood correctly, when user clicks on download link after providing serial, an ActiveX control runs and matches the serial and the "hash". If the software is downloaded by the provided serial at least once, then do nothing and allow user to download again the software. If not, update the serial download count and insert the hash provided by ActiveX. And just before the installation, generate the hash again same way the ActiveX does and send it to the server and check.
frbry
@frbry: Yes. Exactly.
tommieb75