Search code examples
javadeploymentdrm

Trying to deploy program


I'm having an issue here: I have created an application that is like a computerized/digitized version of my school's yearbook this year. I would like to give the program out ONLY to those that have purchased the book. The program is programmed in java and I can do key codes/serial numbers/cd keys, but I'm not sure how to do this. I don't want people that haven't bought the yearbook to have access to the program, and I don't want the people that have purchased the yearbook to give out the password/code to their friends so they can use it.

We can set up an online transaction in case the people that wanted a yearbook and didn't buy it can get the program at a cheaper price, but we want it free for those that bought the actual book. Its a challenge, but we can do databases inside the program and online, but I'm not sure.

Things I've thought about trying:

  • Encrypted file
  • CD's
  • username/password
  • 'self-destruct' file on CD
  • and a few others

but all of our ideas don't work for what we want.


Solution

  • The easiest approach that comes to mind (though not great from a usability point of view):

    • The application requires internet access to install and run.
    • Every time the application installs, it generates a unique id for the current computer and sends it to the server.
    • Every time the application runs, it compares the id on the server to the current computer's id.
    • If the two match, it runs; otherwise it informs the user the software is already installed on another PC.
    • Every time the user installs the software, you overwrite the ID on the server (you monitor installs, not uninstalls).
    • This way, the last person to install gets to run but kicks everyone else out.

    People can still cheat, but it requires them to repeatedly reinstall the software every time they want to run it and that's annoying. Annoyance kills piracy :)

    Bonus points:

    • Every time the software detects an ID mismatch, offer to purchase a license for a "low price of $X". If the product is good enough and the price is low enough, people will pay.