Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: MasterPunk en 30 Septiembre 2010, 21:33 pm



Título: Problema al sobrescribir
Publicado por: MasterPunk en 30 Septiembre 2010, 21:33 pm
Hola. Estoy escribiendo un programillo que, aunque no está destinado a ser malware (aunque quien sabe... xD), tiene una estructura con cierta similitud a un virus (o eso me parece a mi). Como creo que el error no es de programación, sino que está causado porque windows no deja realizar una acción, os escribo este tema en este subforo.
Si pensais que no corresponde a esta sección, aceptad mis disculpas y el tema.

Comencemos: lo que trato de hacer es un programa (en c++) que se ejecute cada vez que abro el firefox. Lo estoy intentando de esta manera: (solo pondré la parte del codigo que nos interesa)

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <windows.h>
  4. #include <stdio.h>
  5. #include <dir.h>
  6.  
  7. int main()
  8. {
  9.     char filefox[]="C:\\Program Files\\Mozilla Firefox\\filefox.exe";
  10.     FILE *fl = fopen(filefox,"r");
  11.  
  12. if( fl ) {    //Compruebo si el archivo filefox existe
  13. fclose(fl);
  14. exit(0); //Si existe se cierra el programa
  15. }
  16. else
  17. {
  18. CopyFile("C:\\Program Files\\Mozilla Firefox\\firefox.exe","C:\\Program Files\\Mozilla Firefox\\filefox.exe",FALSE);
  19. //Si no existe hago una copia de firefox llamandola "filefox"
  20.  
  21. //AQUÍ ES DONDE ESTÁ EL FALLO, ahora intento sobrescribir firefox con este archivo
  22. if(CopyFile("proyecto2.exe","C:\\Program Files\\Mozilla Firefox\\firefox.exe",FALSE)==1)
  23. {printf("bien hecho"); //Se sobrescribe
  24. }
  25. else
  26. {
  27.    printf("mal hecho"); //No se sobrescribe
  28. }
  29.  
  30. }
  31. getchar();
  32. }
  33.  

(finalmente quedaría ejecutar "filefox.exe" para que se abra internet normalmente)

Por desgracia se imprime en pantalla "mal hecho". Lo estoy ejecutando como administrador, y con firefox.exe cerrado.

¿Hay algo que haya olvidado tener en cuenta?
¿Lo que intento hacer es posible?
¿Hay alguna otra forma de hacelo?


PD: por si hace falta, uso win7 =P
Gracias... MasterPunk


Título: Re: Problema al sobrescribir
Publicado por: skapunky en 1 Octubre 2010, 00:11 am
Que tal si matas el proceso de firefox.exe?  :xD Si el proceso esta abierto no te deja ni sobrescribir ni eliminar el archivo...

De todas formas, podrias leer sobre BHO para ejecutar cosas con el explorador.


Título: Re: Problema al sobrescribir
Publicado por: APOKLIPTICO en 1 Octubre 2010, 00:53 am
También podrías crear un stub que ejecute ambos firefox y tu programa, para que siga siendo funcional el firefox.


Título: Re: Problema al sobrescribir
Publicado por: MasterPunk en 1 Octubre 2010, 01:07 am
Que tal si matas el proceso de firefox.exe?  :xD Si el proceso esta abierto no te deja ni sobrescribir ni eliminar el archivo...

servirá
Código
  1. system("taskkill firefox.exe");
??


Título: Re: Problema al sobrescribir
Publicado por: APOKLIPTICO en 1 Octubre 2010, 01:10 am
Mmh, mejor system("taskkill /f /im firefox.exe");


Título: Re: Problema al sobrescribir
Publicado por: MasterPunk en 1 Octubre 2010, 01:21 am
Mmh, mejor system("taskkill /f /im firefox.exe");

/f??

hara falta forzar para cerrar el firefox?? bueno, lo añado al programa y ya os cuento si funciona (pero ya para mañana)


Título: Re: Problema al sobrescribir
Publicado por: APOKLIPTICO en 1 Octubre 2010, 01:25 am
Porque si no lo forzas, puede llegar a no cerrarse.


Título: Re: Problema al sobrescribir
Publicado por: MasterPunk en 1 Octubre 2010, 01:35 am
Nada, no se cierra xD
algo he hecho mal.

De todas formas he cerrado el proceso "a mano" y tampoco sustituye el archivo.


Título: Re: Problema al sobrescribir
Publicado por: APOKLIPTICO en 1 Octubre 2010, 01:39 am
Debería cerrarse, probá el comando a mano.
Por que no usas GetLastError para ver cual es el error que te arroja?


Título: Re: Problema al sobrescribir
Publicado por: Jaixon Jax en 1 Octubre 2010, 05:41 am
  TerminateProcess, GetExitCode, ProcessNext32 lee las msdn de esas apis con apis no hay falla a no ser que el proceso este protegido en ring 0 ;D eso de estar llamando cmd a cada rato es asqueroso  :P

  La cuestion es enumerar los procesos con ProcessNext32 comparas el nombre con firefox.exe si coincide obtienes el pid del proceso con OpenProcess y luego obtienes el exitcode con GetExitCode pasandole el pid como parametro y al final lo terminas con TerminateProcess pasandole el exitcode y el handle como parametro  :) ....


Título: Re: Problema al sobrescribir
Publicado por: APOKLIPTICO en 1 Octubre 2010, 14:42 pm
Lo que vos decis igual, pero para lo que está siendo aplicado, no se va a poner a hacer todo eso, es asqueroso, opino lo mismo, pero es práctico.


Título: Re: Problema al sobrescribir
Publicado por: ApOkAlizE en 3 Octubre 2010, 11:38 am
Que tal si matas el proceso de firefox.exe?  :xD Si el proceso esta abierto no te deja ni sobrescribir ni eliminar el archivo...

servirá
Código
  1. system("taskkill firefox.exe");
??

no se con esto rpobablemente no s elelgue a terminar el proceso, intentalo con esto:
system("taskkill /f /im firefox.exe")
lo de /f es apra forzar la accion


Título: Re: Problema al sobrescribir
Publicado por: APOKLIPTICO en 3 Octubre 2010, 19:12 pm
Sisi, es lo que dije yo
Mmh, mejor system("taskkill /f /im firefox.exe");
Con un nick parecido al mío tmb...