Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where to Store the Protection Trial Info for Software Protection Purpose

It might be duplicate with other questions, but I swear that I googled a lot and search at StackOverflow.com a lot, and I cannot find the answer to my question:

In a C#.Net application, where to store the protection trial info, such as Expiration Date, Number of Used Times?

I understand that, all kinds of Software Protection strategies can be cracked by a sophiscated hacker (because they can almost always get around the expiration checking step). But what I'm now going to do is just to protect it in a reasonable manner that a "common"/"advanced" user cannot screw it up.

OK, in order to proof that I have googled and searched a lot at StackOverflow.com, I'm listing all the possible strategies I got:

1. Registry Entry

First, some users might not have the access to even read the Registry table.

Second, if we put the Protection Trial Info in a Registry Entry, the user can always find it out where it is by comparing the differences before and after the software installation. They can just simply change it.

OK, you might say that we should encrypt the Protection Trial Info, yes we can do that. But what if the user just change their system date before installing?

OK, you might say that we should also put a last-used date, if something is wrong, the last-used date could work as a protection guide. But what if the user just uninstall the software and delete all Registry Entries related to this software, and then reinstall the software?

I have no idea on how to deal with this. Please help.

A Plain File

First, there are some places to put the plain file:

  • 2.a) a simple XML file under software installation path
  • 2.b) configuration file

Again, the user can just uninstall the software and remove these plain file(s), and reinstall the software.

- The Software Itself

If we put the protection trial info (Expiration Date, we cannot put Number of Used Times) in the software itself, it is still susceptible to the cases I mentioned above. Furthermore, it's not even cool to do so.

- A Trial Product-Key

It works like a licensing process, that is, we put the Trial info into an RSA-signed string. However, it requires too many steps for a user to have a try of using the software (they might lose patience):

  • 4.a) The user downloads the software;
  • 4.b) The user sends an email to request a Trial Product-Key by providing user name (or email) or hardware info;
  • 4.c) The server receives the request, RSA-signs it and send back to the user;
  • 4.d) The user can now use it under the condition of (Expiration Date & Number of Used Times).

Now, the server has a record of the user's username or hardware info, so the user will be rejected to request a second trial. Is it legal to collection hardware info?

In a word, the user has to do one more extra step (request a Trial Product Key) just for having a try of using the software, which is not cool (thinking myself as a user).

NOTE: This question is not about the Licensing, instead, it's about where to store the TRIAL info. After the trial expires, the user should ask for a license (CD-Key/Product-Key). I'm going to use RSA signature (bound to User Hardware)

P.S.: My software will be targetting the China market, whose software market is different from US. Most people in China, they only buy hardware, they usually don't buy software like Micosoft Windows/Office (they just use pirated copies). However, some professional software aiming to a specific field, research people are still willing to buy it IF there is no crack version or the crack version is very difficult to install.

like image 557
Peter Lee Avatar asked Dec 23 '10 18:12

Peter Lee


2 Answers

Either option 1 (plain registry key) or 2 (plain file) is just fine. Here's my reasoning:

  • Standard-privileged users do have read permissions for the registry. If they can't read your key, something else is wrong. Standard-privileged users do not have write permissions for the registry, but this doesn't matter because they also don't have permissions to install software in the first place. In other words, either the user will have permission to create your registry key at install time, or they'll need help installing anyway. Therefore the basic technical issues you raised for the registry key aren't really a factor.
  • Just don't worry about those users who do things like set back their system clock or manually hack the registry to break your key. Let me say that again: Just don't worry about users who make a conscious decision to alter their system in a significant way to get past your trial limitations — and make no mistake, setting back the system clock or editing the registry are significant modifications. The reason you shouldn't worry about these users is that they represent exactly $0 in potential income. A user willing to make to take this kind of conscious choice about pirating your software isn't going to just give up and decide to pay for your product if it doesn't work. If they can't get your software for free, they'll either go with a competitor or do without. You're in this to make money - you don't want to spend time and resources trying to grab sales you can't win or sending users to a competitor. Therefore, the basic security issues you raised for either option aren't a factor.
like image 153
Joel Coehoorn Avatar answered Nov 18 '22 22:11

Joel Coehoorn


You won't find a single perfect solution. The efforts you put into this should be proportional to the price of the product you make. If it's worth a lot, then buy a professional solution. If not, then use any combination of methods that you find. Use the registry, request an online trial key, check if the user manipulates the system time, and so on.

like image 1
fejesjoco Avatar answered Nov 19 '22 00:11

fejesjoco