Autor
|
Tema: Leer imagen y ejecutar acción si cambia. (Leído 2,713 veces)
|
Zitox
Desconectado
Mensajes: 10
|
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.jpgQueria 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!
|
|
|
En línea
|
|
|
|
Miseryk
Desconectado
Mensajes: 225
SI.NU.SA U.GU.DE (2NE1 - D-Unit)
|
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.jpgQueria 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. BOOL WINAPI ReadProcessMemory( _In_ HANDLE hProcess, _In_ LPCVOID lpBaseAddress, _Out_ LPVOID lpBuffer, _In_ SIZE_T nSize, _Out_ SIZE_T *lpNumberOfBytesRead );
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.
|
|
|
En línea
|
Can you see it? The worst is over The monsters in my head are scared of love Fallen people listen up! It’s never too late to change our luck So, don’t let them steal your light Don’t let them break your stride There is light on the other side And you’ll see all the raindrops falling behind Make it out tonight it’s a revolution
CL!!!
|
|
|
Zitox
Desconectado
Mensajes: 10
|
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!
|
|
|
En línea
|
|
|
|
Zitox
Desconectado
Mensajes: 10
|
Mira use este code (VB 2010): 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 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!
|
|
« Última modificación: 11 Marzo 2015, 00:21 am por Zitox »
|
En línea
|
|
|
|
Miseryk
Desconectado
Mensajes: 225
SI.NU.SA U.GU.DE (2NE1 - D-Unit)
|
Mira use este code (VB 2010): 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 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.
|
|
« Última modificación: 11 Marzo 2015, 01:31 am por Miseryk »
|
En línea
|
Can you see it? The worst is over The monsters in my head are scared of love Fallen people listen up! It’s never too late to change our luck So, don’t let them steal your light Don’t let them break your stride There is light on the other side And you’ll see all the raindrops falling behind Make it out tonight it’s a revolution
CL!!!
|
|
|
Zitox
Desconectado
Mensajes: 10
|
Lo pude lograr, con este code Declare asi: 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 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 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!!
|
|
|
En línea
|
|
|
|
Miseryk
Desconectado
Mensajes: 225
SI.NU.SA U.GU.DE (2NE1 - D-Unit)
|
Cuando leés una posición de memoria como por ejemplo: ReadProcessMemory(hprocess(0).Handle, Ipbaseaddress, value, 4, 0)
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: TextBox1.Text = value
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.
|
|
« Última modificación: 11 Marzo 2015, 21:13 pm por Miseryk »
|
En línea
|
Can you see it? The worst is over The monsters in my head are scared of love Fallen people listen up! It’s never too late to change our luck So, don’t let them steal your light Don’t let them break your stride There is light on the other side And you’ll see all the raindrops falling behind Make it out tonight it’s a revolution
CL!!!
|
|
|
|
|