Quali sono alcuni modi per prevenire o ridurre i trucchi nei giochi multiplayer online? [chiuso]


19

Punkbuster esiste solo per prevenire i trucchi, e tuttavia i trucchi sono comuni nei giochi abilitati per punkbuster. Modern Warefare 2 è seriamente bloccato dall'utente finale che esegue il proprio server o apporta modifiche, e le truffe avvengono costantemente.

Per un gioco multiplayer in cui ogni client è in esecuzione su un PC, cosa si può fare per ridurre o eliminare i trucchi?



1
Questa non è una risposta completa in sé, quindi non la elencherò come una, ma se aggiungi un certo valore all'account dei giocatori in aggiunta ai tradizionali metodi anti cheat, credo che possa aiutarti. Ad esempio, se i nuovi giocatori vengono retrocessi nei server "noob" fino a quando non acquisiscono abbastanza esperienza per accedere al resto del gioco, è un grande problema per gli hacker ridimensionare il proprio account dopo essere stati bannati ogni volta. Probabilmente ci sono ancora alcuni hacker che possono superarlo, ma proteggere i tuoi account / server di matchmaking è molto più facile che proteggere i client.
Lewis Wakeford,

Risposte:


18

Dipende da come stanno imbrogliando, concentrandosi su uno dei modi principali per creare cheat, altri processi che si agganciano alla tua applicazione e la modificano: puoi enumerare tutti gli altri processi e agganciare i loro metodi di manipolazione della memoria e la loro emulazione tastiera / mouse metodi.

I wallhack sono in genere scritti iniettando codice tra il processo e le librerie DirectX / GL per impostare la trasparenza sui materiali in modo che possano essere visti. Puoi aggiungere un po 'di codice al tuo sistema scenegraph / culling in modo specifico per non disegnare altri giocatori / entità utili se sono dietro i muri (per evitare di barare in quel modo).

Se stai andando in multiplayer e vuoi impedire che i pacchetti vengano modificati tra client / server, creare un checksum dei dati che invii tramite un tuo algoritmo e verificarlo mentre si presenta dall'altra parte può essere efficace. (Probabilmente finirai per farlo comunque per vari scopi di controllo qualità).

Lo stesso vale per la maggior parte delle risorse in memoria, la creazione di un checksum all'inizio di un frame e la verifica in varie fasi può comportare un rilevamento della manipolazione della memoria piuttosto utile.

Questo è un argomento piuttosto coinvolto, ma speriamo che questo ti metta in una direzione vagamente accettabile.


O addirittura meglio di nascondere oggetti dietro i muri (che possono ancora essere hackerati), non fornendo al cliente informazioni sulla posizione di quel giocatore (o solo su ciò che è necessario, ad esempio, per un buon effetto sonoro 3D)
Bart van Heukelom,

17

Alla soluzione più estrema, praticamente non ti fidi mai del cliente. Per giochi come MMO, gli utenti non eseguono i propri server e qualsiasi logica di gioco è gestita dal lato server. Non dare mai al cliente l'autorità di dire "I have X health" o "I have X munizioni", ecc.


4
È fantastico se in realtà hai le risorse per eseguire un server dedicato, ma è un modo abbastanza semplicistico di vederlo. Molto probabilmente faresti ancora molta della logica sui client e un sottoinsieme minimo della logica sul server, con la sincronizzazione occasionale per applicare le regole di base. Inoltre, non impedisce necessariamente a tutti i trucchi sul lato client come wallhack / manipolazione della memoria di ingannare il cliente nel rivelare informazioni utili / ecc.
Rob Ashton,

10

Se hai un sistema in cui la logica è costosa e deve essere eseguita principalmente sul client per salvare i cicli del server, puoi implementare un sistema probabilistico di rilevamento dei cheat. Ogni pochi minuti sceglie alcuni giocatori diversi per ispezionare attentamente e controllare la coerenza sul server. Dal momento che gli imbroglioni raramente limitano il loro imbroglio a brevi e rari periodi di tempo, alla fine verranno catturati.

Un altro vantaggio di questo è che non avranno un ciclo di inversione rapido per lo sviluppo: se il server impiega in media 10 ore di gioco per prestare attenzione a te, allora è un ciclo di inversione di 10 ore ogni volta che vuoi vedere se qualcosa ha funzionato. E se ha lavoro, è anche di più, perché non si sa se il server ha dato loro un pollice in su o semplicemente non ha ottenuto intorno a loro.


+1 In termini di prestazioni, approcci stocastici come questi sono l'unica risposta realistica alle questioni più ampie, l'IMO. A parte OnLive, cioè se stai prendendo di mira solo gli Stati Uniti.
Ingegnere,

5

Esistono anche molti tipi di hack mirati per i tiratori in prima persona che funzionano anche agganciandosi alle chiamate alla libreria grafica. Hook OGC per Counter-Strike / HL1 aveva una moltitudine di opzioni oltre a rendere trasparenti le pareti.

Se le informazioni sulla posizione per i nemici vengono a un certo punto passate a una libreria di livello inferiore che ha un codice ampiamente disponibile, tali chiamate possono essere agganciate e i dati di posizione, scala, rotazione, ecc. Possono essere utilizzati per calcolare con precisione il vettore migliore per sparare su quel nemico. I sistemi anti-cheat come PunkBuster spesso includono il rilevamento di tipo euristico (quanto spesso questo giocatore ottiene un tiro perfetto, quanto spesso gira intorno a 180 gradi per ottenere un'uccisione con un colpo, ecc.) Oltre al monitoraggio della memoria e del processo.

In definitiva il compito di prevenire gli imbrogli nei giochi multiplayer è un gioco di gatto e topo. Man mano che vengono sviluppati nuovi cheat, vengono creati nuovi metodi anti-cheat e quindi vengono creati nuovi cheat per evitare le nuove tecnologie anti-cheat.

Come ha affermato Tetrad nella sua risposta, le uniche regole rigide e veloci per la "sicurezza del gioco" sono di fornire al cliente il minor numero di informazioni possibile e di fidarsi del cliente il meno possibile. Tuttavia, diversi tipi di giochi avranno requisiti diversi che possono influire sulla capacità di aderire a queste regole.

In un gioco FPS, poiché la velocità di gioco è così elevata, spesso non è possibile fornire al cliente solo i dati che dovrebbe conoscere in questo preciso istante. Se non dici al cliente che c'è un nemico dietro l'angolo e il giocatore va dietro quell'angolo improvvisamente devi inviare loro quell'informazione in pochi millisecondi o rischiare che il giocatore venga ucciso da un nemico che non ha mai visto.

L'unica "correzione" per questi problemi attualmente disponibili sarebbe probabilmente OnLive. Poiché tale servizio fornisce solo contenuti audio e video da un client in esecuzione in sicurezza nel datacenter, l'unico mezzo per imbrogliare sarebbe essenzialmente quello di creare un'intelligenza artificiale umana in grado di analizzare il flusso video in entrata e agire in base a quello, un'attività che pochi, se ce ne sono, gli imbroglioni sono all'altezza.


3

Tutte le risposte sopra sono fantastiche, ma aggiungerò un altro pezzo:

Alcuni giochi hanno una funzionalità di replay molto solida, che consente di salvare il replay di ogni gioco dopo la fine del gioco in un formato compatto e di guardarlo in vari modi: diverse prospettive dei giocatori, UI delle statistiche in tempo reale e così via.

Esempio che conosco molto bene: Starcraft 2. Uno dei modi in cui Blizzard blocca gli hacker è ricevere prove ingannevoli come replay del gioco.

Un esempio da utilizzare in un FPS sarebbe: se giocassi e sospetti che l'altra persona abbia imbrogliato con un hacker a muro, guardi il replay e poi vedi che nella sua normale visione replay, non avrebbe potuto ti ho visto e lanciare una granata dietro l'angolo, o altro.

Quindi lo riferisci con il replay e se le prove contro di lui sono abbastanza buone, è bandito. Per quanto ne so, le aziende che fanno queste cose prendono solo prove serie o più fonti di prove dello stesso comportamento prima di vietare.

Quindi questa non è una tecnica anti-debugging, è un sistema di report degli utenti che consente una prova di truffa assistita dall'uomo.


0

Questa potrebbe non essere una risposta completa, ma ho qualche input qui. Uno dei modi migliori per prevenire gli imbrogli è l'offuscamento o l'uso di C / C ++. Questo impedisce alle persone di modificare il codice client.


Vale la pena ricordare che ci sono molti deobfuscatori là fuori. Anche i giochi .Net (C #, XNA) possono essere modificati usando un Reflection. Da quello che so, immagino che C / C ++ sia davvero un modo per rendere difficile manomettere il codice.
user1306322

Si. Il mio punto è solo che l'offuscamento impedisce che il codice facilmente decompilato sia illeggibile e che C / C ++ non sia facile da compilare, sono entrambe buone opzioni.
LiquidFeline

Inoltre, se aggiorni frequentemente il tuo gioco e modifichi offset binari nell'eseguibile o inserisci NOP casuali, nessun hack sopravviverà abbastanza a lungo ...
SirKnigget

@CPP_Person: In realtà C è abbastanza famoso per essere molto facile da compilare. È una questione totalmente diversa per C ++, che in effetti è un linguaggio abbastanza complesso dal punto di vista dei compilatori. Comunque non capisco, perché dovrebbe importare, quanto sia facile compilare un certo linguaggio di programmazione - vuoi impedire alle persone di scrivere strumenti cheat, non di scrivere un buon compilatore - userebbero comunque un compilatore C ++ esistente - rendendo la decompilazione difficile mi sembra molto più interessante che rendere difficile la compilazione.
Kaiserludi,
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.