Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: while en 27 Septiembre 2010, 13:31 pm



Título: sobre la inyección de dll en los offsets de una aplicación
Publicado por: while en 27 Septiembre 2010, 13:31 pm
Quería preguntar sobre una cosa sobre la inyección de dlls, a ver si podriais explicarme algo:
Quiero hacer pruebas con la programación y inyección de dlls en los offsets de una aplicación, y la importación de funciones (las hago con el Stud PE)
Estoy tratando de hacer una función "exportable", aparentemente, me deja importarla, pero luego "no hace nada" (Tampoco me da ningun error).
(Quiero que se ejecute junto al programa, y salga el MessageBox)

Os muestro el código que estoy usando:
Código
  1. #include <windows.h>
  2. #include <stdio.h>
  3.  
  4. #define EXPORT extern "C" __declspec (dllexport)
  5.  
  6.  
  7. EXPORT int main( )
  8. {
  9.   MessageBox(0,"a","b",MB_OK);
  10.   return 0;
  11. };

Podriais decirme que tengo mal, o ponerme algun ejemplo para hacer esto correctamente?

Saludos y muchas gracias.


Título: Re: sobre la inyección de dll en los offsets de una aplicación
Publicado por: Eternal Idol en 27 Septiembre 2010, 14:47 pm
Sin ver los cambios hechos en el ejecutable final es complicado pero te falta el DllMain seguro (mira la MSDN).


Título: Re: sobre la inyección de dll en los offsets de una aplicación
Publicado por: while en 27 Septiembre 2010, 15:53 pm
Gracias, ahora estoy probando con:

Código:
#include <windows.h>
#include <stdio.h>

#define EXPORT extern "C" __declspec (dllexport)


int main( )
{
return 0;
};

EXPORT int injection( ) //lazo para inyectar la dll con el Stud PE
{
return 0;
}

BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved)
{
switch(reason)
{
case DLL_PROCESS_ATTACH:
{
MessageBox(0,"a","b",MB_OK);
}
}
return TRUE;
}

Pero sigue sin aparecer el messagebox.


Título: Re: sobre la inyección de dll en los offsets de una aplicación
Publicado por: Eternal Idol en 27 Septiembre 2010, 16:50 pm
Eso probablemente quiere decir que no es cargada la DLL, comprobalo depurando o con el Process Explorer.


Título: Re: sobre la inyección de dll en los offsets de una aplicación
Publicado por: while en 27 Septiembre 2010, 21:56 pm
Eso probablemente quiere decir que no es cargada la DLL, comprobalo depurando o con el Process Explorer.
Pues al parecer no, no esta cargada :/


Título: Re: sobre la inyección de dll en los offsets de una aplicación
Publicado por: Eternal Idol en 27 Septiembre 2010, 22:30 pm
Si no llega al DllMain el problema esta en otro lado y no en la DLL.


Título: Re: sobre la inyección de dll en los offsets de una aplicación
Publicado por: while en 27 Septiembre 2010, 22:43 pm
Si no llega al DllMain el problema esta en otro lado y no en la DLL.
alguna idea de que podría ser/hacer?


Título: Re: sobre la inyección de dll en los offsets de una aplicación
Publicado por: bizco en 27 Septiembre 2010, 22:52 pm
falta ver el programa que tiene que cargar la dll.


Título: Re: sobre la inyección de dll en los offsets de una aplicación
Publicado por: Eternal Idol en 27 Septiembre 2010, 23:10 pm
Lo que intentas hacerle al PE ese ...


Título: Re: sobre la inyección de dll en los offsets de una aplicación
Publicado por: while en 28 Septiembre 2010, 02:59 am
Ya he conseguido hacer lo que quería, tenía que exportar tambien el DllMain:
Código:
#include <windows.h>
#include <stdio.h>

#define EXPORT extern "C" __declspec (dllexport)


EXPORT void injection( ){} //Anclaje

EXPORT BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved)
{
    switch(reason)
    {
        case DLL_PROCESS_ATTACH:
            MessageBox(0,"Este mensaje se muestra al abrir la aplicación","Titulo Mensaje 1",MB_OK);
            break;

        case DLL_PROCESS_DETACH:
            MessageBox(0,"Este mensaje se muestra al cerrar la aplicación","Titulo Mensaje 2",MB_OK);
            break;
    }
    return true;
}

Espero que a mas gente le sirva este hilo de ayuda/ejemplo.
Muchas gracias a todos.