Clientside anticheating nel gioco multiplayer 1vs1


8

Sto sviluppando un semplice gioco di carte, dove ci sarà un sistema di matchmaking che ti metterà contro un altro giocatore umano. Questa sarà l'unica modalità di gioco disponibile, un 1vs1 contro un altro essere umano, senza AI.

Voglio evitare di barare il più possibile. Ho già letto molte domande simili qui e so già che non posso fidarmi del cliente e devo effettuare tutte le verifiche sul lato server. Ho intenzione di avere un server (ne ho bisogno uno per il matchmaking) e intendo effettuare alcune verifiche sul lato server, ma se voglio controllare tutto sul lato server questo rende il mio server in grado di tenere traccia dello stato di tutti i giochi attuali e controlla ogni azione e non ho i soldi / l'infrastruttura per supportare quel server.

La mia idea è di fare in modo che i clienti controllino e verifichino alcune delle azioni compiute dal loro avversario * e se trovano qualche azione illegale avvisare il possibile imbroglio al server e farlo verificare dal server. Ciò richiederà comunque che il mio server tenga traccia di tutti i giochi attuali, ma risparmierà risorse controllando solo alcune cose che non possono essere verificate sul lato client (come l'ordine delle carte nel mazzo) e controllando altre cose solo quando sono effettivamente sbagliate.

* (solo quelli che possono controllare senza permettersi di imbrogliare! per esempio: non possono controllare se la carta giocata era in mano perché ne avrebbero bisogno per conoscere tutte le carte in mano)

Riassumendo, le mie domande sono : è un approccio praticabile? risparmierò effettivamente risorse facendo questo o la complessità aggiuntiva nel server e nel client per lo scambio di questi messaggi non ne vale la pena? conosci qualche gioco che ha tentato con successo o senza successo un approccio simile?

Grazie a tutti per aver letto e risposto


Certo, allora avresti bisogno di convalidare quei controlli sul
lato client

Sì, l'idea sta salvando alcune convalide controllando solo i controlli sul lato client, non tutte le azioni. Ma come ha detto Filippo, è probabilmente un'ottimizzazione prematura
garcianavalon,

Risposte:


8

A seconda della complessità del tuo gioco, verificare se un'azione è legale o meno potrebbe richiedere di tornare indietro su gran parte del gioco. Un esempio: il giocatore A dice che il giocatore B non può giocare quella carta in questo momento perché non ha ResourceX. PlayerB dice di avere molte risorse ResourceX. Chi ha ragione? Per scoprirlo, simuleresti di nuovo l'intero gioco dall'inizio alla fine per contare ResourceX che PlayerB ha in questo momento. Quindi, verificare le azioni dei giocatori solo quando si grida "fallo" potrebbe non essere proprio un'ottimizzazione.

Ma ne vale davvero la pena?

Penso che potresti avere un caso di ottimizzazione prematura qui. Anche se non so esattamente cosa stai facendo, un gioco di carte di solito non è così costoso dal punto di vista computazionale sul lato server.

I giochi di carte sono generalmente progettati per essere giocati senza il supporto del computer, quindi le loro meccaniche di gioco sono di solito abbastanza computazionalmente semplici da essere eseguite dagli umani *. Inoltre, i giocatori umani di solito impiegano diversi secondi per fare una mossa, che sembra un'eternità per il server. Ciò significa che il tuo server ha solo un'attività leggera da eseguire ogni pochi secondi per partita. Non so quanti giocatori simultanei ti aspetti, ma finché sei ancora nella scala di un progetto di hobby non commerciale, dubito che anche il server più economico che puoi trovare non sarà in grado di gestirlo. Ovviamente, sapete come programmare in modo efficiente.

*) purché si escluda il processo decisionale dei giocatori. La maggior parte dei giochi si basa sul presupposto che la strategia vincente ideale può essere teoricamente calcolata, ma farlo è così complesso che i giocatori e spesso anche i computer non sono in grado di farlo, quindi devono usare l'intuizione. Ma hai detto che non vuoi l'IA e vuoi solo giocatore contro giocatore, quindi questo è al di fuori dello scopo di questa domanda. Ma fa anche pensare ad un altro aspetto imbroglione: hai considerato un giocatore che utilizza un programma per aiutarlo nel processo decisionale? Come uno che dice loro l'esatta probabilità che l'avversario abbia una determinata carta in mano?


Penso che tu abbia ragione, sto cercando di evitare di sovraccaricare il server prima di sovraccaricarlo. Il fatto che tu abbia risposto alla mia domanda con la stessa domanda (ne vale davvero la pena) lo riassume abbastanza bene
garcianavalon

Per gli altri visitatori, tieni presente che, a meno che non si interfacci effettivamente con il codice di gioco (e potenzialmente anche in quel momento), la capacità di rilevare un programma esterno che fornisce un aiuto di "probabilità" è sostanzialmente nulla.
Clockwork-Muse

4

"Voglio evitare di barare il più possibile." - Così diciamo tutti. :)

Forse un approccio più sensato è quello di non perdere tempo facendo qualsiasi cosa al di là delle misure anti-frode ragionevoli e generalmente efficaci.

Questi sono: doppio test per i bug che consentirebbero ai giocatori di eseguire azioni illegali e invio di soli dati crittografati (tramite https o crittografia personalizzata) e crittografia dell'app stessa per rendere più difficile l'hacking. Questo è tutto.

È molto probabile che i giocatori imbrogliano i bug nel gioco rispetto a qualsiasi altra cosa.

Potresti semplicemente fare di meglio, in termini di sviluppo, per aspettare se i tuoi giocatori si preoccupano abbastanza di imbrogliare. Se l'app non si trova in una "top 500 chart" figurativa e i trucchi non sono così semplici (ovvero i bug), i giocatori non si preoccuperanno abbastanza di perdere tempo cercando di imbrogliare attraverso altre misure, come la modifica del flusso IP o l'hacking del app.

A meno che, naturalmente, tu non stia trattando soldi veri e premi reali qui.

Se la tua app ha esito positivo e barare diventa un problema, è allora che dovresti affrontarla. Ma a questo punto sarà un gioco di gatto e topo e gli imbroglioni vinceranno sempre.

Fondamentalmente quello che sto dicendo è che il 100% dei tuoi giocatori non imbrogliare se non è possibile attraverso un bug riproducibile e / o la tua app non è molto popolare. Se la tua app diventa molto popolare, meno dell'1% dei tuoi giocatori imbroglia in modi che non puoi nemmeno immaginare.

Quindi, per quanto riguarda i trucchi, dovresti proteggerti dagli imbrogli ovvi (bug, crittografia sia dell'app che del flusso IP) e reagire solo ai trucchi reali che hai appreso e affrontarli direttamente. Quello che vuoi davvero è registrare tutte le azioni dei giocatori, farle verificare sul server e se trovi un'azione illegale che si sta verificando piuttosto spesso, scopri perché. Potrebbe essere un bug, potrebbe essere un exploit, potrebbe essere un trucco tecnico.

La più importante misura anti-frode è imparare che i giocatori FANNO effettivamente imbrogliare e come.


grazie, un'ottima risposta anche. Non ha senso dedicare del tempo a cercare di creare la migliore soluzione anticheat pur avendo bug sfruttabili, lavorerò prima nelle cose fondamentali che ogni gioco ha bisogno di protezione per poi risolvere i problemi che appaiono, piuttosto che viceversa!
Garcianavalon,

0

Penso che tu stia incontrando altri problemi qui. Che cosa succede se il giocatore sta fingendo di essere un normale client (simulando il traffico di rete) e sta usando per corrompere il gioco con una convalida errata?

Invece di provare a costruire un sistema client a prova di proiettile, che ti porterà a continue correzioni di bug / exploit e al bando, proverei a semplificare il sistema server. Non ne so abbastanza della tua meccanica di gioco, ma forse sei in grado di ridurre al minimo le informazioni sul server.

In generale, dovresti presumere che il client con cui stai parlando possa distribuire qualsiasi codice e meccanica di gioco che desideri distribuire. E questo rende quasi impossibile la validazione lato client


0

Dipende un po 'da ciò che consideri barare. Sta usando uno strumento per fare / calcolare le mosse? Cambiare il mazzo di carte durante il gioco? La prima cosa sarà difficile da affrontare. Per il secondo, puoi pensare che ogni utente inserisca le sue carte e crei un codice hash che viene visualizzato su entrambi i lati. Alla fine il server può calcolare l'hash con le carte giocate e le carte rimaste. Se un hash non corrisponde, l'utente ha tradito. Se le regole non sono state seguite, puoi verificarlo anche sul tuo server. È possibile farlo su una richiesta dell'utente per risparmiare risorse. Nessuna informazione sulle carte diventa disponibile. Per rendere la generazione dell'hash un po 'più unica / complessa puoi includere il nome utente nell'hash.

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.