Tecniche per prevenire i clienti non ufficiali nei giochi in rete?


22

Nei giochi di rete multiplayer, quali tecniche esistono per provare a garantire che gli utenti si connettano con l'applicazione client ufficiale e non con alcune app client compromesse?

Mi rendo conto che probabilmente non esiste un modo sicuro per farlo, ma piuttosto sono interessato a tecniche che possono essere impiegate per mitigare il problema.

Sono particolarmente interessato a tutte le tecniche che possono essere utilizzate per i giochi basati sul web, ma immagino che la maggior parte possa essere applicata in generale.

Grazie!


Alcuni credono che il cloud gaming generalizzato sia dietro l'angolo. Risolve completamente questa domanda.
Laurent Couvidou,

Risposte:


13

Questo è un problema interessante, ma penso che tu stia facendo la domanda sbagliata qui. Vorrei iniziare dal rilevare l'approccio client compromesso:

Se il tuo client viene eseguito dalla parte dell'utente, può fare quello che vuole con il tuo codice (fino a quando non è troppo complicato per lui, ma ci sarà sempre qualcuno più intelligente nella linea). Tutto ciò che puoi fare, come la crittografia hard-coded dei messaggi tra client e server, la creazione di certificati client o persino il fare in modo che il client calcoli il suo checksum, possa e abbia abbastanza tempo, verrà decompilato e crackato. Ho visto un software fornito con un dongle, questo dongle aveva parte del codice dell'applicazione, ma per essere in grado di eseguirlo, il dongle ha prima controllato crc dell'app se non era temperato .. ovviamente dopo qualche tempo il dongle è stato hackerato troppo .. inoltre se si effettua un aggiornamento del software, è necessario inviare nuovamente il dongle ..

Inoltre, l'utente può utilizzare il proprio client per imbrogliare, simulando ad esempio il movimento del mouse e i clic.

Quindi la domanda dovrebbe essere: come rilevare un giocatore bot?

Qui hai alcune opzioni - misurare il tempo tra i clic, misurare la velocità dei movimenti del mouse - il mouse si sposta esattamente dal punto A al punto B più volte e colpisce esattamente gli stessi coordini? Il movimento dell'utente è ripetibile? Se quando la risorsa che l'utente stava raccogliendo è stata esaurita, l'utente passa ad altre azioni o aspetta sul posto per ore? Alla fine della giornata finisci per scrivere il codice di riconoscimento dei modelli.


4
Le tue tecniche di controllo dei bot possono essere battute in pochi minuti con l'aggiunta di alcuni rumori attorno all'azione del bot.
AsTeR

+1 a questo; dato che la prevenzione è impossibile (e se qualcuno è veramente determinato, potrebbe persino arrivare al punto di hackerare i suoi driver, il che dovrebbe sottolineare questo fatto), invece, la tua attenzione dovrebbe essere sicuramente sulla rilevazione. Aggiungo anche che qualsiasi comunità ragionevole che potrebbe accumularsi attorno a un gioco finirà probabilmente per sorvegliarsi da sola, quindi puoi anche impegnarti a fornire strumenti che lo aiutino.
Massimo Massimo

2
La prevenzione programmatica da sola è impossibile, motivo per cui giochi come WoW hanno tonnellate di amministratori che controllano le persone che fanno cose ripetitive e fanno loro domande per dimostrare di essere umani.
DampeS8N,

1
@AsTeR Quelle erano solo alcune idee per spingere nella giusta direzione. Esistono numerosi articoli e presentazioni che affrontano questo problema in modo più approfondito, come questo ad esempio: iis.sinica.edu.tw/~swc/pub/bot_trajectory.html
Kamil

5
"Quindi la domanda dovrebbe essere: come rilevare un giocatore bot?" Non sono d'accordo, ci sono diversi modi per imbrogliare senza avere un bot. Ad esempio, consentire al client di ottenere troppe informazioni o fidarsi del client.
Matsemann,

9

Nei giochi di rete multiplayer, quali tecniche esistono per provare a garantire che gli utenti si connettano con l'applicazione client ufficiale e non con alcune app client compromesse?

Non penso che questo sia il modo giusto di affrontare questo o almeno non l'unica cosa di cui dovresti preoccuparti.

  1. Assicurati di inviare solo informazioni specifiche del cliente ad ogni cliente (ad es. Un cliente non ha bisogno di sapere cosa può far cadere un mostro, ad esempio, invia le informazioni dopo averle uccise e solo ai client specificati)

  2. Esegui la maggior parte dei calcoli sul lato server (posizionamento, ecc.). Il cliente sta facendo i suoi calcoli MA MA non può mai inviare i propri valori solo le sue azioni. Il server deve verificare se questa azione è valida e in che modo avrà effetto sul gioco.

  3. 1 e 2 sono generalmente combinati con previsioni. Il client e il server tentano di prevedere determinati comportamenti. Il client, ad esempio, sposta il giocatore ma ogni x secondi o ms. riceve una correzione dal server

  4. Addebitare gli utenti per i loro account non per il client, in questo modo un utente potrebbe ottenere una versione crackata ma non può giocare senza un account.

Con 2 puoi assicurarti che non ci siano hack di denaro, posizionamenti o wall hack ecc. Ma i robot sono sempre stati un problema per molte aziende. Anche i nomi di grandi aziende come Blizzard hanno problemi con questo. Quello che potresti fare è limitare il tempo giocabile per account, in modo che qualcuno non possa essere online per più di 540 ore al mese. Ricordo un bot che utilizzava i valori di colore di mostri + input del mouse per coltivare XP. Un altro modo sarebbe quello di fornire un programma aggiuntivo che verifichi altre applicazioni in esecuzione e l'accesso alla memoria, ma ciò comporta una manciata di nuovi problemi.

Modificare:

Articoli scritti molto bene per i principianti: http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/


Sì, sono d'accordo che non è l'unica cosa di cui dovremmo preoccuparci. Stiamo già facendo la maggior parte di queste cose, ma alcuni elementi esposti sul lato client sono inevitabili.
UpTheCreek

@UpTheCreek Potresti dirci di cosa ti preoccupi di più? Bot, modifica dei dati, che tipo di informazioni vengono inviate al client o dal client che devono essere protette. Dato che noti già come rendere sicuro un client non è un compito facile, ma forse possiamo aiutarti un po 'meglio andando alla radice delle tue preoccupazioni.

Bene per noi è un caso di bilanciamento dei controlli / simulazione lato server con i costi del server. Non siamo in grado di includere tutto ciò che vorremmo. Ci ho pensato parecchio, ma volevo vedere se c'erano trucchi ingegnosi là fuori per proteggere meglio il client :) Il client è basato su JavaScript, quindi puoi immaginare che sia ancora più facile del normale per gli utenti hackerare !
UpTheCreek

4

Non esiste un vero modo infallibile per garantire che il "cliente ufficiale" sia in esecuzione; qualsiasi meccanismo di questo tipo farà affidamento sul codice di convalida che comunica indietro una sorta di "segreto" al server, che può essere retroingegnerizzato, dato il tempo sufficiente. Questo è fondamentalmente ciò che accade quando un software anti-hacking dice al server che il client è OK.

Modifica: per elaborare un po 'quanto sopra, considera il codice che sta convalidando il lato client. Ha due lavori molto difficili: verificare che venga utilizzato il codice originale (e non sia presente nient'altro che possa interferire con il codice originale in modo dinamico / in fase di esecuzione (!)) E comunicare questo risultato al server, in modo tale che questa comunicazione non può essere falsificata. Mentre la prima parte è follemente difficile, la seconda parte è assolutamente impossibile.

Se riesci ad aggiornare sia il client che il server su base regolare, puoi cambiare il segreto regolarmente, con la speranza di rendere difficile il mantenimento dei cracker. Con ogni probabilità, tuttavia, a meno che tu non stia modificando il modo in cui il segreto viene codificato / implementato, può essere nuovamente risolto molto rapidamente. Quindi, fondamentalmente, è una corsa agli armamenti tra te e chiunque voglia risolverlo - chi ha più tempo e denaro per affrontare il problema.

Dopo aver accettato quella parte, c'è qualcos'altro che possiamo fare? In un mondo perfetto, con potenza di elaborazione e larghezza di banda infinite, è possibile semplicemente trasferire continuamente lo stato tra il client e il server e fare in modo che il server esegua una simulazione perfetta di ciò che sta accadendo sul client. Questo modello potrebbe quindi essere utilizzato per convalidare le azioni che il cliente afferma di compiere. Questo non rileverà se un essere umano o un robot sta giocando, ma sarà in grado di verificare se il cliente sta rivendicando un tiro che sta accadendo attraverso un muro o qualche altra azione inconcepibile.

Avere abbastanza dati sul server è anche un primo passo per rilevare comportamenti irregolari - forse troppo veloce per gli esseri umani, ecc. Ovviamente la situazione di simulazione perfetta non è generalmente fattibile, ma si può usare un tipo di modello ridotto e stimato in molte situazioni.


+1. Sono venuto qui per menzionare l'idea di cambiare frequentemente il segreto, il che significa che gli hacker avrebbero dovuto ripetere il loro lavoro. Segreti complessi lo renderebbero ancora migliore, ad es. uno che cambia in base a ciò che il server invia.
Kylotan,

4

Non specifichi il tipo di gioco, quindi mi spingerò pesantemente verso i giochi di ruolo / MMO. Ma molto di questo può e si applica a giochi sparatutto in prima persona, strategia e azione. Il modo in cui grandi aziende di giochi multiplayer come Blizzard affrontano questo problema nei loro giochi è:

  1. Esegui tutti i calcoli e le azioni di gioco sul lato server, il client è solo un terminale stupido e un motore grafico. Quindi, se i giocatori usano un client diverso, non importa davvero in termini di gioco, non possono imbrogliare la fisica del gioco.
  2. Verifica l'eventuale presenza di programmi / client per bot alla ricerca di azioni informatiche ovvie come la perfetta ripetizione di eventi di clic e movimenti del mouse.
  3. Verifica la presenza di programmi / client bot non ovvi e avvisa i moderatori in-game del problema.

Appaiono quindi nel gioco (se possibile, per gli stessi giochi come Starcraft 2 non lo è) o altrimenti guardano / parlano al giocatore delle loro azioni come un "controllo umano". O almeno è così che dovrebbe essere gestito. Blizzard è piuttosto bravo in questo, ma storicamente altre società MMO non lo sono state.

Controllare i robot non ovvi non è facile, ma alcune regole di base da seguire includono

  • Alla ricerca di giocatori che, con una leggera variazione, eseguono ripetutamente le stesse azioni. Questo potrebbe trovarsi in un nodo di risorse in un MMO e coltivarlo quando riappare, oppure potrebbe essere in esecuzione in cerchi tra pacchetti salute / munizioni in un FPS e non deviare mai da un percorso specifico e usare sempre la stessa pistola. (I bot non ottimali negli FPS sono rari, ma se il tuo gioco ha una scala per salire dove il numero di giochi è più importante del talento del giocatore come alcuni FPS moderni, i robot tornano preziosi)
  • Alla ricerca di giocatori che eseguono sempre la stessa corsa o strategia esatta in un RTS. Ci sono alcuni ordini di build in Starcraft che possono essere quasi imbattibili se eseguiti da un bot.
  • Alla ricerca di giocatori che hanno raccolto ingenti somme di risorse e ora stanno macinando senza sosta un oggetto. Questo è stato un grosso problema in Ultima Online.

Il problema è che più il tuo gioco è popolare e più i robot fecondi possono ridurre la noia nel tuo gioco, più è probabile che le persone utilizzino e creino questi robot. Ed è banale limitare la velocità di movimento del mouse, aggiungere una variazione umanistica casuale ai clic, persino far sì che il bot commetta errori a una velocità umana, aprendo e chiudendo parti del menu, premendo il pulsante sbagliato e quindi chiudendo la finestra, passando da tastiera a il lavoro del mouse come fa l'uomo per ridurre l'affaticamento della mano. (non ti rendi nemmeno conto di farlo)

Quindi l'ultimo passo in cui qualcuno o un bot sta facendo qualcosa di ripetitivo per molto tempo deve essere davvero una mod umana che si avvicina al giocatore e parla con loro. Se sono lì e rispondono con risposte umane, sono umani. In genere le mod chiederanno al giocatore di fermarsi per un po ', o seguirle da qualche parte ed eseguire alcune altre azioni, i cerchi diventano più complessi con il tempo.

Tanget

Naturalmente, alla fine qualcuno creerà un bot indistinguibile da una persona reale, superando il test di Turing. E ci sono molti scrittori di bot là fuori che mirano a fare proprio questo.

Io stesso ho avuto un grande interesse per l'idea quando ho iniziato a programmare e ho creato robot inutili per Ultima Online che sarebbero rimasti in città e avrebbero imitato gli NPC. I comandi erano semplicissimi, quindi erano facili da eseguire, bastava premere i tasti per spostarsi in diverse direzioni e guardare il registro della chat per il proprio nome e reindirizzare i messaggi ad ALICE tramite una versione web dell'IA. Non ricordo quale e probabilmente non esiste più.

/Tangente

Il punto è che devi decidere dove tracciare la linea. Se non puoi permetterti a un esercito di moderatori di parlare con le persone che il tuo sistema identifica come robot, probabilmente starai meglio lasciando che la comunità contrassegni le persone come robot, e poi, quando basta, nel tempo, calcia il giocatore per circa un'ora. Non vietare, basta calciare. Il vero problema per la maggior parte dei giocatori è che i robot sfruttano le risorse che altri giocatori umani potrebbero usare. Se i mob sono scarsi, come è stato il problema con Ragnarok Online, allora i robot che vagano e sgombrano intere aree di nemici mentre raccolgono oggetti (o no) sono comuni e rovinano il gioco per altre persone. In questo modo puoi evitare il costo degli eserciti di amministrazione in quel modo.

Infine, puoi anche vivere con i robot come realtà del tuo spazio di gioco e incoraggiarne l'uso. Ciò richiede di progettare il tuo gioco intorno all'utilizzo eventuale e comune di robot, formatori e programmi di aiuto. Voglio dire che c'era un MMO che lo ha fatto circa 10 anni fa, ma non ricordo quale fosse. Ha segnato la fine del gioco, perché gli MMO sono molto pesanti e ciò significa che il 95% dei giocatori ci allontanano dalle loro tastiere in qualsiasi momento e distruggono la community. Se segui questa strada, fai attenzione.


3
Nel tuo ultimo paragrafo, Star Wars Galaxies di SOE è stato un esempio di MMO con un linguaggio di script / macro di gioco piuttosto robusto, ma non ha avuto molti problemi con i bot. Ciò che è accaduto alla fine è stato il fatto che alcune delle necessità di gioco più noiose fossero scritte (la maggior parte degli starport aveva una fila di giocatori di fronte a un robot di buffering del guaritore completamente automatizzato, per esempio), e la macinazione di XP di basso livello veniva spesso eseguita in questo modo pure. Tutto ciò ha aggiunto enormemente al gioco, ciò che l'ha ucciso sono state alcune decisioni incredibilmente sbagliate e cambiamenti di gioco, con poco o nessun preavviso o comunicazione.
GAThrawn

3

evitare di avere funzionalità di gioco da cui un utente può vincere svolgendo attività ripetitive , in particolare nei giochi simili a browser. le funzionalità di gioco che causano compiti ripetitivi non solo fanno arrabbiare gli altri utenti perché non hanno il tempo di eseguirli, ma rendono anche il gioco molto facilmente botable (e molto meno divertente!)

Se una determinata funzionalità di gioco può essere botable, perché c'è comunque quella funzione nel gioco ?? Questa funzione chiama chiaramente l'utente a creare un bot.

Si intende che il gioco sia giocato dando al giocatore una ragionevole quantità di intrattenimento, normalmente con una serie di scelte non banali. L'abilità che decide di affrontare scelte non banali separa un essere umano da un robot. Alla fine, invece di cercare robot, cerca nel tuo gioco dove potrebbe essere implementato un bot e implementalo da solo per essere utilizzato da tutti. In questo modo, si risparmia tempo per un giocatore di gioco evitando di svolgere compiti noiosi, mentre si combattono i bot dalla radice: se non ci sono caratteristiche di gioco botable, come possono esserci i robot?

La mia linea di fondo è: direi che esiste una soglia sulla quantità minima di complessità che un gioco non deve essere botabile. Rendi il tuo gioco oltre tale soglia aggiungendo scelte non banali che aumenteranno l'esperienza dell'utente.

Ad ogni modo, forse questo paradigma non si applica più ai giorni nostri ... ma credo ancora che questo sia ciò che rende un buon gioco.


1
+1 L'unico modo efficace contro gli imbrogli è progettare il gioco in modo tale che gli imbrogli non siano efficaci in primo luogo.
API-Beast

La mia ultima frase era giusta perché non mi ero stupito che nessuno lo avesse mai considerato come una possibilità ...
Jorge Leitao,

2

Le risposte esistenti sono già buone, ma volevo sottolineare che se i tuoi controlli sono costosi (es: eseguendo l'intero lato del server di gioco per assicurarti che il client non stia barando), allora puoi scegliere di farlo solo parte il tempo .

Ad esempio, puoi solo controllare le azioni in una determinata regione o da determinati giocatori (cambiando casualmente dopo qualche tempo), o semplicemente avere una coda di azioni e scegliere casualmente quali convalidare (e ignorare le altre). Forse inventare un'euristica di chi probabilmente bara (fondamentalmente cercare le persone che hanno più successo) e convalidare le loro azioni sul server.

Assicurarsi che il server non dia via quando sta convalidando le azioni e quando non lo è. Invia sempre la tua risposta standard fino a quando non sei pronto per agire (e non darlo via impiegando più tempo a inviare una risposta quando stai convalidando e quando non lo sei).

In questo modo puoi ottenere una protezione abbastanza buona contro i trucchi, usando solo la potenza del server che puoi risparmiare (anche se ovviamente più ti avvicini alla convalida di ogni azione, migliore sarà la protezione dai truffatori).


1

Bene, non penso che ci sia una "sbalorditiva ultima". È possibile codificare i pacchetti di dati e fornire alcune regole al server che riceve i pacchetti. Ad esempio, potresti impostare che la mossa più realistica / consentita sia +1 e non come un imbroglione / hacker che la imposti a 5 o più solo per essere più veloce. Pensa solo a cosa potrebbe fare un hacker per essere migliore degli altri giocatori e stabilisci delle regole.


0

Il modo più semplice è in sostanza rendere il client un terminale stupido. Tutto viene eseguito sul server e il client invia semplicemente comandi al server. In questo modo il server ha il pieno controllo di tutto.

Questo non è probabilmente il caso più adatto a te, perché il server deve eseguire più calcoli e l'esperienza utente sarà scarsa. Quindi, più logica lasci al client da eseguire, migliore è l'esperienza dell'utente, ma minore è la sicurezza. Quindi dovrai trovare una via di mezzo che è accettabile per te.

Inoltre, invia al client solo ciò che "dovrebbe" sapere. Ad esempio, se un giocatore nemico si trova dietro un muro, non inviare tali informazioni a un client o un client compromesso sarà in grado di discernere queste informazioni (leggi: wallhack).


-1

MODIFICARE: ho frainteso la domanda. L'ho interpretato come "prevenire la chiave piratata / compromessa" anziché "software hackerato che può inviare un messaggio per generare 1 miliardo di oro per il giocatore".

La maggior parte dei giochi in questi giorni ha un valore legato a un account in un database poiché tutto ciò che un client può inviare a un server può essere modificato. Questo è probabilmente il metodo più semplice ed efficace.

Con la prevalenza del trasferimento di file Internet e P2P ad alta velocità, le aziende sono passate da chiavi cd archiviate localmente sul client a chiavi collegate a un account sui propri server. Non ci sono più software client "ufficiali" o "non ufficiali" poiché chiunque può scaricare il client. Ma puoi giocare solo se hai un account con accesso per giocare.

Ciò ha anche un vantaggio per l'azienda, poiché non è necessario spendere così tanto per produrre copie fisiche del software.


Non ero quello che ti ha votato, ma per me questo non fornisce alcuna protezione. Sembra che tu stia parlando solo di consentire agli utenti autorizzati di connettersi, che è facilmente gestibile. Ma il problema è che non ci sarebbe nulla che impedisca a qualcuno con un account valido di decodificare la messaggistica e scrivere il mio client hackerato.
UpTheCreek

-1 questo non risponde alla domanda, avere un account online non impedisce a qualcuno di connettersi con un client compromesso che, ad esempio, automatizza le azioni in-game. wow è interamente online e viene comunque costantemente violato. per prevenire questa bufera di neve impiega il loro software anti-cheat "guardiano", che è un esempio di come affrontare il problema in questione
dreta,

Arg, hai ragione. Ho frainteso la domanda.
Orin MacGregor,
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.