Genymus
07-02-2010, 00:15
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ì:
AF23F4
A1321D
22FF00
13F503
Successivamente io prendo una di queste stringhe e le vado a leggere e sucessivamente modificare.
Su un tutorial ho letto che posso utilizzarre le api:
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
Il problema è che comunque non riesco ad ottenere la lista degli indirizzi usati.
Oltre a questo non ho capito bene un'altra cosa:
Dopo essermi "attaccato" al processo usando quest'altro pezzo di codice:
Dim ProcessName As Process() = Process.GetProcessesByName("calc")
HProcess = OpenProcess(&H1F0FFF, 0, ProcessName(0).Id)
dovrei utilizzare le seguenti chiamate per leggere e scrivere sulla memoria...
ReadProcessMemory(HProcess, Address, Variable, 4, Nothing)
WriteProcessMemory(HProcess, Address, Value, 4, Nothing)
da quello che ho capito, il 4 sta per i byte, rispettosamente, letti o scritti... cosa significa? Quanti byte posso usare? Sono sempre e solo 4? Cambia se sviluppo l'applicazione a 64 bit al posto di 32?
Grazie
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ì:
AF23F4
A1321D
22FF00
13F503
Successivamente io prendo una di queste stringhe e le vado a leggere e sucessivamente modificare.
Su un tutorial ho letto che posso utilizzarre le api:
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
Il problema è che comunque non riesco ad ottenere la lista degli indirizzi usati.
Oltre a questo non ho capito bene un'altra cosa:
Dopo essermi "attaccato" al processo usando quest'altro pezzo di codice:
Dim ProcessName As Process() = Process.GetProcessesByName("calc")
HProcess = OpenProcess(&H1F0FFF, 0, ProcessName(0).Id)
dovrei utilizzare le seguenti chiamate per leggere e scrivere sulla memoria...
ReadProcessMemory(HProcess, Address, Variable, 4, Nothing)
WriteProcessMemory(HProcess, Address, Value, 4, Nothing)
da quello che ho capito, il 4 sta per i byte, rispettosamente, letti o scritti... cosa significa? Quanti byte posso usare? Sono sempre e solo 4? Cambia se sviluppo l'applicazione a 64 bit al posto di 32?
Grazie