Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Reti e LAN - Sicurezza e packet sniffer
Forum - Reti e LAN - Sicurezza e packet sniffer

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 7:13
Venerdì, 03/06/2011
Salve,
ultimamente mi è venuto un dubbio sulla sicurezza dei giochi multiplayer.
Vi espongo il quesito:
Poniamo che avvio un packet sniffer e apro un videogioco, faccio una partita che mi fa scalare nel rank di X posizioni. Se guardo il log dello sniffer noterò di sicuro una il pacchetto mandato al server del gioco per indicare che ho fatto quel punteggio e che quindi il mio rank deve essere aumentato.
Molto probabilmente il pacchetto sarà criptato però una cosa non mi torna:

Una persona potrebbe benissimo rimandare tale e quale quel pacchetto anche se criptato al server e di consueguenza dovrebbe aumentare il rank di X posizioni...

Il mio ragionamento è sbagliato? (spero :rotfl: )Se si perchè?
E poi come é possibile rendere sicuro un punteggio online come in questo esempio?


p.s. Non è una domanda lamerona è solo che sto facendo un mini gioco/prova con rank online e vorrei capire come renderlo sicuro.

Ultima modifica effettuata da XBarboX il 03/06/2011 alle 7:13
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 8:45
Venerdì, 03/06/2011
quello che hai detto è verissimo.
peccato che un gioco online, se ben fatto, non lascia NULLA da calcolare/controllare al client, fa tutto lato server.
quando si sviluppa un gioco online bisogna tener presente che il client potrebbe essere TOTALMENTE compromesso, il giocatore potrebbe usare cheat, hax e trainers.
Tutti controlli sull'exp, livello e quant'altro vanno assolutamente calcolati sul server!

PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 11:59
Venerdì, 03/06/2011
Ma se ad esempio voglio fare un gioco di macchine il tempo usato per finire il circuito lo deve calcolare il client. Come si fa in questo caso?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 13:17
Venerdì, 03/06/2011
Testo quotato

Postato originariamente da XBarboX:

Ma se ad esempio voglio fare un gioco di macchine il tempo usato per finire il circuito lo deve calcolare il client. Come si fa in questo caso?



si fa che i client mandano le azioni che compiono gli utenti al server. Quest'ultimo simula la gara con tutti i partecipanti ed invia ai client la posizione della macchina con i tre vettori velocità (x y z).

In questo modo è impossibile barare per un client, in quanto quello che il server vuole sono le AZIONI che compie il giocatore e non il loro risultato. Il server ovviamente deve farsi carico della simulazione, il che è pesante dal punto di vista computazionale, ma è l'unico modo per sconfiggere i cheat :)

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 15:55
Venerdì, 03/06/2011
HeDo quello che hai detto è vero, ma se io mando al server pacchetti con azioni diverse da quelle che effettivamente eseguo?
Metti, ad esempio, che per la velocità uso un tasto (X), e che il client mandi un pacchetto con la velocità che l'utente imprime.
Se io modifico questo pacchetto il gioco è fatto.

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 17:22
Venerdì, 03/06/2011
Testo quotato

Postato originariamente da Qwertj:

HeDo quello che hai detto è vero, ma se io mando al server pacchetti con azioni diverse da quelle che effettivamente eseguo?
Metti, ad esempio, che per la velocità uso un tasto (X), e che il client mandi un pacchetto con la velocità che l'utente imprime.
Se io modifico questo pacchetto il gioco è fatto.



niente, non hai ancora capito :)
al server il client manda un pacchetto in cui dice "sto accelerando per X millisecondi", il server fa il calcolo data la velocità della macchina e la sua potenza di quanto sta effettivamente accelerando, ricava la sua velocità finale e la manda al client che la renderizzerà all'utente.

PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 18:33
Venerdì, 03/06/2011
e se ad esempio manda al server sto accelerando di X m/s^2 per T secondi ?
Ovviamente si potrebbe modificare il pacchetto però bisognerebbe intuire come è criptato il pacchetto.

Insomma ho capito che per il multiplayer i cheater sono una brutta razza XD

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 18:40
Venerdì, 03/06/2011
Testo quotato

Postato originariamente da HeDo:
niente, non hai ancora capito :)
al server il client manda un pacchetto in cui dice "sto accelerando per X millisecondi", il server fa il calcolo data la velocità della macchina e la sua potenza di quanto sta effettivamente accelerando, ricava la sua velocità finale e la manda al client che la renderizzerà all'utente.


Ecco, e se io modifico x millisecondi? Stessa roba

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 19:15
Venerdì, 03/06/2011
Testo quotato

Postato originariamente da Qwertj:

Ecco, e se io modifico x millisecondi? Stessa roba



assolutamente no, perchè il server è in realtime con il client :)
in realtà non mandi un intervallo di tempo tipo 100ms, ma mandi il timestamp iniziale e finale di quando premi e rilasci l'acceleratore!

purtroppo voi non avete presente come funziona il netcode di un gioco multiplayer realtime, vi darò alcuni lumi:

Il problema principale di un motore di questo tipo è la sincronizzazione tra i client, a causa del delay della connessione alcuni client possono vedere prima o dopo di altri l'aggiornamento dello stato del mondo.

il server manda ad ogni client un treno di snapshots in cui è presente l'aggiornamento del mondo. Questi snaps sono distanziati da un delay fisso che da la frequenza di aggiornamento e quindi la qualità del realtime.
Ogni client invia un pacchetto che contiene le azioni da lui intraprese dalla ricezione dell'ultimo snapshot, il server riceve le azioni del client, modifica lo stato del mondo e nello snapshot successivo aggiorna gli altri client.

Il problema che sollevate voi in realtà non esiste, o meglio, esiste se non si usa un po di criterio :)
I pacchetti che manda il client contengono le azioni e il timespan in cui si sono verificate, questo intervallo di tempo è trasmesso come coppia di timestamp riferiti al tempo assoluto del server.
Se un client prova a modificare questo timespan per avere un qualche vantaggio il server semplicemente scarta il pacchetto perchè si accorge se i timestamp non sono compresi tra l'ultimo snapshot inviato e il tempo corrente.

spero di aver reso l'idea, purtroppo il netcode di un gioco online che ha la pretesa di essere multiplayer e realtime è molto complesso, quello che ho scritto io è la base della base :)

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo