|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
[ Vb.Net 2008 ] Indirizzi di Memoria - Genymus
Salve, ho la necessità di creare un'applicazione che mi consenta di ottenere, leggere e scrive su indirizzi di memoria di un certo programma.
Esempio: Voglio visualizzare tutti gli indirizzi di memoria utilizzati dal calc.exe, dopodichè li volgio leggere e sucessivamente modificare. L'applicazione dovrà quindi crearmi una lista dove compaiano gli indirizzi utilizzati, tipo così: Codice:
AF23F4 A1321D 22FF00 13F503 Su un tutorial ho letto che posso utilizzarre le api: Codice:
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer Public Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer Oltre a questo non ho capito bene un'altra cosa: Dopo essermi "attaccato" al processo usando quest'altro pezzo di codice: Codice:
Dim ProcessName As Process() = Process.GetProcessesByName("calc")
HProcess = OpenProcess(&H1F0FFF, 0, ProcessName(0).Id)
Codice:
ReadProcessMemory(HProcess, Address, Variable, 4, Nothing) WriteProcessMemory(HProcess, Address, Value, 4, Nothing) Grazie
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Scusa, ma : utilità di tutto ciò ?!
A parte che andare a scrivere a casaccio nella memoria occupata da un processo non mi pare molto costruttivo, potrebbe avere risultati indesiderati, produrre crash, e/o non essere proprio consentito... Nel caso specifico, l'uso esterno di calc da VB.NET è possibile ( e per inciso, superfluo ), senza un approccio così cruento, ad esempio come viene spiegato qui da un Mod di MSDN Forums : http://social.msdn.microsoft.com/For...c-d26798e831ae |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
il mio era solo un'esempio, la mia applicazione dovrà andare a modificare gli indirizzi di memoria di altre applicazioni.
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Ovviamente il sistema operativo non te lo permettera'.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Se il sistema operativo permettesse a qualunque processo (come il tuo) di scrivere quello che vuole sul processo di chiunque altro, sul nostro computer avremmo piu' virus di quelli che gia' ci sono, addirittura piu' virus che programmi.
Potrai usare questo comando su qualunque processo dal tuo iniziato (te stesso o un altro processo figlio del tuo processo), oppure il tuo processo dovra' avere un paio di privilegi su quello target. Forse con le detours si puo' fare qualcosa, ma tanto... sono destinate a morire (Se non le aggiornano o non le hanno gia' aggiornate).
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
Quindi è una cosa destinata a fallire?
Ma il funzionamento dei trainer e dei debugger non è identificare e modificare i vari indirizzi di memoria? Quote:
Non è questo il comando? Codice:
HProcess = OpenProcess(&H1F0FFF, 0, ProcessName(0).Id) Grazie
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Provaci, i pezzi della ricetta sono quelli.
Se funziona sono 2 chiamate
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
ok ci proverò, comunque prima devo trovare gli indirizzi di memoria... proverò facendo il debug dell'applicazione in questione.
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
Non riesco a capire come scansionare la memoria... qualche suggerimento?
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
dimentica tutti i post precedenti: la tua é una domanda ben precisa con una risposta altrettanto precisa, che si chiama VirtualQueryEx: http://msdn.microsoft.com/en-us/libr...07(VS.85).aspx
buon lavoro |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
ma questa funzione cosa fa? è compatibile con vb.net?
Devo richiamarla dalla Libreria "kernel32.dll" così: Codice:
Public Declare Function VirtualQueryEx Lib "kernel32" (ByVal hProcess As Integer, ByVal lpAddress As Integer, ByVal lpBuffer As Integer, ByVal dwLength As Bytes) As Integer Il valore di ritorno cos'è? Un array di indirizzi utilizzati? Posso scansionare la memoria con questa funzione? Grazie
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
|
|
|
|
|
#13 | |||
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
permette di enumerare le "regioni" che partizionano lo spazio di indirizzamento del processo di cui specifichi l'handle.
i Remarks della documentazione definiscono il concetto di regione: si tratta di una sequenza di pagine contigue di memoria virtuale caratterizzate dalle seguenti caratteristiche: 1) hanno tutte lo stesso stato di allocazione (flags MEM_XXX, a te interessano tutte le regioni tranne quelle in stato MEM_RESERVE e MEM_FREE); 2) a meno che lo stato di allocazione non sia MEM_FREE, tale stato é stato provocato da un'unica chiamata VirtualAlloc(Ex) o simili (questo significa che due regioni contigue con gli stessi flags vengono enumerate indipendentemente se sono state allocate con due diverse chiamate VirtualAlloc(Ex) o simili); 3) hanno tutte lo stesso tipo di accesso (lettura, scrittura, esecuzione, ecc.). Quote:
Quote:
Quote:
*tale "mappa" ti permette di sapere quali indirizzi sono allocati, quali no, quali sono solo riservati, quali sono usati per memorizzare moduli eseguibili (EXE o DLL), quali sono in realtá memory-mapped files, quali sono leggibili/scrivibili/eseguibili, quali sono in protezione copy-on-write e persino su quali é stato impostato un page guard; direi piu o meno tutto. |
|||
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
Bestia... se funziona mi hai salvato la vita
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:23.




















