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:
#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.
Sin ver los cambios hechos en el ejecutable final es complicado pero te falta el DllMain seguro (mira la MSDN).
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.
Eso probablemente quiere decir que no es cargada la DLL, comprobalo depurando o con el Process Explorer.
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 :/
Si no llega al DllMain el problema esta en otro lado y no en la DLL.
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?
falta ver el programa que tiene que cargar la dll.
Lo que intentas hacerle al PE ese ...
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.