Garantire che i dati salvati non siano stati modificati in un gioco con componenti sia offline che online


8

Sono nella fase di pre-pianificazione dell'ideazione di un game design e mi chiedevo se ci fosse un modo ragionevole per impedire alle persone di modificare i salvataggi in un gioco con componenti offline e online.

Il componente offline consentirebbe al giocatore di giocare durante il gioco e il componente online consentirebbe loro di giocare contro altri giocatori, quindi avrei bisogno di assicurarmi che le persone non avessero modificato il codice sorgente / salvare i file mentre erano offline per ottenere un vantaggio mentre online.

È probabile che il gioco sia sviluppato in .Net o Java, entrambi purtroppo facili da decompilare.

Risposte:


10

Essere in grado di decompilare / decodificare facilmente il codice client è davvero solo un piccolo ostacolo. Gli hacker intraprendenti hanno piegato gli eseguibili alla loro volontà (maliziosamente e non) per anni prima che arrivassero sulla scena linguaggi di alto livello, banali da decompilare come C #. La sicurezza attraverso l'oscurità da sola non è affatto sicurezza.

Qualsiasi dato sul computer dell'utente (codice o dati di risorse regolari) è già sostanzialmente compromesso. Non puoi davvero proteggerti da questo - se non vuoi che le persone modifichino i dati, non metterli sul loro computer, salvali sui tuoi server. Allo stesso modo se non vuoi che modifichino il codice nel client, assicurati che il client non abbia il controllo su qualcosa di utile.

Se questa non è un'opzione (ad esempio il tuo multiplayer è interamente peer-to-peer) puoi fare cose come calcolare gli hash delle risorse pertinenti e consentire alle persone di giocare tra loro solo se gli hash corrispondono. Sì, qualcuno potrebbe creare con cura una modifica all'eseguibile in modo tale da restituire un hash diverso, ma tutto ciò che dovrebbe significare è che il giocatore offensivo si disincronizzerà e si disconnetterà dal gioco relativamente rapidamente perché le sue risorse non corrispondono al resto di i giocatori'.

Potresti anche utilizzare un tipo di test di tipo "regole di maggioranza" che ti consente di disconnettere i giocatori la cui simulazione è andata fuori sincrono con altri giocatori, dando al giocatore "ospite" (chiunque abbia iniziato il gioco) il voto decisivo.


3

Se i dati sono tutti generati dal lato client, non c'è nulla che tu possa fare al riguardo. Non puoi distinguere tra una modifica effettuata dal tuo software e una modifica eseguita da qualcuno o qualcos'altro che finge di essere il tuo software.

Un deterrente che puoi provare è la crittografia del file di salvataggio, utilizzando una chiave nel software. Sfortunatamente, se l'utente è abbastanza bravo da modificare un file di salvataggio, è abbastanza bravo da trovare la chiave anche nel tuo software.

Puoi impedire alle persone di modificare i salvataggi non memorizzandoli sul computer del client, ad es. caricandoli sul server, ma ciò non impedisce loro di caricare un salvataggio compromesso in primo luogo! I giochi online risolvono questo problema mantenendo costantemente lo stato di gioco autorevole sul loro server, ma non funzionerà per la modalità offline.

Quindi davvero, la risposta è no: tutto ciò che il tuo gioco può fare per modificare, oscurare o crittografare i dati può essere fatto anche da un hacker.


Mi rendo conto che questo è praticamente ciò che Josh ha già detto, ma ho avuto un'interruzione di Internet e non sono riuscito a postarlo 30m fa quando l'ho digitato per la prima volta!
Kylotan,

1

Quando stavamo iniziando lo sviluppo del nostro gioco attuale, anche noi volevamo avere una modalità di gioco offline. L'idea era di permettere ai giocatori di giocare attraverso i livelli di gioco mentre erano offline, e quindi in qualche modo sincronizzare i loro progressi quando sono online. Quindi, abbiamo riflettuto a lungo su come prevenire gli imbrogli. La conclusione è stata: non possiamo. Non c'è davvero alcun modo per consentire ai giocatori di giocare offline ed essere sicuri al 100% di non aver imbrogliato.


1

Una soluzione semplice utilizzata per il download di file è l'hash. Hash il file di salvataggio e memorizzare questa "impronta digitale" da qualche parte. Quando lo carichi, esegui l'hash del file e controllalo con l'impronta digitale. Se non corrispondono, il file è stato modificato.

Naturalmente, se qualcuno decompila il tuo codice, non c'è niente che puoi fare. Per questa risposta, ciò significa che possono anche archiviare l'hash del file di salvataggio modificato.

Un'altra opzione sarebbe quella di inviare l'impronta digitale a un server da qualche parte, in cui l'utente finale non può modificarlo manualmente se ha modificato il file di salvataggio. Questo è simile a quello che fa iTunes quando ripristina le immagini di iPhone.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.