Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: Kaxperday en 13 Abril 2016, 09:30 am



Título: Inyección de código de función void.
Publicado por: Kaxperday en 13 Abril 2016, 09:30 am
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
  1. static void HookFFRequest(void){
  2. MessageBox(NULL, "hola", NULL, NULL);
  3. }

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
  1. VirtualAllocEx(process, NULL, parametersSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
  2. WriteProcessMemory(process, DataAddress, parameters, parametersSize, NULL);
  3. 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
  1. 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
  1.  
  2. typedef int (WINAPI* MsgBoxParam)(HWND, LPCSTR, LPCSTR, UINT);
  3.  
  4. struct PARAMETERS
  5. {
  6. DWORD module;
  7. char text[50];
  8. char caption[25];
  9. int buttons;
  10. //HWND handle;
  11. };
  12.  
  13. static DWORD WINAPI HookFFRequest(DWORD *module)// PARAMETERS *param)
  14. {
  15. MsgBoxParam m = (MsgBoxParam)*module;
  16. m(NULL, "HELLO", NULL, NULL);
  17.  
  18. /*MsgBoxParam MsgBox = (MsgBoxParam)param->module;
  19. int result = MsgBox(0, param->text, param->caption, param->buttons);
  20. switch (result){
  21. case IDOK:
  22. //code
  23. break;
  24. case IDCANCEL:
  25. //code
  26. break;
  27. }*/
  28. return 0;
  29. }
  30.  

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.



Título: Re: Inyección de código de función void.
Publicado por: fary en 13 Abril 2016, 22:50 pm
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.