So eRe4s3r, let's just rephrase what you are saying about 20 checks so instead of "mysterious" checks we talk about something concrete. Let's assume that the key you generate is actually consists of 20 individual keys. Say, you give it to a customer in form of a file, you can encode them, so they don't look like 20 keys but as one big key.
In your release you check only first of the 20 keys. And then a patch checks another one and the game after patch is checking yet another one. Am I following you so far?
In the case of this example, for each key you can actually use different generation algorythm if you have all the time in the world for designing these algos. The have to look sufficiently different so for a cracker activating each new one is a completely new endeavour, and not just changing a constant here or there. And you make it difficult to the point that there is too much trouble of doing a keygen, it's simpler to do a crack.
Heck, you don't even need complexity, to make your program "unkeygenable". This kind of protection has been invented many years ago. It's not really complicated and it works like this (you have to know what
asymmetric cryptography is all about) :
- Sign something you know (Customer's name or email) with your private key that no one knows and it's not integrated in your game so there is no way to find it out
- Give the signature to the customer as his key
- Let the game check the signature with the public key embedded into the game
Currently there is simply no way to keygen this type of keys. None.
So the cracker does the next best - he disables the checks in the game so it does not need the key. Fair enough.
And this leads us to where this discussion has started. You
have to do an online check, and you
have to keep the keys in the database on your server to do the check. It's the best you can do.
So you can say goodbye to the idea of protecting the game offline functionality. You can never make it efficient enough regardless of the schema you are using (to the point that it becomes more expensive you than you are gaining). But what you can do and what is not that difficult to pull off is to do proper checks for the online functionality. Like downloading patches.
And this all has nothing to do with Dominion 3, which was doomed to be cracked the day it was released. It does not do online checks. It was bound to be cracked once and for all.