Inyección de código de función void.

Iniciado por Kaxperday, 13 Abril 2016, 09:30 AM

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

Kaxperday

Buenas, pues quería hacer una inyección de código de una función tal cual en otra aplicación, me refiero a inyectar una función con una declaración:

Código (cpp) [Seleccionar]

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 (cpp) [Seleccionar]

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 (cpp) [Seleccionar]

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 (cpp) [Seleccionar]


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.

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

fary

Posiblemente te estalle porque la cadena "hola" la valla a buscar a una posición de memoria la cual no existe o vete a saber que haya en ella..

Prueba a pasar todos los parámetros de MessageBoxA a 0 y nos cuentas :)

Saludos.
Un byte a la izquierda.