Problema al sobrescribir

Iniciado por MasterPunk, 30 Septiembre 2010, 21:33 PM

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

MasterPunk

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

#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <dir.h>

int main()
{
    char filefox[]="C:\\Program Files\\Mozilla Firefox\\filefox.exe";
    FILE *fl = fopen(filefox,"r");
   
if( fl ) {    //Compruebo si el archivo filefox existe
fclose(fl);
exit(0); //Si existe se cierra el programa
}
else
{
CopyFile("C:\\Program Files\\Mozilla Firefox\\firefox.exe","C:\\Program Files\\Mozilla Firefox\\filefox.exe",FALSE);
//Si no existe hago una copia de firefox llamandola "filefox"

//AQUÍ ES DONDE ESTÁ EL FALLO, ahora intento sobrescribir firefox con este archivo
if(CopyFile("proyecto2.exe","C:\\Program Files\\Mozilla Firefox\\firefox.exe",FALSE)==1)
{printf("bien hecho"); //Se sobrescribe
}
else
{
   printf("mal hecho"); //No se sobrescribe
}

}
getchar();
}


(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

skapunky

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.
Killtrojan Syslog v1.44: ENTRAR

APOKLIPTICO

También podrías crear un stub que ejecute ambos firefox y tu programa, para que siga siendo funcional el firefox.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

MasterPunk

Cita de: 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...

servirá
Código (cpp) [Seleccionar]
system("taskkill firefox.exe"); ??

APOKLIPTICO

Mmh, mejor system("taskkill /f /im firefox.exe");
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

MasterPunk

Cita de: APOKLIPTICO en  1 Octubre 2010, 01:10 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)

APOKLIPTICO

Porque si no lo forzas, puede llegar a no cerrarse.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

MasterPunk

Nada, no se cierra xD
algo he hecho mal.

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

APOKLIPTICO

Debería cerrarse, probá el comando a mano.
Por que no usas GetLastError para ver cual es el error que te arroja?
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

Jaixon Jax

  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  :) ....