Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Lettura dell'intera memoria di un processo
Forum - C/C++ - Lettura dell'intera memoria di un processo

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 9:49
Lunedì, 18/01/2016
Buongiorno,
oggi voglio fare una cosa un po' insolita: voglio leggere l'intera memoria del processo corrente.

Guardando un po' in rete trovo https://msdn.microsoft.com/it-it/library/windows/desktop/ms .... Ok, ora sorgono diversi problemi.
Il primo problema è ottenere l'HANDLE del processo corrente, lo risolvo così: https://msdn.microsoft.com/en-us/library/windows/desktop/ms .... Ok, ora ho l'handle del processo corrente (l'unico di mio interesse).
Mi manca l'indirizzo di base della memoria del processo. Come la trovo?
A pensarci bene..... mi manca anche l'offset della fine della memoria del processo corrente. Come lo trovo?

Voglio cercare in una porzione del processo attuale dei numeri un po' particolari..... diciamo così.....

La memoria riservata al programma è considerata contigua? Non posso certamente leggere 6GB di memoria tutta insieme perchè non so se la ram è abbastanza capiente (e non mi interessa scoprirlo). Quindi: come leggo "a pezzi/blocchi" la memoria del MIO programma?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:50
Lunedì, 18/01/2016
E' un processo a 64 bit?

Per capirci ... che processo è esattamente?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 13:36
Lunedì, 18/01/2016
Il codice è in una libreria che verrà linkata dal programma che vorrà usarla, e sarà distribuita per x86 e x64 perché  readprocessmemory non può da un processo x86 accedere alla memoria di un processo x64.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 13:47
Lunedì, 18/01/2016
Nel frattempo ho cercato un po' e sembra che L'HANDLE di un processo sia anche l'indirizzo di partenza della sua memoria. Quindi LPCVOID baseaddress = (LPCVOID) handle.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:00
Lunedì, 18/01/2016
No, l'handle di un processo e l'indirizzo sono cose diverse. Avrai un crash.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 17:00
Lunedì, 18/01/2016
Non vorrai dirmi che devo dare VirtualQueryEx su tutta la memoria NON riservata al SO, vero :(

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 18:47
Lunedì, 18/01/2016
Comunque non ho cattive intenzioni ne voglio leggere la memoria per estrarre informazioni proibite.... Voglio implementare un garbage collector. Devo controllare tutta la memoria della applicazione corrente per vedere se il programma  ha perso i riferimenti della memoria allocata dal malloc della libreria (quindi il gc è utilizzabile solo se lo si desidera e non causa incompatibilità di alcun genere). L'algoritmo utilizzato è una specie di mark-and-sweep.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:08
Lunedì, 18/01/2016
Ho tratto ispirazione da un articolo che faceva la stessa cosa per Linux. Volevo vedere se riuscivo a mettere in piedi un triviale garbage collector per Windows.

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 8:38
Martedì, 19/01/2016
Posso dire una cavolata.
Io per trovare puntatori ad indirizzo fisso ed i relativi offset di accesso ho usato CheatEngine.

Anche se il nome inganna, quel programma e una manna dal cielo.
Sopratutto per debuggare e testare la sicurezza di un programma.

E molto facile con quel programma risalire ai puntatori fissi e trovare i relativi offset.

Altra comodità del programma, e quella di poter manipolare in Assembly il programma direttamente a runtime.

esattamente qui

https://github.com/cheat-engine/cheat-engine/tree/master/Ch ...

puoi osservare come viene effettuata la ricerca di un indirizzo

Ultima modifica effettuata da Thejuster il 19/01/2016 alle 16:09


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo