You can't stop the game from being hacked and circumvent the time bomb.
All you can do is to check the clock, keep a launch count, check timestamps of the files, phone home, obfuscate all of the former and check multiple times.
i realize all this.
i spent yesterday reading up on code obfustication, self modifying code, and DL'ing disassemblers.
at this point, the real question is, in a disassember dump, one can see windows and library calls, correct?
any protection will ultimately depend on 3 system calls: get system time, get file time, and read sector. if those calls can found relatively easily, then its the code that uses them that must be obfusticated.
it looks like the best approach is a VM that uses a proprietary machine code and self modifying code. it in turn would have ops for gettime, get filetime, and read sector.
i was hoping for a few pointers or tips on implementation.
I find it rather surprising that DRM is not a more popular topic here. whats the deal? do most folks here fall into one of two categories: 1. "i have yet to make a game worth cracking", or 2. "i work for a big game company and cracking is someone else's problem" ?
for future readers who might be interested in the topic:
not only can the user reset the clock before running the beta, then can also do so BEFORE installing! never thought of that one before! so saving the install date won't always catch a clock that's been set back after the install. but it should still be done. it DOES trap the case of they install, then set the clock back to run.
there should be a check for current date older than release date, as well as current date beyond expiration date.
current date beyond expiration date is the basic condition we're interested in. all the rest is cause they can play with the system clock.
current date older than release date traps clock set back too far.
and since they can play with the system clock, you need to verify by checking the last update time of files on the hard drive. using something that gets updated automatically at startup, such as the hidden backup copy of the windows registery. i figured i'd just do something like simply check the last update time of all the files in the windows directory (or a few target files if all files is too slow). if any file is "too new" the beta is expired.
but as stated in some of the info i found online, the worst case is you're running in a VM (emulator) where the date never changes.
i did find a lot of good info, and will be posting it to my gamedev info journal. my brain was absolute MUSH last night after all that reading!
and i do plan to also have missing content / disabled features and beta messages.
perhaps i should have started this thread with a disclaimer like:
"i know there's no perfect solution, but one must do what one can, so whats the best way?"