elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Leer Memoria de un Proceso
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Leer Memoria de un Proceso  (Leído 6,810 veces)
nemesysrgs

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Leer Memoria de un Proceso
« en: 18 Noviembre 2010, 07:10 am »

Tengo este codigo

Código:
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 Desconectado

Mensajes: 177



Ver Perfil
Re: Leer Memoria de un Proceso
« Respuesta #1 en: 18 Noviembre 2010, 18:16 pm »

mmm ya veo pero jamas haces la conversion del texto aqui te dejo mi code que uso para leer en memoria
Código
  1. Imports System
  2. Imports System.Text
  3. Imports System.Runtime.InteropServices
  4. Imports System.ComponentModel
  5. Imports System.Windows.Forms.Application
  6.  
  7. Module ReadMemory
  8.    <DllImport("kernel32.dll", SetLastError:=True)> Private Function ReadProcessMemory _
  9. (ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByRef lpBuffer As Byte, _
  10. ByVal iSize As Integer, ByRef lpNumberOfBytesRead As Integer) As Boolean
  11.    End Function
  12.  
  13.  
  14.    Public Sub ReadMemoryP(ByVal address As Integer)
  15.        Try
  16.  
  17. Dim process0 as string = "calc" 'process0 is the name of pocess
  18.  
  19.            Dim prox As Process() = Process.GetProcessesByName("process0")
  20.            MsgBox(GetTextinMemory(prox(0).Handle, address, 16) & GetTextinMemory(prox(0).Handle, address + 32, 16))
  21.        Catch ex As Exception
  22.            MsgBox(ex.Message)
  23.        End Try
  24.    End Sub
  25.  
  26.  
  27.    Private Function GetTextinMemory(ByVal ProcessHandle As IntPtr, ByVal MemoryAddress As IntPtr, ByVal CharsToRead As Integer, Optional ByVal IsUnicode As Boolean = True) As String
  28.        Dim ReturnValue As String = vbNullString
  29.        Dim StringBuffer() As Byte
  30.        If IsUnicode Then
  31.            ReDim StringBuffer(CharsToRead * 2 - 1)
  32.        Else
  33.            ReDim StringBuffer(CharsToRead - 1)
  34.        End If
  35.        Try
  36.            'Dim p As Process() = Process.GetProcessesByName(process0)
  37.            If ReadProcessMemory(ProcessHandle, MemoryAddress, StringBuffer(0), StringBuffer.Length, Nothing) Then
  38.                If IsUnicode Then
  39.                    ReturnValue = System.Text.Encoding.ASCII.GetString(StringBuffer)
  40.                Else
  41.                    ReturnValue = System.Text.Encoding.Default.GetString(StringBuffer)
  42.                End If
  43.            End If
  44.  
  45.        Catch ex As Exception
  46.            MsgBox(ex.Message)
  47.        End Try
  48.        Return ReturnValue
  49.    End Function
  50. End Module
  51.  


En línea

nemesysrgs

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Leer Memoria de un Proceso
« Respuesta #2 en: 19 Noviembre 2010, 18:13 pm »

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.

Código:
        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 Desconectado

Mensajes: 7


Ver Perfil
Re: Leer Memoria de un Proceso
« Respuesta #3 en: 27 Noviembre 2010, 18:13 pm »

¿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 Desconectado

Mensajes: 177



Ver Perfil
Re: Leer Memoria de un Proceso
« Respuesta #4 en: 28 Noviembre 2010, 04:02 am »

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 Desconectado

Mensajes: 7


Ver Perfil
Re: Leer Memoria de un Proceso
« Respuesta #5 en: 28 Noviembre 2010, 17:46 pm »

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 Desconectado

Mensajes: 7


Ver Perfil
Re: Leer Memoria de un Proceso
« Respuesta #6 en: 30 Noviembre 2010, 05:49 am »

Le doy un Up por que sigo sin conseguir resultados.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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 Último mensaje 9 Agosto 2010, 18:57 pm
por Pinkof
leer memoria de otro proceso
Java
TCL_ZIP 1 3,750 Último mensaje 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 Último mensaje 20 Junio 2011, 18:33 pm
por Иōҳ
Leer memoria de un proceso
Análisis y Diseño de Malware
.:Weeds:. 1 3,131 Último mensaje 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 Último mensaje 25 Agosto 2014, 19:40 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines