Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Zitox en 8 Marzo 2015, 20:36 pm



Título: Leer imagen y ejecutar acción si cambia.
Publicado por: Zitox en 8 Marzo 2015, 20:36 pm
Buenas me acabo de registrar en este foro por que lo veo bueno y activo, soy Zitox

Vengo con una duda, eh visto en varios post de varios foros, sobre una funcion que se llama "ReadProcessMemory" Que seria para leer la memoria de un X programa.
Lo que quiero hacer creo que es eso.

Por ejemplo aca dejo una imagen:
http://fotos.subefotos.com/1409def66bcaf6efd48b1d2bdce10e3fo.jpg

Queria que detectara si el primer numero "400" esta sobre bajo del "400" y si pasa eso lo que haria seria ejecutar "x" accion.
Busque en todos lados sinceramente, pero no entrontre eso.
Encontre GetPixel de todo que tiene que ver con el tema pero no el mismo.

Espero que me puedan ayudar.

Saludos!


Título: Re: Leer imagen y ejecutar acción si cambia.
Publicado por: Miseryk en 9 Marzo 2015, 16:54 pm
Buenas me acabo de registrar en este foro por que lo veo bueno y activo, soy Zitox

Vengo con una duda, eh visto en varios post de varios foros, sobre una funcion que se llama "ReadProcessMemory" Que seria para leer la memoria de un X programa.
Lo que quiero hacer creo que es eso.

Por ejemplo aca dejo una imagen:
http://fotos.subefotos.com/1409def66bcaf6efd48b1d2bdce10e3fo.jpg

Queria que detectara si el primer numero "400" esta sobre bajo del "400" y si pasa eso lo que haria seria ejecutar "x" accion.
Busque en todos lados sinceramente, pero no entrontre eso.
Encontre GetPixel de todo que tiene que ver con el tema pero no el mismo.

Espero que me puedan ayudar.

Saludos!

Así es, ReadProcessMemory lee desde una posición de memoria tantos bytes, por lo que mostrás, puede leer desde 2 bytes a 4 bytes, si es un juego como leer la vida me imagino que son 4 bytes.

Código
  1. BOOL WINAPI ReadProcessMemory(
  2.  _In_   HANDLE hProcess,
  3.  _In_   LPCVOID lpBaseAddress,
  4.  _Out_  LPVOID lpBuffer,
  5.  _In_   SIZE_T nSize,
  6.  _Out_  SIZE_T *lpNumberOfBytesRead
  7. );
  8.  

handle del proceso, (se le hace un OpenProcess 1ro)
posición Address, (ej: 0x004561A0)
salida, (variable tuya)
bytes a leer, (cantidad, ej: 2&, 4&)
0 (vá casi siempre en cero, es para otra cosa)

PD: ReadProcessMemory es indetectable.


Título: Re: Leer imagen y ejecutar acción si cambia.
Publicado por: Zitox en 9 Marzo 2015, 21:04 pm
Muchas gracias por responder.
Yo ahora no estoy en pc que tenga el vb
Pero entiendo el code que me pasaste, cuandoi este en pc lo voy a probar.

Si necesito algo que no entiendo respndo por aca, saludos!

Devuelta, graicas por responder! Y por la onda de explicarme bien!
Zitox!


Título: Re: Leer imagen y ejecutar acción si cambia.
Publicado por: Zitox en 11 Marzo 2015, 00:15 am
Mira use este code (VB 2010):
Código:
Public Class Form1
    Private Declare Function WriteProcessMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hprocess As Integer, ByVal Address _
                                                                                           As Integer, ByRef Value As Integer, ByVal Size As Integer, ByRef BytesWritten As Integer) As Integer
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        Try
            Dim name As String = "Tutorial-i386"
            Dim hprocess As Process() = Process.GetProcessesByName(name)
            Dim address As Integer = &H2A4D00
            Dim value As Integer = TextBox1.Text
            LblVida.Text = value
            WriteProcessMemory(hprocess(0).Handle, address, value, 4, 0)
        Catch ex As Exception
        End Try
    End Sub

    Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
        Try
            Dim name As String = "Tutorial-i386"
            Dim hprocess As Process() = Process.GetProcessesByName(name)
            Dim address As Integer = &H2A4D00
            Dim value As Integer = TextBox1.Text
            WriteProcessMemory(hprocess(0).Handle, address, value, 4, 0)
        Catch ex As Exception
            MsgBox("Engine for Game")
        End Try
    End Sub
End Class

Y puse en el form, un label de name "LblVida" y un texbox1
Pero lo que hace en el textox1 es modificar el dato donde dice "Health: ***" el *** modifica instantáneamente por que es un timer de intervalo 10

(http://fotos.subefotos.com/a4280c72afe79617a8bc845aff4337c3o.jpg)

Ahora, yo quiero que en ves de dar/modificar el valor que seria el que yo le coloque al textbox1.text que seria 999, revisa el valor del "Health: ****" se entiende?

Entiendo que la solucion seria simple Write es Escribir, y read, es leer, pero no encuentro el mismo code para declararlo de Read

Muchisimas Gracias!
Zitox!


Título: Re: Leer imagen y ejecutar acción si cambia.
Publicado por: Miseryk en 11 Marzo 2015, 01:29 am
Mira use este code (VB 2010):
Código:
Public Class Form1
    Private Declare Function WriteProcessMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hprocess As Integer, ByVal Address _
                                                                                           As Integer, ByRef Value As Integer, ByVal Size As Integer, ByRef BytesWritten As Integer) As Integer
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        Try
            Dim name As String = "Tutorial-i386"
            Dim hprocess As Process() = Process.GetProcessesByName(name)
            Dim address As Integer = &H2A4D00
            Dim value As Integer = TextBox1.Text
            LblVida.Text = value
            WriteProcessMemory(hprocess(0).Handle, address, value, 4, 0)
        Catch ex As Exception
        End Try
    End Sub

    Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
        Try
            Dim name As String = "Tutorial-i386"
            Dim hprocess As Process() = Process.GetProcessesByName(name)
            Dim address As Integer = &H2A4D00
            Dim value As Integer = TextBox1.Text
            WriteProcessMemory(hprocess(0).Handle, address, value, 4, 0)
        Catch ex As Exception
            MsgBox("Engine for Game")
        End Try
    End Sub
End Class

Y puse en el form, un label de name "LblVida" y un texbox1
Pero lo que hace en el textox1 es modificar el dato donde dice "Health: ***" el *** modifica instantáneamente por que es un timer de intervalo 10

(http://fotos.subefotos.com/a4280c72afe79617a8bc845aff4337c3o.jpg)

Ahora, yo quiero que en ves de dar/modificar el valor que seria el que yo le coloque al textbox1.text que seria 999, revisa el valor del "Health: ****" se entiende?

Entiendo que la solucion seria simple Write es Escribir, y read, es leer, pero no encuentro el mismo code para declararlo de Read

Muchisimas Gracias!
Zitox!

No sé como funciona .NET, pero el address es siempre de 4 bytes (long), lo mismo con el valor, integer = 2 bytes, long = 4 bytes

PD: intentá leerlo 1ro.


Título: Re: Leer imagen y ejecutar acción si cambia.
Publicado por: Zitox en 11 Marzo 2015, 20:19 pm
Lo pude lograr, con este code
Declare asi:
Código:
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

Y adapte los timer asi:
Timer1
Código:
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        Try
            Dim name As String = "Tutorial-i386"
            Dim hprocess As Process() = Process.GetProcessesByName(name)
            Dim Ipbaseaddress As Integer = &H1874D00
            Dim IpBuffer As Integer = TextBox1.Text
            LblVida.Text = value
            ReadProcessMemory(hprocess(0).Handle, Ipbaseaddress, value, 4, 0)
        Catch ex As Exception
        End Try
    End Sub
Timer2
Código:
Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
        Try
            Dim name As String = "Tutorial-i386"
            Dim hprocess As Process() = Process.GetProcessesByName(name)
            Dim Ipbaseaddress As Integer = &H1874D00
            Dim IpBuffer As Integer = TextBox1.Text
            ReadProcessMemory(hprocess(0).Handle, Ipbaseaddress, value, 4, 0)
        Catch ex As Exception
            MsgBox("Engine for Game")
        End Try
    End Sub
End Class

Para que lo tengan, y depaso tambien lo sepan!
Saludos! Y gracias por toda la ayuda!!


Título: Re: Leer imagen y ejecutar acción si cambia.
Publicado por: Miseryk en 11 Marzo 2015, 21:07 pm
Cuando leés una posición de memoria como por ejemplo:

Código
  1. ReadProcessMemory(hprocess(0).Handle, Ipbaseaddress, value, 4, 0)
  2.  

Bueno, el Ipbaseaddress lo tenés que saber de antemano, la variable "value" tiene que ser de X cantidad de bytes como el siguiente parámetro, en este caso 4.

Luego vas a obtener los 4 bytes desde esa posición de memoria, con lo cual luego podrías hacer:

Código
  1. TextBox1.Text = value
  2.  

y listo, verías el valor leído en el textbox, ésto es muy eficiente para leer ciertas regiones de memoria para saber si te modificaron algo o no, como por ejemplo GetTickCount() por un speedhack. (Si está hookeada usualmente hay un JMP o un MOV EAX seguido del JMP EAX)

Edit:
PD: Cada vez que se hace un OpenProcess hay que hacer un CloseHandle, otra cosa, con que abras una vez sóla el proceso ya es suficiente, dejá la variable como global y listo.