Código
static void HookFFRequest(void){ MessageBox(NULL, "hola", NULL, NULL); }
Y luego al inyectar reservar memoria y escribir en ella solo una vez, en vez de dos ya que no queremos pasar parámetros a la función.
Código
VirtualAllocEx(process, NULL, parametersSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(process, DataAddress, parameters, parametersSize, NULL); CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)MyFuncAddress, NULL, 0, NULL);
Sin embargo da error ¿por qué?. También he probado a inyectar pasandole de parámetro solo el modulo que devuelve GetProcAddress:
Código
DWORD module = (DWORD)GetProcAddress(hhUserModule, "MessageBox");
Y tampoco ha funcionado, ¿solo funciona si le paso todos los parámetros de la función a la que llamo?, no veo que tenga sentido hacerlo.
La idea es hacer un hook, por lo tanto la función del código que debo inyectar no tiene que llevar parámetros. Y la función sería simple código que ejecutara el hook haciendo override a la función original.
Código
typedef int (WINAPI* MsgBoxParam)(HWND, LPCSTR, LPCSTR, UINT); struct PARAMETERS { DWORD module; char text[50]; char caption[25]; int buttons; //HWND handle; }; static DWORD WINAPI HookFFRequest(DWORD *module)// PARAMETERS *param) { MsgBoxParam m = (MsgBoxParam)*module; m(NULL, "HELLO", NULL, NULL); /*MsgBoxParam MsgBox = (MsgBoxParam)param->module; int result = MsgBox(0, param->text, param->caption, param->buttons); switch (result){ case IDOK: //code break; case IDCANCEL: //code break; }*/ return 0; }
Al inyectar HookFFRequest sin parámetros o con solo el módulo no funciona, sin embargo si le paso todos los parámetros si lo hace, ¿eso es que estoy haciendo mal la inyección, no?. ¿No puedo ejecutar esa función sin pasarla nada y hacer un MessageBox directamente?.
¿porque inyectar función y luego parametros de función y luego llamar función, pudiendo inyectar solo función poniendola ahí ya los parámetros que queramos y así inyectamos solo una vez?.
Saludos, ahí voy probando.