Making games uncrackable is a solved problem: the game runs on the server and the server decides what happens, with the user connecting a client that simply sends input to the server and receives a scene to render.
This has many negative side effects, but if the game doesn't require twitchy reflexes it's usually not very noticable. It's also terrible for preservation.