Cheat Engine

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Cheat Engine è un programma utile per trovare dove sono salvati i valori importanti all'interno della memoria di un gioco in esecuzione e modificarli. Quando lo scarichi ed esegui, ti viene presentato un tutorial su come utilizzare lo strumento. Se vuoi imparare ad usare lo strumento, è altamente consigliato completarlo.

Cosa stai cercando?

Questo strumento è molto utile per trovare dove è memorizzato un valore (di solito un numero) nella memoria di un programma. Di solito i numeri sono memorizzati in forma 4bytes, ma potresti trovarli anche in formati double o float, o potresti voler cercare qualcosa diverso da un numero. Per questo motivo devi essere sicuro di selezionare ciò che desideri cercare:

Puoi anche indicare diversi tipi di ricerche:

Puoi anche spuntare la casella per fermare il gioco durante la scansione della memoria:

Scorciatoie

In Modifica --> Impostazioni --> Scorciatoie puoi impostare diverse scorciatoie per scopi diversi come fermare il gioco (che è molto utile se in qualche momento desideri eseguire la scansione della memoria). Altre opzioni sono disponibili:

Modificare il valore

Una volta che hai trovato dove si trova il valore che stai cercando (più dettagli nelle fasi successive) puoi modificarlo facendo doppio clic su di esso, quindi facendo doppio clic sul suo valore:

E infine selezionando la spunta per effettuare la modifica nella memoria:

La modifica alla memoria verrà immediatamente applicata (nota che finché il gioco non utilizza nuovamente questo valore, il valore non verrà aggiornato nel gioco).

Ricerca del valore

Quindi, supponiamo che ci sia un valore importante (come la vita del tuo utente) che desideri migliorare, e stai cercando questo valore nella memoria)

Attraverso una modifica conosciuta

Supponendo che stai cercando il valore 100, esegui una scansione cercando quel valore e trovi molte corrispondenze:

Quindi, fai qualcosa in modo che il valore cambi, e fermi il gioco e esegui una scansione successiva:

Cheat Engine cercherà i valori che sono passati da 100 al nuovo valore. Congratulazioni, hai trovato l'indirizzo del valore che cercavi, ora puoi modificarlo. Se hai ancora diversi valori, fai qualcosa per modificare nuovamente quel valore e esegui un'altra "scansione successiva" per filtrare gli indirizzi.

Valore sconosciuto, modifica conosciuta

Nello scenario in cui non conosci il valore ma sai come farlo cambiare (e anche il valore del cambiamento) puoi cercare il tuo numero.

Quindi, inizia eseguendo una scansione di tipo "Valore iniziale sconosciuto":

Quindi, fai cambiare il valore, indica come il valore è cambiato (nel mio caso è stato diminuito di 1) e esegui una scansione successiva:

Ti verranno presentati tutti i valori che sono stati modificati nel modo selezionato:

Una volta trovato il tuo valore, puoi modificarlo.

Nota che ci sono molte modifiche possibili e puoi fare questi passaggi quante volte vuoi per filtrare i risultati:

Indirizzo di memoria casuale - Trovare il codice

Fino ad ora abbiamo imparato come trovare un indirizzo che memorizza un valore, ma è molto probabile che in esecuzioni diverse del gioco quell'indirizzo si trovi in posizioni diverse della memoria. Scopriamo quindi come trovare sempre quell'indirizzo.

Utilizzando alcuni dei trucchi menzionati, trova l'indirizzo in cui il tuo gioco attuale sta memorizzando il valore importante. Quindi (fermando il gioco se lo desideri) fai un clic destro sull'indirizzo trovato e seleziona "Scopri cosa accede a questo indirizzo" o "Scopri cosa scrive a questo indirizzo":

La prima opzione è utile per sapere quali parti del codice stanno usando questo indirizzo (cosa utile per altre cose come sapere dove puoi modificare il codice del gioco). La seconda opzione è più specifica, e sarà più utile in questo caso poiché siamo interessati a sapere da dove viene scritto questo valore.

Una volta selezionata una di queste opzioni, il debugger sarà collegato al programma e comparirà una nuova finestra vuota. Ora, gioca al gioco e modifica quel valore (senza riavviare il gioco). La finestra dovrebbe essere riempita con gli indirizzi che stanno modificando il valore:

Ora che hai trovato l'indirizzo che sta modificando il valore, puoi modificare il codice a tuo piacimento (Cheat Engine ti consente di modificarlo per NOPs molto rapidamente):

Quindi, ora puoi modificarlo in modo che il codice non influenzi il tuo numero, o influenzi sempre in modo positivo.

Indirizzo di memoria casuale - Trovare il puntatore

Seguendo i passaggi precedenti, trova dove si trova il valore di tuo interesse. Quindi, utilizzando "Scopri cosa scrive a questo indirizzo" scopri quale indirizzo scrive questo valore e fai doppio clic su di esso per ottenere la visualizzazione della disassemblazione:

Successivamente, esegui una nuova scansione cercando il valore esadecimale tra "[]" (il valore di $edx in questo caso):

(Se ne appaiono diversi, di solito è necessario scegliere il più piccolo)

Ora, abbiamo trovato il puntatore che modificherà il valore di nostro interesse.

Clicca su "Aggiungi indirizzo manualmente":

Ora, clicca sulla casella di controllo "Puntatore" e aggiungi l'indirizzo trovato nella casella di testo (in questo scenario, l'indirizzo trovato nell'immagine precedente era "Tutorial-i386.exe"+2426B0):

(Nota come il primo "Indirizzo" venga automaticamente popolato dall'indirizzo del puntatore che hai inserito)

Clicca su OK e verrà creato un nuovo puntatore:

Ora, ogni volta che modifichi quel valore, stai modificando il valore importante anche se l'indirizzo di memoria in cui si trova il valore è diverso.

Iniezione di codice

L'iniezione di codice è una tecnica in cui si inietta un pezzo di codice nel processo di destinazione e si reindirizza l'esecuzione del codice per passare attraverso il proprio codice scritto (come darti punti invece di sottrarli).

Quindi, immagina di aver trovato l'indirizzo che sottrae 1 alla vita del tuo giocatore:

Clicca su Mostra disassemblatore per ottenere il codice disassemblato. Quindi, premi CTRL+a per richiamare la finestra di auto-assemblaggio e seleziona Modello --> Iniezione di codice

Inserisci l'indirizzo dell'istruzione che desideri modificare (di solito viene autocompilato):

Verrà generato un modello:

Quindi, inserisci il tuo nuovo codice di assemblaggio nella sezione "newmem" e rimuovi il codice originale da "originalcode" se non vuoi che venga eseguito. In questo esempio, il codice iniettato aggiungerà 2 punti invece di sottrarre 1:

Clicca su esegui e così via e il tuo codice dovrebbe essere iniettato nel programma cambiando il comportamento della funzionalità!

Riferimenti

  • Tutorial Cheat Engine, completalo per imparare come iniziare con Cheat Engine

Last updated