Come posso evitare cheat di modifica della memoria?


10

Oggi ci sono molti programmi che alterano la memoria ( Cheat Engine & co). Esiste un modo efficace per mantenere una variabile costante effettivamente costante?

Ho avuto due idee:

  1. Crea un thread separato aggiornando la variabile costante su un valore costante, ad es. 200 ogni minuto. Problema: si può anche modificare il secondo valore.
  2. Memorizzare il valore sul server. Problema: voglio mantenere il traffico di rete il più basso possibile.

Ho bisogno che questo meccanismo sia per costanti che per variabili consenta solo di contenere un certo intervallo di valori.

Ci sono modi migliori per farlo?


1
Nessuno di questi funzionerà. Nella prima situazione, l'imbroglione deve semplicemente sovrascrivere il valore '200' che si sta copiando e non è più difficile che sovrascrivere l'originale. Nella situazione 2, il cheater ora può cambiare il valore senza nemmeno alterare il programma semplicemente cambiando i byte ricevuti sulla rete (ad esempio, con un proxy locale)
Jimmy

6
Devo ancora vedere una protezione cheat che non può essere disabilitata da un hacker. Assicurati solo di non rendere il gioco un incubo vivente per utenti legittimi, nella tua crociata contro gli imbroglioni :)

1
Relazionato ; più specifico, ma per il resto uguale.
Anko,

1
La maggior parte dei giochi ha "Allenatori". Voglio dire, diavolo, anche Mass Effect: Andromeda ha un allenatore ed è uscito da poco più di una settimana. Dico che non ti preoccupare nemmeno. Se le principali compagnie di giochi non possono evitarlo, cosa ti fa pensare di avere una possibilità?
Krythic,

Risposte:


21

Se il tuo gioco è singleplayer: non è possibile, ma non dovresti preoccupartene .

Se il tuo gioco è multiplayer: allora dovresti memorizzare tutto il tuo stato importante sul server, che è molto più difficile da hackerare di un computer locale.


4
È molto facile proteggersi dai cheat multiplayer creando un server autorevole e predicendo solo lo stato sul lato client. Fondamentalmente, basta inviare l'input del giocatore dal client al server, non "Ho xdanneggiato y".
Jmegaffin,

In effetti @BorealGames, questo è ciò che intendo per "memorizzare tutti gli stati importanti sul server".
jcora,

Volevo solo chiarire un po ':)
Jmegaffin

11

Non si può fare , https://security.stackexchange.com/a/4639 riguarda DRM, ma lo stesso vale per tutto ciò che l'utente non desidera sul suo computer, inclusi i meccanismi anti-cheat. (Che ha la tendenza ad essere ancora più difficile da fare rispetto al DRM.)

Ma perché dovresti, davvero perché dovresti? È il computer dei tuoi clienti, non il tuo, il cliente fa con il suo computer qualunque cosa gli piaccia fare. Non hai diritti al riguardo. Il programma viene rimosso se al cliente non piace.

Per i giochi multiplayer non si tratta di progettare il binario in esecuzione, ma di progettare la comunicazione. Consentire agli utenti di inviare "Ho vinto con 20000 punti" non funziona, né "Ho 2000 oro" . Dovrai simulare il gioco da solo e lasciare che i giocatori inviino ciò che stanno facendo come "Ho ordinato al soldato di spostarsi al punto X / Y" o "Ho comprato l'oggetto numero 43" , non il risultato di ciò le azioni sono. Il server decide quali sono i risultati e chi ha vinto alla fine.

Se si tratta di una partita a giocatore singolo con punteggio elevato online, un'opzione sarebbe quella di farti inviare un replay al giocatore, simularlo e decidere il risultato da quello.


11
Piccolo suggerimento per la correzione: il cliente non deve inviare "Ho acquistato il numero dell'articolo 43" ma invece "Voglio acquistare il numero articolo 43". Il server dovrebbe quindi rispondere con "OK, perdi 200 GP, ottieni un Item43", "No, non hai abbastanza oro" o "No, il negozio che stai visitando non ha un numero articolo 43". Il server dovrebbe comportarsi come il maestro di gioco di un gioco di ruolo con carta e penna. I giocatori dicono cosa vogliono fare e il server dice loro se hanno successo.
Philipp,

Inoltre non sono sicuro di alterare la memoria in uso di un personal computer, ma alterare il file binario di un gioco stesso (anche se è sul tuo computer) è di solito contro l'EULA e potrebbe essere ulteriormente definito nelle leggi sul copyright ecc.
lozzajp

Non che violare un EULA, l'equivalente digitale del jaywalking, non abbia mai fermato nessuno.
jkmartindale,

3

Il primo non è efficace e non impedirà ad alcuna persona determinata di attaccare il tuo gioco - ed è anche soggetto a errori. Tuttavia, puoi renderlo molto più duro , non una prova completa , se lo desideri. Alcune strategie comuni sono disponibili in tutto il Web ma, come altri hanno già detto, devi chiederti se ne vale la pena.

Per amor di argomenti, ecco un paio di modi per prevenire l'hacking in un ambiente a giocatore singolo:

  1. Apri un handle per ogni altro processo sulla macchina degli utenti (invasivo e non portatile) e sovrascrivi la loro WriteProcessMemory con una funzione fittizia o un avviso. La scelta è tua. Questo può essere sconfitto perché ... le applicazioni sono libere di fare lo stesso e sovrascrivere nuovamente l'handle o fare cose per impedirlo.
  2. Esegui il checksum della tua applicazione e fai in modo che si verifichi tramite uno scudo anti-hacking: questo è utile per molte modifiche permanenti alla tua applicazione, ma non fermerà un comune attacco di memoria. Questo può essere sconfitto perché ... strumenti come ADA, OllyDbg e persino semplici modifiche esadecimali possono apportare patch permanenti e modifiche alla tua applicazione per rimuovere il codice offensivo - questo include l'idea del timer threaded!
  3. Cerca strumenti di hacking noti. Anche questo può essere sconfitto ricompilando uno strumento o attaccando direttamente il tuo client. Questo può essere sconfitto perché ... una ricompilazione, la ridenominazione dell'applicazione o la modifica di ciò che lo scanner utilizza come euristico renderà questo inutile. Prendi in considerazione l'utilizzo di una parte speciale della memoria che un'applicazione è nota se scegli questa opzione.

L'alternativa, ovviamente, è semplicemente archiviare tutto sul server e creare un server di gioco che sia un maestro. Non solo è costoso, richiede manutenzione e aumenta i tempi di sviluppo ... i fan non sono così colpiti dall'implementazione di giochi popolari come Diablo III . O qui. Dovrei notare che per un gioco di ruolo flash online come Adventure Quest questo modello ha funzionato abbastanza bene per loro, tuttavia.

Non posso fornire molte indicazioni su come implementare questo tipo di approccio in quanto è molto ampio, ampio e richiede molta pianificazione. La base da sapere è che il server decide tutto e il client non è altro che una semplice console di input e display.


3

Molte persone usano questi programmi per cercare un punteggio memorizzato in una variabile, ad es

int score = 10;

per fare ciò hanno bisogno di conoscere il punteggio, usualmente dal punteggio visualizzato nel gioco.

Stavo pensando, questo aiuto li avrebbe rimandati ...

public static float randomVal; // at start of level generate random float

private float 1a3sf5vhh4; //represents score

void hjgkkj4(int val) //add score method
{
   var 5vhh4 =  1a3sf5vhh4/randomVal+val;
   1a3sf5vhh4 =  5vhh4*randomVal;
}

quindi quando è necessario visualizzare il punteggio fare ...

string displayScore = ""+ 1a3sf5vhh4/randomVal;

questo farà cercare agli imbroglioni quello che pensano sia il punteggio (il punteggio visualizzato) in modo da trovare solo il valore visualizzato.

Il punteggio reale sarà Punteggio * randomVal memorizzato altrove. Non possono cambiare il punteggio cambiando il valore visualizzato.

questo sarebbe d'aiuto?

ps non sono un esperto quindi rilassati con me lol.


Ho appena trovato questo video, fa alcuni punti interessanti ... youtube.com/watch?v=G25YhoE04Xc
Raimi,

Gli strumenti cheat possono essere configurati per rilevare anche queste cose. Questo richiede solo più tempo per tracciare.
Kromster,

ma per un gioco piccolo, offline, per giocatore singolo, qualcosa del genere sarebbe una soluzione ok? sembra che potrebbe almeno fermare alcune delle app là fuori
Raimi,

Sì, è solo il caso di EffortSpent vs ProtectionAchieved, in cui la seconda parte non può mai raggiungere il 100%.
Kromster,

1
Neanche i nomi casuali nel codice sorgente, almeno nella maggior parte dei casi. Il programma è di solito compilato in IL / bytecode o direttamente in binario ecc.
lozzajp,

2

Per quanto riguarda le partite a giocatore singolo , non puoi evitare di imbrogliare e non dovresti .


Perché non posso evitare di imbrogliare nel mio gioco?

Come hanno indicato altre risposte, anche i migliori sforzi potrebbero essere potenzialmente circumnavigati da un singolo hacker e forniti al resto della tua base di giocatori. Puoi ancora fare sforzi contro questo, ma cerca altre risposte per suggerimenti su come . Questa risposta significa salvarti il ​​problema, se il tuo gioco mira solo a fornire un gameplay per giocatore singolo.

Perché dovrei permettere ai giocatori di imbrogliare in una partita a giocatore singolo?

Per citare Sam ,

Dedica più tempo alla creazione di un grande gioco e meno tempo a impedire ai deficienti di rovinare il loro divertimento - semplice.

Questo non coglie il punto del tutto . I giochi sono una forma di intrattenimento . In generale, la tua base di giocatori sta giocando per divertirti . Se un giocatore usa cheat nel tuo gioco, c'è una ragione per cui sta usando cheat. È sicuro supporre che non possiamo garantire la definizione di divertimento di ogni singolo giocatore; se usano trucchi , forse questo è il loro modo di rendere il tuo gioco più piacevole, per loro.

In che modo imbrogliare rende un gioco più divertente?

Mentre ogni individuo è unico, ci sono alcune condizioni in cui i trucchi potrebbero rendere un gioco più divertente, dalla cima della mia testa:

  • Il gioco è un po 'lento e il giocatore desidera usare i trucchi per mettere in evidenza l'azione prima che vengano rimandati, completamente.
  • Il giocatore non è in grado di superare una certa sfida; non tradirebbero normalmente, ma sono vicini a arrendersi, frustrati. Possono smettere di giocare o possono usare un trucco per aggirare l'ostacolo e continuare a giocare nella seconda metà del gioco.
  • Il giocatore non può dedicare il tempo necessario al gioco per l'esperienza prevista. Applicando i trucchi, l'utente può ottenere un "inizio di corsa" ed essere in grado di godere del contenuto previsto del gioco. Se ritieni che ciò non sembri plausibile, considera che questa è la ragione per cui ho giocato personalmente molto poco a Fallout 4. In confronto, è l'unico gioco che ho preordinato negli ultimi 5 anni e l'unico gioco che abbia mai preordinato e acquistato per più di una piattaforma. Adoro il gioco; Non ho tempo per questo.
  • Il tuo gioco ha un bug e questo impedisce al giocatore di avanzare ulteriormente. Un imbroglio aggira il bug, quindi il giocatore può continuare a giocare. I recenti giochi di Elder Scrolls sono noti per questa situazione .

Perché questo si applica solo ai giochi per giocatore singolo?

È importante sottolineare che questo funziona solo nei giochi per giocatore singolo ; se il giocatore ti dice che vogliono usare i cheat per divertirsi di più nel loro gioco, non c'è niente di male. Non appena ci sono più giocatori nel gioco, gli exploit di quel primo giocatore potrebbero diventare uno svantaggio ingiusto per gli altri giocatori. Questa è l'unica vera situazione in cui non dovresti permettere di imbrogliare.


0

Cosa fa uno strumento di hacking della memoria?

Esistono due modi per utilizzare lo strumento di hacking.

  1. Accetta un indirizzo noto in cui sono memorizzate le variabili del giocatore.
  2. Inserite le modifiche nella variabile e scansiona la memoria per le modifiche.

Cosa puoi fare al riguardo?

  1. È possibile utilizzare le variabili allocate dinamicamente per memorizzare le variabili del lettore in modo che l'indirizzo continui a cambiare all'avvio. Non ci sarà alcun indirizzo fisso che un sito web cheat potrebbe elencare.

  2. Crittografa le variabili del giocatore: ridimensiona il valore, aggiungi una costante, ecc. Questo porta un nuovo problema: un hacker hardcore potrebbe disassemblare il tuo programma e trovare i numeri che usi per crittografare le variabili del tuo giocatore. Per questo, usa numeri casuali. Puoi anche aumentare i valori delle variabili del tuo giocatore e quindi aggiungere un numero casuale in modo tale che il numero aggiunto non modifichi in modo significativo il valore (l'aggiunta di 10 o 20 a un valore in scala di 2000 non fa molta differenza).

Certo, alcuni hacker seri possono ancora trovare il modo di superare questi ostacoli, ma non sarà facile.

  std::default_random_engine myRNG;
  std::uniform_int_distribution<int> myDist_padding(10,100);
  class Player
  {
      public:
          Player()
          {
              Health = new float;
              Armor = new float;

              std::uniform_int_distribution<int> myDist_scale(1000,10000);
              scale = myDist_scale(myRNG);
          }
          float GetPlayerHealth() const;
          void SetPlayerHealth(float health);
      private:
          float *Health;
          float *Armor;
          int scale, constant;
  }

  //wrappers for Set/GetPlayerHealth
  void Player::SetPlayerHealth(float health)
  { 
      this->Health = health * scale + constant + myDist_padding(myRNG);     //random padding; adding 10 or 100 to a number that is scaled up by 1000 will cause an increase in 1%
      //1% of error is ok I guess?
  }
  int Player::GetPlayerHealth() const
  {
      return (this->Health - constant)/scale;
  }

Mentre il codice sopra risolve alcuni problemi gravi, è ancora crackabile. Le uniche informazioni di cui ha bisogno l'hacker sono: le variabili del giocatore sono accessibili tramite un puntatore (potrebbe anche scoprirlo smontando il gioco, ma sarà fastidioso e difficile). Una volta che l'hacker ha l'indirizzo alle variabili del tuo giocatore insieme ad altre variabili casuali segrete, sarà un compito facile per lui sviluppare un trucco.

Secondo me, senza disassemblare, non puoi davvero scrivere uno strumento di hacking per un tale sistema. Il risultato è imprevedibile poiché aggiungerai un numero casuale alle variabili del giocatore ogni volta che viene modificato. L'intervallo in cui sono memorizzate le variabili del lettore non è lo stesso su ogni avvio.

Cosa si può fare di più?

Continua a cambiare l'indirizzo delle variabili del giocatore occasionalmente. Ostacola la leggibilità del codice? Bene, lo fa in una certa misura, ma puoi astrarre l'intero processo in una singola classe che ha commenti ben spiegati. L'interfaccia fornita dalla classe avrà semplici funzioni Set / Get. Il programmatore frontend non dovrebbe preoccuparsi della complessità sottostante.


0

Economia:

Se vuoi rafforzare il tuo gioco contro gli imbroglioni, il modo migliore è acquistare una soluzione software che lo faccia per te. Esistono diversi provider e puoi trovarne molti cercandoti su "anti cheat break my game" .

I professionisti sono molto più bravi a prevenire i cheat di te, e molto meglio a non infrangere il tuo gioco di te (e non riescono ancora al 100% in nessuno dei due). Quindi, se ritieni che ci sia un valore nel mettere una soluzione del genere nel tuo gioco, acquistalo. Fare il tuo sarà molto più costoso.

Una domanda correlata è "esiste un valore nell'uso del software anti cheat?". La risposta è: a meno che una parte decente del tuo gioco non si basi su una modalità competitiva online.


0

L'unico modo per proteggere il tuo gioco dal modding e dalla modifica della memoria è renderlo solo ONLINE ed elaborare valori vitali sul lato server .

Forse puoi crittografare i valori in modo che le modifiche alla memoria dei principianti non li raggiungano, ma tutte le comunità, come Cheat Engine , GameGuarian per Android, ArtMoney, Game Hacker hanno persone che saranno in grado di hackerare qualsiasi cosa tu elabori client- lato e mostra agli altri come farlo o pubblicare formatori.

Secondo me, è uno sforzo inutile cercare di scoraggiare gli imbroglioni dal lato furbo. Inoltre, non è giusto, dal momento che è il loro dispositivo e se vogliono memorizzare cose che accadono sul loro dispositivo, perché dovresti ostacolarli? Dopotutto il cliente è re.


0

Voglio dire, non è così difficile. Puoi mantenere il 99% dei cheat di modifica della memoria (quelli di Game Guardian , cheat di Cheat Engine ecc. Per semplici valori moltiplicativi. Anche moltiplicare per 10 nella memoria manterrà la maggior parte degli svantaggi).

Ricordo che molti giochi in flash nel corso della giornata si sarebbero moltiplicati per 8 o 6. O se sei davvero serio, codifica alcuni controlli o crittografa i valori in memoria.


-2

Non puoi - ripeto che non puoi. Non esiste una risposta a questa domanda che non può essere annullata da un buon hacker.

Ma - e allora? Se qualcuno vuole imbrogliare al tuo gioco (supponendo che non ci siano perdite monetarie o risultati), a chi importa? Si truffano solo.

Dedica più tempo alla creazione di un grande gioco e meno tempo a impedire ai deficienti di rovinare il loro divertimento - semplice.


Il voto negativo, credo che il divertimento svolga un ruolo importante in questa risposta, ma è del tutto mancato . Invece di ulteriori spiegazioni, sto presentando una risposta alternativa.
Gnemlock,

-3

Cripta l'inferno! Memorizza i numeri importanti suddivisi in più posizioni insieme ad altri valori in modo che cambino costantemente! Usa numeri fittizi che, se modificati, dicono loro che sono imbroglioni.

Tutto può essere risolto, ma la maggior parte non si prenderà il tempo per farlo.


4
... e quindi il tuo codice sorgente sarà un pasticcio illeggibile e non realizzabile. Buona fortuna a trovare un bug o apportare un cambiamento di equilibrio senza far esplodere il tutto.
Philipp,

Se dovessi implementare questa forma di prevenzione degli imbrogli, sarei sinceramente deluso se gli hacker prendessero il mio piano malvagio e rinunciassero. Ciò significherebbe che non ho perso altro tempo se non il mio.
Marcks Thomas,

@MarcksThomas Beh, se gli hacker si arrendono, non perderai tempo. Quello era l'obiettivo, dopo tutto, vero?
Dan

Non sono pienamente d'accordo con te su questo @Philipp - ci sono modi per mantenere chiaro il codice sorgente, ma mescolare il codice di produzione quando esce. In pratica ciò comporta la crittografia e alcuni mambojambo numerici e soprattutto di temporizzazione e threading :-). Testiamo con il codice sorgente inalterato e se c'è un errore nel codice di produzione, lo lasciamo brutalmente bloccarsi (con un piccolo ritardo, solo per essere malvagi :-)). Una piccola modifica da qualche parte causa anche questo.
Stormwind,

Tuttavia, ho valutato questa come la migliore risposta in questa catena, ma mi sembra di averlo già fatto. Ci sono molte regole matematiche da usare, che sarà impossibile decodificare solo a causa della complessità e soprattutto dei tempi. Ad esempio, si può contrassegnare l'applicazione per l'arresto anomalo ritardato o lasciare che la sensibilità di essa diverga in uno stato inutile (non riproducibile). Naturalmente devi essere una buona ragione per questo.
Stormwind

-4

Il modo in cui lo gestisco nei giochi online è questo.

Non aiuterò gli hacker a sopportare così tanto con me. Non menzionerò alcun programma che utilizzo per farlo. Dovrai capirlo. L'unico modo per fermarli veramente è sapere una cosa. Non vogliono che il loro programma di hacking venga rilevato.

Finora, tutti gli utenti di hacker / trainer che ho sconfitto. Lo sviluppatore dell'hacking metterà un rilevatore su di esso per vedere se qualcosa sta guardando. Se c'è qualcosa, allora il programma hacker / trainer si chiuderà automaticamente alla fine o funzionerà solo a metà.

Ad esempio in dirt 3, gli utenti di trainer possono effettuare automaticamente la rotazione della tua auto. Ma se metti un rivelatore alla tua estremità, il proprio rilevatore di cheat lo rileverà e chiuderà parte del cheat. Non tutto.

L'unica parte del programma di allenamento che ho visto influenzare dalla mia ingerenza sono i super freni (frenata perfetta) e lo spinout (auto che perde il controllo senza motivo). Ho principalmente giochi di corse come puoi vedere. Provengono tutti da programmatori di codici e purtroppo quei giochi vengono abusati abbastanza spesso dagli imbroglioni.

Credo di essere in grado di fermarli solo a causa del modo in cui ci colleghiamo l'un l'altro mentre suoniamo. È probabilmente la stessa ragione per cui potrebbero causare uno spinout per un giocatore normale che non ha idea della sicurezza.

Il mio più grande suggerimento è di ottenere un ottimo antivirus per la sicurezza di Internet (Norton, Mcafee, Avast e tutti gli altri av di merda non ti aiuteranno). Sii disposto a spendere da $ 50 a $ 90 in un ottimo av che non ho elencato e poi impara come sperimentarlo per effettuare il gioco online.

Ci vuole molta pazienza e molte cavie. Ho avuto molto successo con questo, ma anche molti anni di esperienza nel trattare con gli utenti di trainer. Non conosco nessun codice. Non c'entra niente. La parte del codice è bloccata e non puoi farci nulla. Potresti pensare di poterlo fare, ma non è proprio possibile fermare ciò che stanno facendo.

Puoi ancora vietarli con cose come VAC perché Vac rileva firme e determinati comportamenti e modifiche di file che già conosce. Vieta solo l'account associato al cheat.

In realtà non fermano il trucco. Non possono preoccuparsene. Hanno semplicemente vietato il tuo account. L'altra cosa che vorrei menzionare ha a che fare con Wolfenstein ET. Un gioco molto vecchio. Ma per me aveva la misura di sicurezza migliore e più dura di tutte.

Non ho mai visto come hanno fatto. Ho dato loro l'idea di ciò che avrebbe effettivamente fermato gli imbroglioni e ho suggerito a uno dei devolopers di Jaymod di vietare tramite guid. Che cosa ha una guida facilmente accessibile quando si gioca? Schede grafiche. Il motivo per cui lo hanno implementato è perché le persone cambiano semplicemente gli indirizzi IP e non hai bisogno di un account per il gioco, quindi puoi semplicemente cambiare il tuo nome, il tuo indirizzo mac che cambierebbe anche il tuo indirizzo IP.

Ma quando hanno fatto i divieti della scheda grafica. Se volevi giocare di nuovo, dovevi RMA la tua carta o acquistarne una nuova. Questo è fuori tema però. Si suppone che questo riguardi il rilevamento e sono andato su una tangente. Purtroppo adesso non gioco più tanto. Ma amico, ho adorato tutti i miei maiali. Soprattutto quelli delle auto del progetto. L'unico gioco di corse che non era programmatore di codici. Ma ancora effettuato dalla stessa assurdità.


Vedo diversi problemi con questa risposta. 1. Formato. È difficile da leggere a causa della struttura e, a causa dell'incoerenza grammaticale, ci sono parti in cui non riesco a capire cosa intendi dire. 2. Sembra che parli molto dell'argomento quando un giocatore gioca contro altri imbroglioni . Ciò sarebbe rilevante su Arqade , ma ci preoccupiamo di più sviluppo del gioco . 3. Dici "non usare quelli che ho citato" per quanto riguarda l'antivirus. Tu dici "Norton, mcafe, avast e tutti quelli di merda . Questo non ci dice cosa usare , specialmente quando chiami alcuni dei più alti.
Gnemlock

L'intera metà sembra essere un aneddoto su come pensi che una società di videogiochi abbia preso il tuo consiglio (credo che tu faccia lo sforzo di dire che non sei sicuro di come sia stato fatto, quindi interpreto che la tua ulteriore spiegazione di come deve essere fatta basarsi sulla speculazione , non sui fatti).
Gnemlock,
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.