elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  Inyección de código de función void.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Inyección de código de función void.  (Leído 3,120 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Inyección de código de función void.
« 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.

« Última modificación: 13 Abril 2016, 09:40 am por Kaxperday » En línea

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
Moderador
***
Desconectado Desconectado

Mensajes: 1.076



Ver Perfil WWW
Re: Inyección de código de función void.
« Respuesta #1 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.
En línea

Un byte a la izquierda.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines