Copy protecting an application?


If you wanted to sell an application for customers to download into their own units, how could you prevent them from just buying one copy and then loading it into multiple units?

I thought of having something like a “licence code” that relates to the IMEI:
The customer would have to specify the IMEI, and would receive a “licence code” calculated from it;
There would need to be an AT Command or something to store this into Flash;
The application would then check the code in Flash against the IMEI, and only run (properly) if they matched.

Does this sound workable?

Any suggestions for the “calculation”?


Sounds workable.
But I wouldn’t lock it simply to the IMEI, but to the internal serial number of the module instead.
That way the customer can, if they need to, change IMEI of the module without disabling the application.

For the calculation I can only recommend you look at some cryptographic signature methods.

No matter what you do though, if the customer really wants to, they’ll find a way to bypass your protections. Most don’t really have the know-how though, so the above should work reasonably well.


Your suggestion has been taken into account and we are evaluating the feasibility of implementing such functionality.


What do you mean by, “the internal serial number” ?
Is that accessible to an AT command?

I didn’t think that was the kind of thing that your average customer can do - is it?

Don’t you need special arrangements in place to be allowed to assign your own IMEIs to units?
Let alone change the IMEI when one has already been assigned?

For such a customer, I’m sure a suitable arrangement could be reached…! 8)

Sad, but all too true. :frowning:





It is not clear in the AT Commands Guide that this is distinct from the “Product Serial Number” returned by +CGSN (the IMEI).

One advantage of using the IMEI is that it has built-in check digits - so you can distinguish a mis-typed IMEI from an incorrect IMEI…

Or does the CPU Serial Number also have (a) check digit(s)?