Autor
|
Tema: Leer Memoria de un Proceso (Leído 6,810 veces)
|
nemesysrgs
Desconectado
Mensajes: 7
|
Tengo este codigo Public Class Form1 'API ReadProcessMemory Private Shared Function ReadProcessMemory( _ ByVal hProcess As IntPtr, _ ByVal lpBaseAddress As IntPtr, _ ByVal lpBuffer() As Byte, _ ByVal dwSize As Integer, _ ByRef lpNumberOfBytesRead As Integer) As Boolean End Function
Private Function FindAddress(ByVal pHandle As IntPtr, ByVal BaseAddress As IntPtr, ByVal StaticPointer As IntPtr, ByVal Offsets() As IntPtr) As IntPtr ' Crearemos un buffer de 4 bytes para sistema de32-bit o 8 bytes sobre un sistema de 64-bit . Dim tmp(IntPtr.Size - 1) As Byte Dim Address As IntPtr = BaseAddress ' Checaremos para 32-bit vs 64-bit. If IntPtr.Size = 4 Then Address = New IntPtr(Address.ToInt32 + StaticPointer.ToInt32) Else Address = New IntPtr(Address.ToInt64 + StaticPointer.ToInt64) End If ' Loop de cada Offset hasta encontrar el Address For i As Integer = 0 To Offsets.Length - 1 ReadProcessMemory(pHandle, Address, tmp, IntPtr.Size, 0) If IntPtr.Size = 4 Then Address = BitConverter.ToInt32(tmp, 0) + Offsets(i).ToInt32() Else Address = BitConverter.ToInt64(tmp, 0) + Offsets(i).ToInt64() End If Next Return Address End Function
Public Function Obtener_Address() Dim p As Process For Each p In Process.GetProcesses() If Not p Is Nothing Then If (LCase(p.ProcessName) = "l2") Then Dim pID As IntPtr = p.Handle Dim base As IntPtr = p.MainModule.BaseAddress ' Colocamos Nuestro Pointer Estatico Dim sptr As IntPtr = &HB5C3320 ' Y aqui nuestro Offset segun los necesarios Dim offsets() As IntPtr = {&HF4, &H14, &H308, &HC4, &H0} Dim addr As IntPtr = FindAddress(pID, base, sptr, offsets) Dim f As String f = addr.ToString Return f Exit Function End If End If Next Return ("Error") ' Obtendremos el Handle y el BaseAddress de nuestro proceso End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox(Obtener_Address()) End Sub End Class
Lo que quiero hacer es obtener el nombre del personaje para el juego Lineage 2 (Interlude) pero siempre me devielve 0, alguno tiene una idea de que es lo que esta pasando.- Muchas gracias
|
|
|
En línea
|
|
|
|
.mokk.
Desconectado
Mensajes: 177
|
mmm ya veo pero jamas haces la conversion del texto aqui te dejo mi code que uso para leer en memoria Imports System Imports System.Text Imports System.Runtime.InteropServices Imports System.ComponentModel Imports System.Windows.Forms.Application Module ReadMemory <DllImport("kernel32.dll", SetLastError:=True)> Private Function ReadProcessMemory _ (ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByRef lpBuffer As Byte, _ ByVal iSize As Integer, ByRef lpNumberOfBytesRead As Integer) As Boolean End Function Public Sub ReadMemoryP(ByVal address As Integer) Try Dim process0 as string = "calc" 'process0 is the name of pocess Dim prox As Process() = Process.GetProcessesByName("process0") MsgBox(GetTextinMemory(prox(0).Handle, address, 16) & GetTextinMemory(prox(0).Handle, address + 32, 16)) Catch ex As Exception MsgBox(ex.Message) End Try End Sub Private Function GetTextinMemory(ByVal ProcessHandle As IntPtr, ByVal MemoryAddress As IntPtr, ByVal CharsToRead As Integer, Optional ByVal IsUnicode As Boolean = True) As String Dim ReturnValue As String = vbNullString Dim StringBuffer() As Byte If IsUnicode Then ReDim StringBuffer(CharsToRead * 2 - 1) Else ReDim StringBuffer(CharsToRead - 1) End If Try 'Dim p As Process() = Process.GetProcessesByName(process0) If ReadProcessMemory(ProcessHandle, MemoryAddress, StringBuffer(0), StringBuffer.Length, Nothing) Then If IsUnicode Then ReturnValue = System.Text.Encoding.ASCII.GetString(StringBuffer) Else ReturnValue = System.Text.Encoding.Default.GetString(StringBuffer) End If End If Catch ex As Exception MsgBox(ex.Message) End Try Return ReturnValue End Function End Module
|
|
|
En línea
|
|
|
|
nemesysrgs
Desconectado
Mensajes: 7
|
Estoy probando este codigo pero me devuelve una "j", quizas este usando mal la direccion de memoria. Estuve usando Cheat Engine para identificar la direccion de memoria donde se guarda el nombre del personaje, en este caso "santirompebolas" use varias direcciones, incluso use este codigo para hacer un escaneo de la memoria, con saltos de 16 y 24 y de 1 a 1 pero no logro localizar el nombre. Dim r As Integer ListBox1.Items.Clear() For r = Val(txtmin.Text) To Val(txtmax.Text) ReadMemoryP(r) Next
|
|
« Última modificación: 27 Noviembre 2010, 18:13 pm por nemesysrgs »
|
En línea
|
|
|
|
nemesysrgs
Desconectado
Mensajes: 7
|
¿Alguno tiene una idea? Puede alguno orientarme para obtener el puntero a la memoria y como manejarlo (tambien los offsets y demas)
Quizas en otro lenguaje funcione mejor que en vb, si alguno tiene un ejemplo estaria bueno para probar.
|
|
« Última modificación: 27 Noviembre 2010, 19:00 pm por nemesysrgs »
|
En línea
|
|
|
|
.mokk.
Desconectado
Mensajes: 177
|
Nose si contigo sea igual, pero conmigo siempre al ejecutar el juego u programa que deceaba leer camabiaba el addres y el puntero que usaba ya no era el correcto, por lo que al principio para ver que funcionara bien lo que hacia dejaba el programa abierto, luego veia bn el addres y eso para leer y luego ya veia y si leia bn ya luego reiniciaba el programa y si ya no leia eso ya era problema del programa que cambiaba el addres.
|
|
|
En línea
|
|
|
|
nemesysrgs
Desconectado
Mensajes: 7
|
Claro, es igual, fijate en una de las imagenes aparece "Pointercount=78" para llegar a ese numero tuve que ejecutar la aplicacion alrededor de 200 veces bajado de 3 a 20 punteros por cada ejecucion.
Mi problema es que: o no sé buscar el puntero, o estoy utilizando mal el codigo que me dio .mokk., o ambas 2, en este caso quisiera saber si estoy buscandolo mal el puntero y si lo estoy haciendo mal, entonces como lo tendria que hacer.
|
|
|
En línea
|
|
|
|
nemesysrgs
Desconectado
Mensajes: 7
|
Le doy un Up por que sigo sin conseguir resultados.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda a leer en memoria proceso oculto en C++
Programación C/C++
|
Pinkof
|
7
|
6,417
|
9 Agosto 2010, 18:57 pm
por Pinkof
|
|
|
leer memoria de otro proceso
Java
|
TCL_ZIP
|
1
|
3,750
|
20 Enero 2011, 19:34 pm
por kasiko
|
|
|
¿como leer memoria protegida de un proceso y saber cuanto ocupa?
Análisis y Diseño de Malware
|
AlxSpy
|
6
|
6,590
|
20 Junio 2011, 18:33 pm
por Иōҳ
|
|
|
Leer memoria de un proceso
Análisis y Diseño de Malware
|
.:Weeds:.
|
1
|
3,131
|
24 Junio 2011, 15:42 pm
por AlxSpy
|
|
|
Problema leer memoria de un proceso en 64 bits anti dump
Programación C/C++
|
linkcode
|
5
|
2,866
|
25 Agosto 2014, 19:40 pm
por Eternal Idol
|
|