noitide (Normal User)
Pro
Messaggi: 107
Iscritto: 24/06/2009
|
buon giorno a tutti, volevo chiedervi delucidazioni in merito ai dati caricati in memoria da un processo, più precisamente sto sviluppando un software x non far imbrogliare ad un gioco attraverso la modifica della RAM. mi è stato segnalato da manvb.net questo articolo http://www.pierotofy.it/pages/extras/forum/16/52799-classe ... ma sinceramente non ci ho capito molto e x quel poco ke ho capito non dovrebbe fare al caso mio, infatti a me serve cercare nella parte di ram utilizzata dal processo dei valori ke sono contenuti in un file di testo e una volta trovati come posso essere sicuro ke siano giusti?, ad esempio devo cercare il valore "0", ma ce ne sono milioni, è possibile identificare quello giusto? e una volta spento il pc la cache della ram si svuota e al successivo riavvio le posizioni assegnate in memoria dalla ram non dovrebbero coincidere quindi anke trovando il valore preciso e ricavandone la posizione non è utile.. o mi sbaglio? spero di essere stato abbastanza chiaro.. grazie..
|
|
NewAge (Normal User)
Pro
Messaggi: 153
Iscritto: 23/08/2009
|
Se vuoi iniziare a lavorare con la memoria dei processi guarda qui http://www.cheatengine.org/downloads.php. Una volta scaricato il programma ti fa affrontare le basi dell'argomento con un piccolo tutorial
|
|
noitide (Normal User)
Pro
Messaggi: 107
Iscritto: 24/06/2009
|
si grazie.. poi vdo ek ci sono anke i sorgenti.. comnq ora ho provato a usare tsearch ke è un programma cheat e ho salvato i valori ke mi interessano in un file .cht e poi ho provato a riavviare il pc ma il cheat funziona ankora quindi o il blocco di memoria utilizzato è sempre quello o c'è dell'altro..
EDIT: ho fatto il tutorial e qlcs penso di aver capito.. sta di fatto ke io non posso cambiare valori x capire quale valore è quello giusto, i miei valori sono statici e una volta caricati sono li e non li posso più modificare..
Ultima modifica effettuata da noitide il 28/08/2009 alle 11:44 |
|
NewAge (Normal User)
Pro
Messaggi: 153
Iscritto: 23/08/2009
|
Ma il programma è tuo e devi modificare i tuoi valori del tuo programma usando gli address ( credo che sia piuttosto scontata la risposta ( no ))? Perché è così credo che tu possa già fissare l'address all'interno del programma
|
|
manvb.net (Member)
Guru
Messaggi: 663
Iscritto: 28/01/2008
|
Si, gli address coincidono sempre(perchè sono relativi e poi la cache non c'entra niente) comunque non puoi risalire con semplicità ad una variabile nel processo se non puoi modificare il suo valore per testarla di volta in volta. Poi devi stare attento alle variabili dinamiche(puntatori) perchè il loro puntatore è statico ma punta ad una locazione dinamica, che può cambiare ad ogni avvio del programma. Non hai modo di saper se una variabile è un valore o un puntatore(in vb.net ad esempio tutte le istanze di classi sono puntatori mentre le strutture e i tipi di base sono valori).
Quindi credo che quello che stai cercando di fare sia molto complicato, se non impossibile!
|
|
noitide (Normal User)
Pro
Messaggi: 107
Iscritto: 24/06/2009
|
ok ho capito grazie.. ma ipotizzando ke riesco a trovare quel valore ke mi interessa, cambiandolo in un modo molto scomodo, come faccio a trovare lo stesso valore su un altro pc? dovrei rifare la ricerca oppure è un percorso assoluto in qualsiasi pc? grazie..
|
|
NewAge (Normal User)
Pro
Messaggi: 153
Iscritto: 23/08/2009
|
in pratica, se sono puntatori, ad ogni avvio del programma, ( sia che tu lo avvii sul tuo computer, sia che tu lo avvii su di un altro ) devi ricercare l'address
|
|
manvb.net (Member)
Guru
Messaggi: 663
Iscritto: 28/01/2008
|
Allora, se sono variabili statiche(allocate in fase di compilazione) hanno sempre lo stesso indirizzo relativo(a prescindere dal pc, dal sistema operativo, dalla ram, ecc...). Se invece sono dinamiche si tratta di aree di dati referenziate da un puntatore che vengono allocate con new(in vb.net e c++ ad esempio). New(malloc in c) chiama un api di sistema a cui viene richiesta memoria e che restituisce un puntatore a tale memoria(il puntatore è una variabile statica che contiene l'indirizzo di un'area dinamicha), quindi non è detto che il sistema restituisca sempre la stessa area di memoria, ma questa cambia a causa di vari fattori.
In pratica si, devi ricercare ogni volta la variabile(dinamica), in quanto tu non puoi sapere se la cella di memoria che stai leggendo è una variabile statica(o parte), un puntatore(o parte) o un'area dinamica(o parte), è una cosa comunque molto complicata da fare.
|
|
noitide (Normal User)
Pro
Messaggi: 107
Iscritto: 24/06/2009
|
Postato originariamente da manvb.net:
Allora, se sono variabili statiche(allocate in fase di compilazione) hanno sempre lo stesso indirizzo relativo(a prescindere dal pc, dal sistema operativo, dalla ram, ecc...). Se invece sono dinamiche si tratta di aree di dati referenziate da un puntatore che vengono allocate con new(in vb.net e c++ ad esempio). New(malloc in c) chiama un api di sistema a cui viene richiesta memoria e che restituisce un puntatore a tale memoria(il puntatore è una variabile statica che contiene l'indirizzo di un'area dinamicha), quindi non è detto che il sistema restituisca sempre la stessa area di memoria, ma questa cambia a causa di vari fattori.
In pratica si, devi ricercare ogni volta la variabile(dinamica), in quanto tu non puoi sapere se la cella di memoria che stai leggendo è una variabile statica(o parte), un puntatore(o parte) o un'area dinamica(o parte), è una cosa comunque molto complicata da fare. |
perfetto.. come credevo.. purtroppo.. grazie mille del chiarimento |
|