[C++] Socket + DLL Injection

Iniciado por carbon1, 26 Mayo 2012, 02:34 AM

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

carbon1

Hola a todos, los comento a continuación mi tema:
Tengo un proceso el cual crea un socket que se conecta a un servidor, e inyecto una dll. Quisiera saber (si es posible) utilizar algún método para que desde mi DLL puedan enviarse paquetes al servidor que está conectado el proceso (sabiendo el IP y puerto) desde ese mismo socket, que no cree otro mi DLL.

Gracias desde ya.

[Zero]

#1
Si, si la DLL la inyectas en tu mismo proceso es sencillo, simplemente tienes que pasarle el handle del socket a la DLL.

Si la DLL la inyectas en otro proceso con pasar el handle creo que no sirve, puedes utilizar DuplicateHandle :


http://msdn.microsoft.com/en-us/library/windows/desktop/ms724251(v=vs.85).aspx

La utilicé para una cosa hace tiempo que al final no sirvió, pero no porque la API no funcionara, debería de ir sin problemas :P .

Ahora que leí la información de la msdn vi que no sirve para duplicar el handle de un socket, o al menos no está listado ese uso ahí. Encontré este hilo, seguro te sirve para orientarte si lo que quieres hacer es compartir el socket de tu exe y la dll y estos pertenecen a distintos procesos:

http://social.msdn.microsoft.com/Forums/zh/vcgeneral/thread/c04bd359-5653-4729-a26a-ce0bec2c091e
http://msdn.microsoft.com/en-us/library/windows/desktop/ms741565(v=vs.85).aspx

Saludos

"El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche

carbon1

Gracias por la respuesta. Mira, por si no quedó claro, a un proceso el cual crea un socket, inyecto una dll con la idea de que esa dll use el mismo socket del proceso al cual se inyecta para enviar paquetes al servidor.
Ahora, por lo que tu me dices, primero debería saber el handle del socket del proceso, como podría hacer esto?

Gracias nuevamente.

P.D: Es winsock.

[Zero]

Si el proceso no es tuyo (osea, si no programaste la aplicación en la que te inyectas) la forma más fácil de obtener el handle creo que es hookear alguna API que use ese handle, como send o recv. Hookeas una API de esas, y obtienes fácil el handle del socket, ya que es uno de los argumentos que se le pasan.

Saludos

"El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche

carbon1

Te agradecería si me dejaras un ejemplo, ya que todos los que he encontrado están usando el compilador de microsoft y vs, yo uso mingw.

Gracias nuevamente.

[Zero]

Aquí el paper de MazarD sobre API Hooking:
http://docs.rtfm.us/IT/Uncategorised/apihooking.pdf

Aquí tienes un ejemplo de cómo hookear a recv() y a send():
http://foro.elhacker.net/analisis_y_diseno_de_malware/source_code_msnnightmare-t145854.0.html

Es para VC pero no creo que puedas tener problemas portándolo, sinó, piensa en usar VC, es el mejor compilador para estas cosas.

Saludos

"El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche

carbon1

Muchas gracias! Intentaré con todo lo que me has brindado y comento luego.