Why not booby-trap the code all over, so that if it is changed, a
checksum check will fail and you can delete the app/reset the
palm/explode the device/launch a nuclear warhead on top of his head?
Just to make their lifes difficult, and the cracking learning curve
steeper.
The question about avoiding cracks is really not having any static code.
Whenever you have something like:
If (regCode == regKeyGen()) register();
You have loads of flaws. No matter how complicated is the regKeyGen
function, one can always change the jump on the if, or extract the
regKeyGen code, or extract the register() code.
My idea of mutating code would be to have the code encrypted using the
device's serial number, which obviously demands the program to be
encrypted before delivery to each user. Then, just before execution, the
code would be decrypted using this serial number.
This is crackable. You just have to fake the getSerialNumber function,
and you get the code correctly decrypted, even if the device has a
different serial No. Again, there is static code, which is always
flawed. But at least, you can trace the origin of the cracked program
and, if possible, take legal action.
--
Sergio Carvalho
---------------
[EMAIL PROTECTED]
If at first you don't succeed, skydiving is not for you