Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Address Finder...
Forum - C# / VB.NET - Address Finder...

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
gianluca (Normal User)
Pro


Messaggi: 103
Iscritto: 23/06/2008

Segnala al moderatore
Postato alle 18:47
Martedì, 07/10/2008
ero intento a realizzare un mio addressFinder...

l'address finder mi servirebbe per trovare ed impostare gli address ke hanno un certo valore con un altro ke gli do io(tipo in un gioco per modificare dei parametri, risorse e quant'altro)!

mi servirebbe fare un programmino tipo ArtMoney! cioe ke quando gli do un valore da trovare, lui cerca nel processo tutti gli address ke hanno quell value e me li inserisce in una tabella!
il problema è ke non so come cercare i valori!... e non saprei poi inserire tutti quelli trovati un una tabella! aiuti?

so solo ke forse devo usare l'api ReadProcessMemory gisto? se si mi fate degli esempi su come usarla?

Ultima modifica effettuata da gianluca il 08/10/2008 alle 16:26
PM Quote
Avatar
gianluca (Normal User)
Pro


Messaggi: 103
Iscritto: 23/06/2008

Segnala al moderatore
Postato alle 16:31
Mercoledì, 08/10/2008
Ho trovato questo ke potrebbe aiutarmi! il problema è ke anke quando inserirso un address ke so ke porta un valore diverso da 0, mi restituisce 0! mi sapreste dire il perche'???
grazie!!!

Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.  
  3.     Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
  4.     Private 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
  5.     Private Declare Function WriteFloatMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
  6.     Private Declare Function ReadFloat Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByRef buffer As Single, ByVal size As Int32, ByRef lpNumberOfBytesRead As Int32) As Boolean
  7.     Private 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
  8.     Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Integer) As Integer
  9.     Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  10.     Public RBuff As Long
  11.  
  12.  
  13.     Public Function ReadLong(ByVal Address As Integer)
  14.         Dim ProgramLookUp As Process() = Process.GetProcessesByName("sette_e_mezzo")
  15.         If ProgramLookUp.Length = 0 Then
  16.             End
  17.         End If
  18.         Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, ProgramLookUp(0).Id)
  19.         ReadProcessMemory(processHandle, Address, RBuff, 4, Nothing)
  20.         CloseHandle(processHandle)
  21.         Return RBuff
  22.     End Function
  23.  
  24.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  25.         TextBox2.Text = ReadLong(&H28FC900)
  26.     End Sub
  27.  
  28. End Class


Ultima modifica effettuata da gianluca il 08/10/2008 alle 16:31
PM Quote
Avatar
gianluca (Normal User)
Pro


Messaggi: 103
Iscritto: 23/06/2008

Segnala al moderatore
Postato alle 17:10
Mercoledì, 08/10/2008
Errore! ho ftt quota invece di edita! sorry

Ultima modifica effettuata da gianluca il 08/10/2008 alle 17:18
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:42
Giovedì, 09/10/2008
Ti ringrazio per la domanda! Ho avuto occasione di incontrare argomenti interessanti che non avevo ancora ben esplorato. Ecco cosa ha prodotto la mia ricerca:
Codice sorgente - presumibilmente VB.NET

  1. Module Module1
  2. Sub Main()
  3.   Console.WriteLine("Nome del processo:")
  4.   Dim P() As Process = Process.GetProcessesByName(Console.ReadLine)
  5.  
  6.   If P.Length = 0 Then
  7.     Console.WriteLine("Nessun processo")
  8.   Else
  9.     Dim Handle As IntPtr = P(0).Handle
  10.     Dim BaseAddress As IntPtr = P(0).MainModule.BaseAddress
  11.     Dim Buffer(P(0).NonpagedSystemMemorySize64 - 1) As Byte
  12.     Dim GH As GCHandle = GCHandle.Alloc(Buffer, GCHandleType.Pinned)
  13.     Dim BufferPtr As IntPtr = GH.AddrOfPinnedObject()
  14.     Dim Read As IntPtr = Marshal.AllocHGlobal(4)
  15.  
  16.     ReadProcessMemory(Handle, BaseAddress, BufferPtr, Buffer.Length, Read)
  17.  
  18.     Dim ReadBytes As Int32 = Marshal.ReadInt32(Read)
  19.  
  20.     Console.WriteLine(ReadBytes & " bytes letti:")
  21.     For I As Int16 = 0 To Buffer.Length - 1
  22.       Console.Write("{0:X2}", Buffer(I))
  23.     Next
  24.   End If
  25.  
  26.   Console.ReadKey()
  27. End Sub
  28. End Module



Marshal è una classe di System.Runtime.InteropServices.

Ultima modifica effettuata da Il Totem il 09/10/2008 alle 17:43
PM Quote
Avatar
gianluca (Normal User)
Pro


Messaggi: 103
Iscritto: 23/06/2008

Segnala al moderatore
Postato alle 18:15
Giovedì, 09/10/2008
GRAZIEEEEEE! comunque mi da un errore!

Codice sorgente - presumibilmente C# / VB.NET

  1. Dim ReadBytes As Int32 = Marshal.ReadInt32(Read)



mi dice "Tentativo di lettura o scrittura della memoria protetta. Spesso questa condizione indica che altre parti della memoria sono danneggiate."

come posso fare?????

Ultima modifica effettuata da gianluca il 09/10/2008 alle 18:52
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 19:24
Giovedì, 09/10/2008
Assicurati che la tua applicazione goda di tutti i permessi: nella sezione proprietà-Security, seleziona Enable Click Once Security (o qualcosa del genere), e quindi "Full trusted application" ("applicazione completamente affidabile").
Se anche in questo modo non funziona, potrebbe esserci davvero una corruzione della RAM poiché l'area di memoria letta appartiene al tuo programma e non al processo che stai analizzando.
Infine, ricordati di aver inizializzato il puntatore Read.

PM Quote
Avatar
gianluca (Normal User)
Pro


Messaggi: 103
Iscritto: 23/06/2008

Segnala al moderatore
Postato alle 19:44
Giovedì, 09/10/2008
l'ho impostato... ma mi da il solito mex d'errore!
come faccio a inizializzare il puntatore Read??  

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 20:34
Giovedì, 09/10/2008
Codice sorgente - presumibilmente C# / VB.NET

  1. Dim Read As IntPtr = Marshal.AllocHGlobal(4)


PM Quote
Avatar
gianluca (Normal User)
Pro


Messaggi: 103
Iscritto: 23/06/2008

Segnala al moderatore
Postato alle 20:58
Giovedì, 09/10/2008
ah, beh! quello si... ma mi da cmq errore!!!!! uffa

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo