Leer datos de un programa en ejecución

Iniciado por samuelhm, 16 Noviembre 2012, 17:15 PM

0 Miembros y 1 Visitante están viendo este tema.

samuelhm

Como podria leer datos de un programa en ejecución? creo que es posible pero no encuentro documentación en español para ello.

Lo que quiero hacer, es el el software de pokerstars, cuando tienes una mesa abierta, poder recivir y guardar en variables el nombre, y tamaño de fichas de cada jugador.

Aunque seria mas interesante si se pudiera hacer sniffeando el puerto que usa para recivir los datos en este programa, para poder ejecutarlo en otro pc y hacerlo indetectable.

Un Saludo, y muchas gracias si alguien sabe donde puedo conseguir esta info.

darkangel2125

poker stars tiene una seguridad muy alta pero no imposible de romper, creo que tendras realizar captura de paquetes de datos con un programa snifer y descubrir el algoritmo y cifrado que tiene pokerstar
lo de almacenar los datos en variables tendras que diseñar un programa complejo para hacerlo despues de sacar el cifrado y el algoritmo que usa, algo que parece muy complicado si no sabes donde empezar
tendras que estudiar mucho antes de poder iniciar con tu plan
Dulce caos

samuelhm

Bueno, no tengo problemas ya que no necesito estar logueado, en vez de hacerlo sniffeando, seria mas facil hacerlo accediendo a la memoria que usa el programa, y buscar en que parte de la memoria se esta guardando estos valores y leerlos, he visto por el foro un chico que tiene un programa que saca datos de los ejecutables, pero no adjunta el codigo fuente.

samuelhm

El software lo tengo casi listo, solo necesito leer datos, a unas malas hago captura de pantalla y intento trabajar con alguna libreria que maneje imagenes. pero creo que seria mucho engorro así.

avesudra

Tienes que buscar las direcciones de memoria que usa el programa para eso y sacarlas con la función de la API de Windows :
http://msdn.microsoft.com/es-es/library/windows/desktop/ms680553%28v=vs.85%29.aspx
Regístrate en

samuelhm

Soy un poco malo con el ingles, ese es el problema.

Igualmente buscaré por google el uso de ReadProcessMemory function porque no acabo de entender que me da exactamente, de todas formas muchas gracias, ya tengo algo para buscar.

samuelhm

#6
El programa este de CHeat Engine, encuentra la direccion de memoria de las fichas de cada uno, lo malo es que tengo que buscar por ejemplo el numero de fichas y el programa extrae la direccion de memoria.

Se podria hacer automatico o es imposible ya que cada vez que se ejecuta la direccion de memoria asignada al valor de la cantidad de fichas siempre es diferente?

EDITO:
Quiero decir, para que se entienda, si yo quiero sacar los nombres y cantidad de fichas de cada jugador sin tener que buscarlo con un programa externo, y cada vez en una mesa diferente, es posible? cada vez que reinicie el programa no estaran en diferentes posiciones de la memoria?



avesudra

Posible es , como todo , pero eso ya se sale fuera de mis límites , ni idea.
Regístrate en

x64core

Cita de: samuelhm en 16 Noviembre 2012, 20:01 PM
El programa este de CHeat Engine, encuentra la direccion de memoria de las fichas de cada uno, lo malo es que tengo que buscar por ejemplo el numero de fichas y el programa extrae la direccion de memoria.

Se podria hacer automatico o es imposible ya que cada vez que se ejecuta la direccion de memoria asignada al valor de la cantidad de fichas siempre es diferente?

EDITO:
Quiero decir, para que se entienda, si yo quiero sacar los nombres y cantidad de fichas de cada jugador sin tener que buscarlo con un programa externo, y cada vez en una mesa diferente, es posible? cada vez que reinicie el programa no estaran en diferentes posiciones de la memoria?




Si, la direccion cambia debido a que probablemente el dato se almacena en un buffer creado dinamicamente o si es almacenado siempre en la sección
de datos entonces el ejecutable debe tener tabla de relocalizacion, la solucion es, comprobar si el buffer donde se almacenan los datos es creado
dinamicamente  o si es almacenado siempre en la sección de datos, si es almacenado en ella, entonces el ejecutable tiene tabla de relocalizacion y
podes obtener la direccion siempre y cuando localizes la direccion desde el archivo en el disco luego resta la direccion base menos la direccion actual en memoria, luego con la direccion ( no offset ) del dato sumas la direccion base actual del ejecutable en memoria más la direccion en memoria  del dato más
el resultado anterior ( entre la direccion base del archivo PE y la direccion base el archivo en memoria ) y obtendras la direccion del dato.

si el buffer es creado dinamicamente entonces tendras que buscar la llamada a la API que crea ese buffer y hookearla y así obtendras el puntero a los datos basandote en los parametros que se pasan al programa, obviamente el programa debe reservar bastante memoria osea varias llamadas a la API.


samuelhm

Muchas Gracias por esta gran explicación RHL, aunque la verdad ahora que he comprobado, se escapa de mis limites  :-( :-( :-(.
Intentaré ir aprendiendo poco a poco a hacerlo.