Menu principale

Trainer

Aperto da Magnetic_dud, Marzo 03, 2006, 00:45:50

Discussione precedente - Discussione successiva

Magnetic_dud

(questo rientra nella categoria "rom hacking"?)

Ho trovato un gioco homebrew veramente eccezionale.
Purtroppo però, specialmente negli ultimi livelli la difficoltà è estrema (è a turni, ma il computer SA quello che hai scelto e agisce di conseguenza).
Ovviamente trucchi/codici/trainer su internet non ci sono, dato che questo è un gioco di pubblico domino (veramente) e quindi ignorato dal 99% della gente ;)
Per fortuna ho trovato la posizione nella RAM in cui è memorizzato il valore della vita rimanente del computer.

Volevo fare in modo che questa modifica sia permanente nella rom. Per semplificarmi la vita non volevo fare una intro come fanno i professional sulla quale si può scegliere se attivare o no il trucco.
Quindi vabbè, basterebbe fare un programma in ASM che tutte le volte che viene chiamato dice: metti a zero il valore all'offset XXXXX. Facile, 4 righe di codice ;) (già fatto)
Qualcuno sa dove (e come) lo metto per farlo funzionare almeno un frame al secondo?
Ho già preso un disassemblatore ARM7 fatto apposta per il GBA ma... boh io sono un niubbo inesperto

mentz

veramente il trainer non fa altro che deviare dove il gioco scrive i suoi valori da un altra parte, mentre nel punto dove l'altra parte del gioco va a leggere siano noi che gli facciamo scrivere il valore che vogliamo...

es: gli HP infiniti...

se il gioco scrive e legge il valore degli hp all'indirizzo (ovviamente fake)
0x1234...
per avere gli hp infiniti deviamo al gioco la scrittura in quel punto...
(magari in un altro non usato) e noi all'indirizzo 0x1234 ci scriviamo il valore equivalente a 999 hp...
IL gioco continuerà a leggere là il valore...ma i valori attuali e veri del gioco saranno in un punto che il gioco stesso non potrà mai leggere...

Magnetic_dud

Non sarebbe più "facile" aggiungere al codice disassemblato qualcosa del genere:
1. vai a 0x5555 (un punto vuoto dove c'è spazio libero)
2. scrivi '0' su 0x1111 (il vero indirizzo della variabile)
3. ritorna al codice del gioco

...
altrimenti come faccio a deviare la posizione della variabile?
Cerco nella rom un puntatore per un valore nella ram?

Gemini

CitazioneNon sarebbe più "facile" aggiungere al codice disassemblato qualcosa del genere:
1. vai a 0x5555 (un punto vuoto dove c'è spazio libero)
2. scrivi '0' su 0x1111 (il vero indirizzo della variabile)
3. ritorna al codice del gioco
Infatti è così che si fa, e la cosa va messa in una routine che viene richiamata quasi sempre, come l'aggiornamento dello schermo.

Magnetic_dud

Ho fatto parecchi tentativi ma non sono riuscito a fare niente.

Dunque faccio un riassunto dei miei progressi da niubbo

Come esempio ora uso Kurukuru kururin (#0048 secondo ph) che è abbastanza facile da trovare (comprare) rispetto all'homebrew che volevo hackare.

Il valore della vita è salvato in 0x03004582
la variabile accetta valori da 0 a 3.
Però il gioco crasha se lo setto a 3 fisso sicchè lo setto a 2
Lo spazio libero di kurukuru kururin inizia a 0x3d0710

il codice asm che ho fatto da sostituire è quindi

ldr r4, =0x03004582
mov r5, #2
strb r5, [r4]
[ritorna al codice originale che è situato a 0x80000000+la posizione del codice nel file]


però devo trovare una funzione che viene chiamata spesso, tipo la lettura dei tasti e dirgli di andare a leggere il mio codice a 0x3d0710.

Per quante ne so, lo stato dei pulsanti è memorizzato a 0x04000130.
Basterebbe trovare una funzione che va a leggere qua, giusto?
Ma come?
Disassemblo con ida pro e cerco 0x04000130?
Da bravo scemo non ho trovato nulla ^_^

[Domanda finale]
Come trovare la funzione che viene chiamata spesso?