sobre la inyección de dll en los offsets de una aplicación

Iniciado por while, 27 Septiembre 2010, 13:31 PM

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

while

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 (cpp) [Seleccionar]
#include <windows.h>
#include <stdio.h>

#define EXPORT extern "C" __declspec (dllexport)


EXPORT int main( )
{
  MessageBox(0,"a","b",MB_OK);
  return 0;
};


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

Saludos y muchas gracias.

Eternal Idol

Sin ver los cambios hechos en el ejecutable final es complicado pero te falta el DllMain seguro (mira la MSDN).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

while

Gracias, ahora estoy probando con:


#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.

Eternal Idol

Eso probablemente quiere decir que no es cargada la DLL, comprobalo depurando o con el Process Explorer.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

while

Cita de: 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.
Pues al parecer no, no esta cargada :/

Eternal Idol

Si no llega al DllMain el problema esta en otro lado y no en la DLL.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

while

Cita de: 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.
alguna idea de que podría ser/hacer?

bizco


Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

while

#9
Ya he conseguido hacer lo que quería, tenía que exportar tambien el DllMain:
#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.