Perdonami la faccio corta perchè non sto bene e fa pure un caldo da fare schifo qui quindi la voglia è poca...
Quindi per farla corta ti dico che ti faccio vedere come usare il sistema degli array di bytes sull'energia del carroarmato.
Per farla corta inizialmente appena inizi la primissima partita l'energia vale 1000.
Quindi cerchi 1000 poi ti fai colpire e cerchi "diminuito" un po' di volte finchè ti rimane una sola variabile.
Fai doppio click per metterla sotto come sempre.
Poi vai sotto e fai tasto destro e seleziona "Find out what writes to this address"
ti aprirà una finestrella cosi che lascerai aperta:
ora torna al gioco e fatti sparare da qualcuno e poi distruggilo (se no ti uccide e non puoi andare avanti).
Torna alla finestrella di prima e vedrai che ti ha aggiunto una linea di codice cosi:
Quella altro non è che la linea di codice del gioco che si occupa di assegnare alla variabile dell'energia il valore corrente calcolato in base ai colpi che hai subito.
Adesso dobbiamo mettere da parte l'array di bytes che rappresenta questa riga di codice per poterla cercare in futuro.
L'array sarebbe quel 89 46 14
ma ti dico subito che se provassi a cercarlo ti uscirebbero un sacco di righe e quindi non sapresti quale usare:
Questo perchè nel programma del gioco quella stessa riga di codice compare un sacco di volte, con scopi diversi.
Allora che facciamo ? semplice, dobbiamo includere qualche altro byte dell'array in modo da renderlo il piu "unico" possibile al nostro caso.
Proviamo a prendere i bytes dell'istruzione subito precedente e vediamo se abbiamo fortuna.
Per farlo facciamo tasto destro su quella riga di codice e selezioniamo "show this address in the disassembler" :
Ci si apre la finestra del disassembler che ci fa vedere il codice (assembly) del gioco.
Siamo posizionati proprio sulla riga incriminata trovata prima , ovvero la
mov [esi+14],eax
i cui bytes erano (si vede a sinistra) 89 46 14
se ora scrolliamo verso l'alto di qualche riga (ne basterebbe 1) ci esce la riga di codice subito prima che è :
mov eax,[ebp-60] i cui bytes sono 8B 45 A0
allora col mouse selezioniamo le 2 righe appena viste e premiamo CTRL-C per copiare, nella finestrella che ci esce lasciamo la flag SOLAMENTE SU BYTES e premiamo Copy
ecco lo screen:
ora abbiamo il nostro array di bytes, incolliamolo in notepad per vederlo bene:
ok, ora sistemiamolo per bene unendo i bytes e poi andiamo in Cheat Engine e facciamo:
- new scan
- togliamo la flag da "writable" (stiamo cercando codice, non variabili)
- value type -> Array of bytes
- incolliamo il nostro array di bytes nel textbox della ricerca
- first scan
Abbiamo trovato 1 solo indirizzo, ottimo! siamo stati fortunati, vuol dire che è quello che ci interessa:
Ok, adesso che ce l'abbiamo come facciamo ad hackerare?
Semplice, doppio click sull'indirizzo trovato per metterlo sotto.
Andiamo sotto e doppio click sulla colonna a destra, "value" per editarne il valore
Il valore al momento è l'array stesso, quindi 8B 45 A0 89 46 14
Vi ricordate che i primi 3 sono un'istruzione e i secondi 3 sono L'ISTRUZIONE che si occupa di impostare l'energia?
Quindi dobbiamo cambiare i secondi 3, con cosa? semplice con l'istruzione assembly "NOP" che significa "NO OPERATION" ovvero non fare niente.
NOP = 90
siccome i bytes li sono 3 dobbiamo mettere 3 volte 90, cosi:
appena premiamo ok la modifica è istantanea, non serve flaggare a sinistra come si fa di solito, il codice è già modificato.
Quindi torniamo nel gioco e proviamo a farci sparare, vedrete che l'energia non scende piu... buon divertimento
l'energia resta sempre qui:
Se poi volete, potete tornare nella finestra di prima del disassembler per vedere effettivamente come è cambiato il codice,
notate che la prima istruzione c'è ancora (i primi 3 bytes) mentre la seconda è sparita, sostituita da 3 NOP: