VB MODULO VB MODIFICARE/LEGGERE LA MEMORIA

SpeedJack

Sviluppatore
Amministratore
18 Febbraio 2010
5,788
74
3,825
1,413
Ultima modifica:
In seguito alla sparizione misteriosa di alcuni post, tra cui quella in rilievo che conteneva il modulo per leggere e scrivere la memoria, ri-inserisco qui il modulo in questione:
(voglio sottolineare che non ho creato io il modulo (anche se l'ho modificato successivamente), ed è lo stesso che era stato prima postato da un altro utente. Io ho solo provveduto a ripostarlo in seguito alla sua misteriosa scomparsa. Non voglio comunque ne +1 ne "Mi piace" per questo.)

EDIT:
Ho preferito migliorare il modulo rendendolo più completo. Ho reso opzionali alcuni parametri e migliorati altri dettagli.
Ho aggiunto anche la spiegazione di ogni funzione e il link alle pagine MSDN.
Ho inoltre documentato il codice affinché i suggerimenti vengano visualizzati con IntelliSense di Visual Studio durante l'utilizzo dei membri del modulo.

MODULO

Codice:
'READWRITEMEMORY MODULE by SpeedJack
'www.inforge.net




''' <summary>
''' Modulo per leggere e modificare la memoria.
''' Possiede anche altre funzioni riguardanti
''' le finestre e il cursore di Windows.
''' </summary>
''' <remarks>Imroved, Modeed, commented e documented by SpeedJack.
''' Powered by InForge.Net. <see>http://www.inforge.net</see></remarks>
Module ReadWriteMemory




    ''' <summary>
    ''' Processo da aprire. Modificare il nome nel modulo.
    ''' In certi casi l'estensione non è necessaria.
    ''' </summary>
    ''' <remarks>L'array conterrà tutti i processi con quel nome.
    ''' Solitamente myProcesses(0) contiene il processo desiderato.
    ''' "nome_processo" è il nome del processo da aprire.
    ''' <seealso>http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx</seealso></remarks>
    Friend myProcesses As Process() = Process.GetProcessesByName("nome_processo")




    ''' <summary>
    ''' Enumeratore che contiene i vari diritti di accesso al processo.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms684880(v=vs.85).aspx</see>
    ''' </summary>
    Friend Enum ProcessAccess
        ''' <summary>
        ''' Necessario per terminare un processo usando TerminateProcess.
        ''' </summary>
        ''' <remarks>Il metodo TerminateProcess non è presente nel modulo.</remarks>
        PROCESS_TERMINATE = &H1
        ''' <summary>
        ''' Necessario per creare un thread.
        ''' </summary>
        PROCESS_CREATE_THREAD = &H2
        ''' <summary>
        ''' Necessario per eseguire un'operazione nello spazio
        ''' di memoria di un processo.
        ''' </summary>
        ''' <remarks>Si possono usare con esso le funzioni
        ''' VirtualProtectEx e WriteProcessMemory.</remarks>
        PROCESS_VM_OPERATION = &H8
        ''' <summary>
        ''' Necessario per leggere la memoria di un processo usando ReadProcessMemory.
        ''' </summary>
        PROCESS_VM_READ = &H10
        ''' <summary>
        ''' Necessario per scrivere la memoria di un processo usando WriteProcessMemory.
        ''' </summary>
        PROCESS_VM_WRITE = &H20
        ''' <summary>
        ''' Necessario per duplicare un handle usando DuplicateHandle.
        ''' </summary>
        ''' <remarks>Il metodo DuplicateHandle non è presente nel modulo.</remarks>
        PROCESS_DUP_HANDLE = &H40
        ''' <summary>
        ''' Necessario per creare un processo.
        ''' </summary>
        PROCESS_CREATE_PROCESS = &H80
        ''' <summary>
        ''' Necessario per impostare i limiti della memoria usando SetProcessWorkingSetSize.
        ''' </summary>
        ''' <remarks>Il metodo SetProcessWorkingSetSize non è presente nel modulo.</remarks>
        PROCESS_SET_QUOTA = &H100
        ''' <summary>
        ''' Necessario per impostare alcune informazioni sul processo,
        ''' come la sua classe di priorità (vedi SetPriorityClass).
        ''' </summary>
        ''' <remarks>Il meotodo SetPriorityClass non è presente nel modulo</remarks>
        PROCESS_SET_INFORMATION = &H200
        ''' <summary>
        ''' Necessario per recuperare alcune informazioni su un processo,
        ''' come il suo token, codice di uscita, classe di priorità.
        ''' </summary>
        PROCESS_QUERY_INFORMATION = &H400
        ''' <summary>
        ''' Necessario per sospendere o riabilitare un processo.
        ''' </summary>
        PROCESS_SUSPEND_RESUME = &H800
        ''' <summary>
        ''' Necessario per recuperare alcune informazioni su un processo.
        ''' Un handle che ha il diritto di accesso PROCESS_QUERY_INFORMATION
        ''' possiede anche automaticamente PROCESS_QUERY_LIMITED_INFORMATION.
        ''' </summary>
        ''' <remarks>WinServer 2003, WinXP, Win2000 non supportano questo diritto di accesso.</remarks>
        PROCESS_QUERY_LIMITED_INFORMATION = &H1000
        ''' <summary>
        ''' Accesso completo al processo.
        ''' </summary>
        PROCESS_ALL_ACCESS = &H1F0FFF
        ''' <summary>
        ''' Accesso di lettura, scrittura, possibilità di eseguire
        ''' operazioni e ottenere informazioni.
        ''' </summary>
        ''' <remarks>Si tratta della somma tra PROCESS_VM_READ, PROCESS_VM_WRITE,
        ''' PROCESS_VM_OPERATION e PROCESS_QUERY_INFORMATION.</remarks>
        PROCESS_READ_WRITE_QUERY = PROCESS_VM_READ + PROCESS_VM_WRITE + PROCESS_VM_OPERATION + PROCESS_QUERY_INFORMATION
    End Enum




    ''' <summary>
    ''' Apre un processo locale esistente.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms684320(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="dwDesiredAccess">Il diritto di accesso al processo.</param>
    ''' <param name="bInheritHandle">Se questo valore è TRUE, i processo creati da questo processo erediteranno l'handle.
    ''' In caso contrario, i processo non erediteranno questo handle.</param>
    ''' <param name="dwProcessId">L'identificatore del processo locale da aprire.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà l'handle del processo aperto.
    ''' Se la funzione fallisce, il valore restituito sarà NULL.</returns>
    Friend Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer




    ''' <summary>
    ''' Contiene l'handle del processo dopo che è stato aperto con OpenProcess.
    ''' </summary>
    ''' <remarks>L'handle deve essere inserito manualmente in questa variabile.
    ''' <seealso>http://msdn.microsoft.com/en-us/library/system.intptr(v=VS.100).aspx</seealso>
    ''' </remarks>
    Friend processHandle As IntPtr




    'In tutte le funzioni per leggere/scrivere la memoria, viene restituito 0 se l'operazione è fallita.
    'In caso di lettura il valore viene messo nel Buffer.
    'In caso di scrittura viene scritto il valore del Buffer.
    'Funzione per scrivere la memoria. (DISATTIVATE: meglio usare quelle specifiche per tipo, sono più precise. Altrimenti si possono attivare queste due funzioni togliendo l'apice davanti).
    'MSDN: http://msdn.microsoft.com/en-us/library/ms681674(v=vs.85).aspx
    'Friend Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    'Funzione per leggere la memoria:
    'MSDN: http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx
    'Friend Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer




    ''' <summary>
    ''' Legge un Byte di memoria. Si basa sulla funzione ReadProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno il diritto di accesso PROCESS_VM_READ.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da leggere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che riceverà il valore letto dall'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere letti. Default: 1.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes trasferiti nel buffer. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function ReadByte Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Byte, Optional ByVal nSize As Integer = 1, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    ''' <summary>
    ''' Legge 2 Bytes di memoria. Si basa sulla funzione ReadProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno il diritto di accesso PROCESS_VM_READ.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da leggere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che riceverà il valore letto dall'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere letti. Default: 2.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes trasferiti nel buffer. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function ReadShort Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Short, Optional ByVal nSize As Integer = 2, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    ''' <summary>
    ''' Legge 4 Bytes di memoria. Si basa sulla funzione ReadProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno il diritto di accesso PROCESS_VM_READ.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da leggere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che riceverà il valore letto dall'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere letti. Default: 4.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes trasferiti nel buffer. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function ReadInteger Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, Optional ByVal nSize As Integer = 4, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    ''' <summary>
    ''' Legge 8 Bytes di memoria. Si basa sulla funzione ReadProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno il diritto di accesso PROCESS_VM_READ.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da leggere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che riceverà il valore letto dall'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere letti. Default: 8.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes trasferiti nel buffer. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function ReadLong Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Long, Optional ByVal nSize As Integer = 8, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    ''' <summary>
    ''' Legge 4 Bytes di memoria. Si basa sulla funzione ReadProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno il diritto di accesso PROCESS_VM_READ.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da leggere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che riceverà il valore letto dall'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere letti. Default: 4.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes trasferiti nel buffer. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function ReadSingle Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, Optional ByVal nSize As Integer = 4, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    ''' <summary>
    ''' Legge 8 Bytes di memoria. Si basa sulla funzione ReadProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno il diritto di accesso PROCESS_VM_READ.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da leggere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che riceverà il valore letto dall'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere letti. Default: 8.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes trasferiti nel buffer. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function ReadDouble Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Double, Optional ByVal nSize As Integer = 8, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    ''' <summary>
    ''' Legge una stringa in memoria. Si basa sulla funzione ReadProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno il diritto di accesso PROCESS_VM_READ.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da leggere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che riceverà il valore letto dall'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere letti.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes trasferiti nel buffer. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function ReadString Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As String, ByVal nSize As Integer, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer


    ''' <summary>
    ''' Scrive un byte in un'area di memoria di un processo specificato. Si basa sulla funzione WriteProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno i diritti di accesso PROCESS_VM_WRITE e PROCESS_VM_OPERATION.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da scrivere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che contiene il valore che deve essere scritto nell'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere scritti. Default: 1.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes scritti nell'area di memoria. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function WriteByte Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Byte, Optional ByVal nSize As Integer = 1, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    ''' <summary>
    ''' Scrive 2 bytes in un'area di memoria di un processo specificato. Si basa sulla funzione WriteProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno i diritti di accesso PROCESS_VM_WRITE e PROCESS_VM_OPERATION.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da scrivere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che contiene il valore che deve essere scritto nell'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere scritti. Default: 2.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes scritti nell'area di memoria. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function WriteShort Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Short, Optional ByVal nSize As Integer = 2, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    ''' <summary>
    ''' Scrive 4 bytes in un'area di memoria di un processo specificato. Si basa sulla funzione WriteProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno i diritti di accesso PROCESS_VM_WRITE e PROCESS_VM_OPERATION.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da scrivere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che contiene il valore che deve essere scritto nell'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere scritti. Default: 4.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes scritti nell'area di memoria. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function WriteInteger Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, Optional ByVal nSize As Integer = 4, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    ''' <summary>
    ''' Scrive 8 bytes in un'area di memoria di un processo specificato. Si basa sulla funzione WriteProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno i diritti di accesso PROCESS_VM_WRITE e PROCESS_VM_OPERATION.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da scrivere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che contiene il valore che deve essere scritto nell'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere scritti. Default: 8.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes scritti nell'area di memoria. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function WriteLong Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Long, Optional ByVal nSize As Integer = 8, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    ''' <summary>
    ''' Scrive 4 bytes in un'area di memoria di un processo specificato. Si basa sulla funzione WriteProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno i diritti di accesso PROCESS_VM_WRITE e PROCESS_VM_OPERATION.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da scrivere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che contiene il valore che deve essere scritto nell'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere scritti. Default: 4.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes scritti nell'area di memoria. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function WriteSingle Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, Optional ByVal nSize As Integer = 4, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    ''' <summary>
    ''' Scrive 8 bytes in un'area di memoria di un processo specificato. Si basa sulla funzione WriteProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno i diritti di accesso PROCESS_VM_WRITE e PROCESS_VM_OPERATION.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da scrivere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che contiene il valore che deve essere scritto nell'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere scritti. Default: 8.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes scritti nell'area di memoria. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function WriteDouble Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Double, Optional ByVal nSize As Integer = 8, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
    ''' <summary>
    ''' Scrive una stringa in un'area di memoria di un processo specificato. Si basa sulla funzione WriteProcessMemory.
    ''' <see>http://msdn.microsoft.com/en-us/library/ms680553(v=vs.85).aspx</see>
    ''' </summary>
    ''' <param name="hProcess">Un handle al processo. L'handle deve avere almeno i diritti di accesso PROCESS_VM_WRITE e PROCESS_VM_OPERATION.</param>
    ''' <param name="lpBaseAddress">L'address di base dell'area di memoria da scrivere.</param>
    ''' <param name="lpBuffer">Un puntatore al buffer che contiene il valore che deve essere scritto nell'address.</param>
    ''' <param name="nSize">Il numero di bytes che devono essere scritti.</param>
    ''' <param name="lpNumberOfBytesWritten">Un pointer ad una variabile che riceverà il numero di bytes scritti nell'area di memoria. Se il valore è NULL, il parametro viene ignorato. Default: Nothing.</param>
    ''' <returns>Se la funzione ha successo, il valore restituito sarà non-zero.</returns>
    Friend Declare Function WriteString Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As String, ByVal nSize As Integer, Optional ByRef lpNumberOfBytesWritten As Integer = Nothing) As Integer
End Module
Come si usa?

[GUIDA] Processi e memoria in Visual Basic .NET (come creare hacks) by SpeedJack (con video-guida)
 

Pred non so se hai notato ma, in seguito alla sparizione di numerosi messaggi di alcune discussioni che si trovavano in rilievo (ma anche da discussioni non in rilievo), su consiglio di murder, MetalMaster ha tolto tutti i post dal rilievo e li ha raccolti nella seguente discussione, sperando che il problema si verificasse solo nei post in rilievo:
http://www.inforge.net/community/vb-vb-net/179879-guida-alle-guide-rilievo.html
Ora si è scoperto che si verifica ai post vecchi (in rilievo o meno) ma non so se murder vuole che rimetti lo stick alle varie discussioni.
 
  • Mi piace
Reazioni: Mihawk.
Ciao Mavin,
Come sai (o come almeno dovresti sapere) ogni processo (applicazione) quando viene avviato, viene caricato sulla memoria RAM.
Tutti i dati del programma e le varie istruzioni che dovrà eseguire vengono quindi caricate il memoria.
Questo modulo contiene delle funzioni per aprire i processi, leggere e modificare la memoria (quindi i dati del programma), e altre funzioni.
è in questo modo che vengono create le hack, programmi per barare nei giochi.
Per maggiori informazioni ci sono i link di MSDN tra i commenti del modulo (ti basta tradurre un po' di inglese ;) ).
 
  • Mi piace
Reazioni: Kelpie e Mihawk.
Ultima modifica:
Risolte alcune imprecisioni del modulo.
Inseriti i parametri opzionali per alcune funzioni dove non sono necessari.
Rimossi metodi inutili (o comunque non adatti a trovarsi in questo modulo). Verranno più avanti aggiunti nuovi metodi per la gestione dei processi e della memoria.
​Documentato il codice per la visualizzazione dei suggerimenti con IntelliSense di Visual Studio.
 
  • Mi piace
Reazioni: Mihawk.