Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: carbon1 en 26 Mayo 2012, 02:34 AM

Título: [C++] Socket + DLL Injection
Publicado por: carbon1 en 26 Mayo 2012, 02:34 AM
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.
Título: Re: [C++] Socket + DLL Injection
Publicado por: [Zero] en 26 Mayo 2012, 02:48 AM
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
Título: Re: [C++] Socket + DLL Injection
Publicado por: carbon1 en 26 Mayo 2012, 16:11 PM
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.
Título: Re: [C++] Socket + DLL Injection
Publicado por: [Zero] en 26 Mayo 2012, 17:49 PM
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
Título: Re: [C++] Socket + DLL Injection
Publicado por: carbon1 en 27 Mayo 2012, 21:54 PM
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.
Título: Re: [C++] Socket + DLL Injection
Publicado por: [Zero] en 29 Mayo 2012, 14:10 PM
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
Título: Re: [C++] Socket + DLL Injection
Publicado por: carbon1 en 31 Mayo 2012, 02:15 AM
Muchas gracias! Intentaré con todo lo que me has brindado y comento luego.