Non penso che dovresti fare qualcosa per smettere di barare sui giochi per giocatore singolo. I tuoi utenti hanno acquistato il gioco, dovrebbero essere in grado di imbrogliare se lo desiderano, purché non giochino contro gli altri.
Ecco alcune cose che ho fatto. Questi sono stati fatti principalmente per i sistemi anti-cheat nei tornei, dove il denaro è in gioco, e certi livelli di intrusione nel sistema dell'utente sono considerati accettabili. Farei attenzione a fare alcune cose su giochi casuali, perché se il tuo gioco non è stabile, c'è il potenziale per causare problemi con il loro sistema.
1) Se possibile, "Non fidarsi del cliente" è il principio più sicuro da rispettare. Esegui tutte le azioni sul server e dai al cliente solo le informazioni necessarie a rendere ciò che dovrebbe essere in grado di vedere sullo schermo in un dato momento. cioè se un cliente non conosce la posizione di un giocatore che è nascosto dietro un muro, un muro di hack non farà bene all'utente. Per i giochi d'azione ad alta velocità questo può essere estremamente difficile - specialmente ora che le ombre in tempo reale e tali sono la norma, dove l'utente può aver bisogno di essere in grado di vedere un'ombra anche se il corpo del giocatore è visibile - ma dovrebbe sempre essere nella parte superiore delle opzioni. Anche estremamente difficile da fare sui giochi peer-to-peer, ma ci sono modi per limitare la conoscenza tra colleghi. Solo quando diventa una prestazione proibitiva o al di fuori del tuo budget di tempo/denaro, dovrebbero essere considerati i seguenti elementi.
2) Aprire tutti gli altri processi e agganciare le loro funzioni WriteProcessMemory in modo che non possano scrivere nella memoria nel processo del gioco. Fatto bene, questa fase bloccherà il 90% di tutti i cheat e i cheat engine.
3) Fare la stessa cosa, agganciare le varie funzioni di emulazione del mouse e della tastiera. Ciò impedirà un sacco di botole di mira e altri tipi di robot di automazione.
4) Collegarsi alle funzioni VirtualProtectEx/VirtualAllocEx/etc nel processo del proprio gioco e monitorare quali moduli stanno modificando i livelli di protezione o allocando nuovi blocchi di memoria. Devi essere furbo con questo per evitare che sia troppo carico di CPU quando il tuo gioco fa un sacco di allocazioni, ma può essere fatto.
5) Agganciare le funzioni LoadLibrary e monitorare le DLL caricate dinamicamente, per evitare l'iniezione di DLL.
6) Utilizzare una codifica polimorfica leggera sulle connessioni di gioco.
7) Utilizzare alcune tecniche anti-debug per impedire ai debugger di collegarsi ai processi. Anti-debug di Google e dovresti riuscire a trovare molte cose.
8) Utilizzare un pacchetto PE proprietario personalizzato per impedire un utile smontaggio del gioco.
9) Collegati alle funzioni e ai metodi OpenGL o Direct3D che trattano della trasparenza e della fusione alfa.
10) Se si utilizzano shader, checksum, shader e valori dello shader.
11) Utilizzare le tecniche di abbattimento occlusione aggiuntive sui personaggi dei giocatori per impedire che vengano riprodotti quando la linea di vista verso di loro è bloccata da un'altra geometria. Può o non può aiutare anche con la tua performance, ma impedirà molti wallhacks.
Se il gioco utilizza i salvataggi, è necessario verificare la modifica e la corruzione del savegame – Jim