Controllo delle variabili utilizzate da un'applicazione

2

Una cosa che ho visto comunemente usata dai truffatori del gioco la controlla per controllare le variabili che il gioco sta usando. L'idea è di modificare le variabili usate dal gioco per dire, dare quelle munizioni auto illimitate. Un esempio di questo tipo di strumento è tsearch .

Non ho idea di come replicare questo attacco da solo, né come si chiama. Mi piacerebbe sapere come funziona e come mitigarlo.

    
posta Aurora 20.01.2015 - 21:50
fonte

3 risposte

2

Generalmente questo è fatto dal reverse engineering del gioco per scoprire dove nella memoria corrente queste variabili vivono all'interno del programma. Ci sono due modi per modificare queste variabili.

Patch del programma Un utente malintenzionato può eseguire il patch dell'eseguibile o della DLL stessa se non sono presenti protezioni di integrità. Fondamentalmente i byte effettivi del programma sono modificati per essere / fare qualcosa di diverso. Finché il programma non verifica che nessun dato sia stato modificato, questa è un'opzione molto valida.

Questo può essere mitigato eseguendo qualche tipo di checksum sull'intero eseguibile. Farebbe un hash crittograficamente strong. Non si vorrebbe usare qualcosa come CRC32 perché con abbastanza modifiche al binario un utente malintenzionato potrebbe far corrispondere i checksum.

Potresti anche firmare il tuo programma. Prima di eseguire il programma verifica la firma del programma. Se ciò non riesce, il programma non viene eseguito.

In memoria patch
Questa tecnica è generalmente un po 'più fastidiosa. Mentre il programma è in esecuzione, un utente malintenzionato inserisce il codice in esso o trova dove si trova nella RAM e applica le patch al programma. L'iniezione di codice è molto più difficile da fare, ma il patching della memoria è quasi lo stesso delle patch regolari. L'utente malintenzionato deve eseguire questa operazione ogni volta che viene eseguito il programma, poiché la RAM verrà cancellata. Questo è molto più difficile da mitigare poiché il programma è già in esecuzione.

Esistono tecniche che è possibile utilizzare per impedire il reverse engineering in generale. Durante le parti del programma che si desidera proteggere è possibile rilevare la presenza di un debugger. Gli ingegneri inversi avranno quasi sicuramente bisogno di usare un debugger per capire esattamente quali piruzioni della memoria influenzano ciò che il programma fa durante l'esecuzione. Manipolare la memoria in un debugger per vedere come è interessato il programma.

Puoi anche usare l'offuscamento del codice per rendere il disassemblaggio o la decompilazione del tuo codice molto più difficile.

Ecco un link divertente in quella direzione generale .

    
risposta data 20.01.2015 - 22:04
fonte
0

In generale, ciò non rientra nella convalida non corretta dell'input non affidabile. Se ci sono dati (il livello di munizioni) che è controllato da un'entità non sicura (l'utente) e questo non è convalidato dall'applicazione (non verifica che la quantità di munizioni non sia stata modificata dall'utente) quindi hai una potenziale vulnerabilità.

Ora, se questa è una vulnerabilità effettiva dipende dal modello di minaccia. Ad esempio, se si tratta di un gioco offline per giocatore singolo, potrebbe non esserlo. Non ti interessa che l'utente possa manipolare il gioco in questo modo. Per un gioco multiplayer online, potrebbe essere una vulnerabilità molto reale. In questo caso, puoi attenuarlo con:

  1. Convalida dell'input dell'utente per assicurarti che non sia stato manomesso o:
  2. Contenendo il valore dietro un limite di trust, ad esempio, impostando e mantenendo il livello corretto di munizioni sul server, senza fare affidamento sui valori del client.
risposta data 20.01.2015 - 22:00
fonte
0

Iniziamo dalle tue domande:

I have no idea how to replicate this attack on my own

Inizia a studiare C e come funziona la memoria del computer, quindi decodifica (almeno le basi)

I would like to learn about how it works

Le variabili che hai detto sono indirizzi , quindi ad esempio: Quando il programmatore dichiara una variabile come HP o Munizioni, rappresenta un indirizzo che memorizza il valore nella memoria del computer (RAM).

Esempio:

La variabile HP in memoria ha il seguente indirizzo 0x7fff9575c05f che memorizza il numero intero 100 (esempio), se hai accesso a quell'indirizzo puoi visualizzare o modificare il contenuto.

Quindi, i software come tsearch possono collegarsi a un PID per analizzare solo gli indirizzi di interesse.

how to mitigate it.

Bene, puoi crittografare tutti i dati che ritieni fondamentali, ma il modo migliore è utilizzare un server esterno per lavorare con questi dati. L'ideologia delle tecniche esistenti è il più difficile possibile da qualsiasi cambiamento, ma nel complesso, se i dati sono sul lato client, non avrai la certezza di integrità.

    
risposta data 20.01.2015 - 22:27
fonte

Leggi altre domande sui tag