Come vengono creati gli hack dei client? [chiuso]

0

Molti giochi oggi sono prerelocati in uno stato alfa / beta e vengono immediatamente sopraffatti dagli "hacker" che scaricano programmi che manipolano il gioco stesso per diventare sopraffatti.

Credo che facciano iniezioni in determinati indirizzi di memoria in runtime, ma non ho idea di come procedere per creare un programma come quello. Inoltre, come lo impedisci?

Qualunque suggerimento su come lo fanno è molto appagato.

Più dettagli, meglio è!

    
posta OHMR 15.02.2014 - 00:06
fonte

2 risposte

8

La tua domanda è molto ampia. Posso raccontarti di come I abbiamo fatto in un'istanza, per divertimento, in un piccolo gioco arcade diversi anni fa. Questo dovrebbe farti guadagnare qualche intuizione educativa, ma non ti aiuterà molto altrimenti, temo.

Ho semplicemente avuto un altro programma in esecuzione in background, mirando alla memoria del gioco arcade.

Ho iniziato a giocare, e poi ho perso una vita. Premi entrambi i tasti Maiusc e un'istantanea della memoria è stata salvata sul disco all'insaputa della sala giochi in esecuzione. Poi un altro BAM un'altra istantanea. Un terzo e un quarto. E poi game over e sono uscito dal gioco arcade.

Poi ho appena confrontato le istantanee, cercando una locazione di memoria che è cambiata da un'istantanea alla successiva, aumentando o diminuendo di una sola. Ricordo di averne trovato una ventina. Avrei potuto controllare tutti loro, ma ho notato immediatamente che uno di loro, e solo uno, aveva valore "cinque" all'inizio del gioco, e divenne "quattro" alla mia prima morte. E avevo iniziato con cinque navi. Ora è interessante ...

Così ho scritto un piccolo programma che cercava quell'indirizzo di memoria, riconoscendolo dalla sua distanza da altri pezzi di codice e stringhe che non cambiavano, controllandone il valore ogni pochi secondi, e basta rimandare indietro "5" non appena è diventato qualcosa di meno:

: install
    look for string 'COPYRIGHT ACME GAMES'
    add 1138
    is it a five?
    no, abort, something went wrong
    yes. lie in wait.
: wait
    is it still a five?
    no. Set it to five.
    sleep for a couple of seconds
    goto wait

Certamente, alla prossima partita, sono morto - e un istante dopo, le mie quattro astronavi rimanenti sono diventate nuovamente cinque. Per quanto mi riguarda, ho scoperto che potevo ottenere fino a sette "vite" con questo metodo (otto si sono schiantati nel gioco).

Usando un "debugger" sarebbe stato anche possibile fermare il programma non appena la posizione è stata modificata, quindi vedere quale istruzione aveva fatto l'atto. Quindi cancelleresti quella singola istruzione dal codice assemblatore. Oppure puoi seguire il flusso del programma al contrario e scoprire dove, ad esempio, è stato effettuato il controllo della collisione tra lo sprite del tuo giocatore e i missili nemici. Contrastare quell'assegno ei missili nemici non ti riguardano più (forse anche i tuoi non li influenzano, è un affare complicato).

Mi aspetto che le tecniche siano maturate e progredite molto in questi anni, ma sono sicuro che sostanzialmente l'idea è sempre la stessa: individuare il cambiamento che non ti piace, o defang il codice che lo causa, o patch il codice in modo che il danno sia annullato non appena si verifica.

Per rendere le cose più difficili si potrebbero escogitare strategie per rendere meno rilevanti le modifiche o renderle apparentemente casuali. Aggiungi variabili "chaff" o "dummy" che cambiano proprio come se fossero utili. Usali come telltales: se tutte le variabili non coincidono, significa che qualcuno sta cercando di hackerare.

Alla fine, comunque, non puoi battere un hacker determinato ed esperto. Tutto quello che puoi fare è provare a fare in modo che l'azione non ne valga la pena. Ci sono gli offuscatori di codice, i protettori di codice, i crittografi di codice, i rilevatori di debugger, le tecniche di anti-virtualizzazione ...

    
risposta data 15.02.2014 - 00:42
fonte
3

Esistono diversi vettori di attacco per un gioco online.

Automazione

Alcuni giochi, specialmente dallo spettro MMORPG più orientato alla macinatura, hanno metodi di avanzamento estremamente semplici. Tutto ciò che il giocatore deve fare è premere la stessa sequenza di pulsanti o fare lo stesso clic del mouse più e più volte. Tale meccanica di gioco è un invito per un'automazione che utilizza un semplice programma macro che emula l'input da tastiera e mouse.

Ma nella maggior parte dei giochi, il giocatore deve prestare almeno un po 'di attenzione. Ciò significa che il programma makro deve sapere cosa sta realmente accadendo nel gioco. Questo può essere fatto esaminando la memoria dell'applicazione client (Iserni ha già coperto questo aspetto nella sua risposta) o esaminando il netcode.

Reverse engineering the netcode

Il client e il server di giochi comunicano tra loro inviando e ricevendo messaggi di rete. Esistono programmi come Wireshark che possono essere utilizzati per monitorare questa attività di rete. Quando puoi monitorare quell'attività, questo ti dà l'input leggibile elettronicamente per la tua macro.

Ma potrebbe anche darti informazioni che il giocatore non dovrebbe nemmeno avere. I server della maggior parte degli sparatutto in prima persona, ad esempio, raccontano al cliente le posizioni di tutti gli altri giocatori e poi si affidano al client per rendere solo quelli che sono effettivamente visibili al giocatore. Quando l'hacker trova un modo per visualizzare queste informazioni al giocatore, questo può dare loro un grande vantaggio.

Gli strumenti che possono leggere il traffico di rete spesso consentono anche di iniettare messaggi nel flusso di dati della rete. Questo può anche essere usato come una forma avanzata di automatizzazione.

Hacking del client

Fino ad ora usavamo solo mezzi esterni e non toccavamo il cliente. Ma può essere molto più comodo per il giocatore mettere l'automazione e la divulgazione di informazioni direttamente nel software client in modo che sia meglio integrato nel gioco. Gli eseguibili di hacking sono un campo molto ampio e complesso. Le persone hanno scritto interi libri sull'argomento.

Ma fondamentalmente si riduce alla ricerca di punti nel programma in cui il flusso di esecuzione salta da una sezione di codice a un'altra. L'hacker modificherebbe questa istruzione di salto in modo che non salti dove dovrebbero saltare, ma salta invece nel codice del programma degli hacker. Dopo che il codice degli hacker è stato eseguito, il flusso di programma torna indietro nel codice di gioco originale e continua come se nulla fosse accaduto.

Scrivi il tuo cliente

La modifica di un eseguibile compilato senza accesso al codice sorgente originale è un modo molto complicato e scomodo per lo sviluppo di software. Quando vuoi sviluppare funzionalità più complesse, potrebbe essere più facile iniziare da zero e sviluppare solo il tuo client di gioco.

Quindi l'hacker scriverà un nuovo programma che implementa il protocollo di rete del gioco. Quando quel programma comunica con il server nello stesso modo in cui lo fa il client originale, non c'è modo per il server di rilevarlo. Il cliente hacker ovviamente non si concentrerà molto su un'esperienza di gioco immersiva ma solo sulla massimizzazione del successo del giocatore visualizzando tutte le informazioni disponibili e automatizzando tutto ciò che richiede abilità (o è solo noioso).

    
risposta data 17.02.2014 - 15:27
fonte

Leggi altre domande sui tag