Is there a way to have a secure by design client-server communication in a sense that the server can check if the client is not a modified version?
What I'd like to do is give the user access to both the client's and the server's source code, but keep him from communicating with a modified version.
As a practical example, let's suppose a multiplayer race game. Is there a way to give the user access to the source (and to compiling it and playing it on the server if he wants) but keeping him from, let's say, altering the speed of his car to 2x normal speed and using this new version to play?
As I understand, the compiled program could generate some hash and send it together for the server to verify. But then there also comes stuff like being able to get this code and making another version send it, etc.
If this is a known problem, please also provide further information about it. (Any recommendations on books or papers related to that are also welcome)