Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: arenoide en 31 Mayo 2011, 22:30 pm



Título: Comunicación entre 2 programas distintos
Publicado por: arenoide en 31 Mayo 2011, 22:30 pm
Hola chicos,

Veréis, mi duda supongo que será simple, pero no sé ni como buscarla por google ni nada por el estilo.

Me gustaría saber como crear un programa que "converse" con otro hecho por otra persona para sacar información. Por ejemplo, es muy típico que en poker, se usen programas de poker que te dan estadísiticas en tiempo real y todo eso. Esos programas tienen de alguna forma que conversar con el programa de poker en cuestión para sacar toda esa información. Sabéis como lo hacen?

Muchas gracias.


Título: Re: Comunicación entre 2 programas distintos
Publicado por: madpitbull_99 en 31 Mayo 2011, 22:49 pm
Una opción es usar PIPES:

_Interprocess Communication using Named Pipes in C# (http://www.switchonthecode.com/tutorials/interprocess-communication-using-named-pipes-in-csharp).
_Inter-Process Communication in .NET Using Named Pipes Part 1 (http://www.codeproject.com/KB/threads/dotnetnamedpipespart1.aspx) - Part 2 (http://www.codeproject.com/KB/threads/dotnetnamedpipespart2.aspx).

Te dejo más documentación que te puede servir:

_Communication between applications via Windows Messages  (http://ryanfarley.com/blog/archive/2004/05/10/605.aspx).
_Use WM_COPYDATA to send data to/from C++ and C# Windows processes (http://www.codeproject.com/KB/cs/wm_copydata_use.aspx).



Título: Re: Comunicación entre 2 programas distintos
Publicado por: arenoide en 31 Mayo 2011, 22:58 pm
Pero yo del otro programa no puedo tocar nada ni decirle que me mande información alguna, porque no es un programa que haya hecho yo. Es un programa con el que quiero conversar pero del que no sé nada :S


Título: Re: Comunicación entre 2 programas distintos
Publicado por: madpitbull_99 en 31 Mayo 2011, 23:38 pm
Entonces lo que buscas, son los HOOKS.

En el foro hay bastante información sobre esto, utiliza el buscador (http://foro.elhacker.net/search.html) o Google (http://www.google.es/#sclient=psy&hl=es&source=hp&q=site:foro.elhacker.net+hook).


Título: Re: Comunicación entre 2 programas distintos
Publicado por: arenoide en 1 Junio 2011, 12:08 pm
Dado que el programa externo recibe los datos y las acciones por internet, debería centrarme en la información que el programa recibe por su puerto, no?

Cómo haría esto? Es decir, la información que he encontrado mirando por internet sobre hooking es muy amplia. Se puede recibir información de casi cualquier cosa metiendo el programa. Por ejemplo, me he bajado el API Monitor, y se lo he pasado a mi programa y recibía 30000 llamadas en menos de 2 segundos, así que he reducido el filtro solo a todo lo que es red, por lo que he comentado antes, ya que las instrucciones son simples y las recibe por internet, pues entiendo que leyendo lo que pasa en la red podría entender las acciones que toma. Pero siguen apareciendo muchas llamadas y no entiendo mucho.

Alguien podría orientarme o pasarme algún link de ayuda orientado a un caso como el mío?

Básicamente pretendo interceptar todos los movimientos que le llegan desde internet al programa de poker, de forma que pueda almacenar todos esos datos en una base de datos para analizarlos.


Título: Re: Comunicación entre 2 programas distintos
Publicado por: madpitbull_99 en 1 Junio 2011, 20:22 pm
Puedes mirar los mensajes/tramas de red, con algún sniffer como Wireshark (http://www.wireshark.org/).

PD: Por cierto, tu pregunta tiene algo que ver con .NET?


Título: Re: Comunicación entre 2 programas distintos
Publicado por: arenoide en 1 Junio 2011, 20:32 pm
Mi idea sería hacer el programa en .NET, pero el otro programa no sé si está hecho en .NET o en qué.

El caso es que hay algunos programas muy simples (y de muy poco peso) que son capaces de recoger el valor de las cartas, como por ejemplo el "Holdem Watcher"

Edito: Acabo de probar el tema de captura de paquetes y se ve que no es así como funcionan estos programas puesto que los paquetes vienen con cifrado https, así que el tema de captura de paquetes descartado.


Título: Re: Comunicación entre 2 programas distintos
Publicado por: madpitbull_99 en 2 Junio 2011, 12:17 pm
Lee los siguientes artículos:

How I Built a Working Poker Bot, Part 1 (http://www.codingthewheel.com/archives/how-i-built-a-working-poker-bot).
How I Built a Working Online Poker Bot, Part 2: Interlude (http://www.codingthewheel.com/archives/how-i-built-a-working-online-poker-bot-2).

Podrás hacerte una idea de como funcionan los bots usados para poker online.

Creo que deberían mover este tema a Programación General, dado que, de momento, poco tiene que ver con .NET.


Título: Re: Comunicación entre 2 programas distintos
Publicado por: kiriost en 6 Junio 2011, 21:13 pm
Eso sería ingresar a la memoria de otro programa para leerla, ya que allí es donde se almcenan todo los datos. Lo más sencillo si estas en windows es utilizar 2 APIs:
  • WriteProcessMemory() - escribir en memoria de un proceso
  • ReadProcessMEmory() - leer memoria de un proces
*Para abrir el proceso tendrías que utilizar OpenProcess().

Todo esto en Windows. Linux provee otras APIs para esto, como ptrace().

O también puedes utilizar los hooks.