Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Dryken en 18 Agosto 2012, 18:20 pm



Título: Problema copiandose a si mismo a system32
Publicado por: Dryken en 18 Agosto 2012, 18:20 pm
Pretendo que al ejecutar el programa, éste se autocopie a la ruta system32, detectando por sí mismo en que ruta se ha ejecutado.

El código a simple vista parece que funciona, lo llamas copiar.exe y debería de copiarse pero surge un problema a la hora de ejecutarse.

Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3. main(){
  4.  
  5. char path[256];
  6. char nombre[60]="copiar";
  7. char* ruta=getenv("windir"); //obtiene la ruta de la instalacion de windows
  8.  
  9. strcat(ruta,"\\System32\\"); //agrega System32 a la ruta
  10. strcat(nombre,".exe"); //agrega .exe a wnws
  11. strcat(ruta,nombre); //agrega wnws.exe a C:\WINDOWS\System32
  12. HMODULE exe = GetModuleHandle(0); //nos retornara un handle al archivo usado para crear el proceso de llamada
  13. GetModuleFileName(exe, path, 256); //obtien la ruta de si mismo
  14. CopyFile(path,ruta,false); //se copia a la carpeta System32
  15. }


Título: Re: Problema copiandose a si mismo a system32
Publicado por: burbu_1 en 18 Agosto 2012, 19:03 pm
tal vez sea por los permisos.... has probado a ejecutarlo como administrador, para copiar archivos en esa ruta necesitar serlo...  :P

y otra cosilla, según  la info de la msdn para el primer parámetro de GetModuleFileName
Citar
If this parameter is NULL, GetModuleFileName retrieves the path of the executable file of the current process.
por lo que puedes sustituir
Código
  1. HMODULE exe = GetModuleHandle(0); //nos retornara un handle al archivo usado para crear el proceso de llamada
  2. GetModuleFileName(exe, path, 256); //obtien la ruta de si mismo
por
Código
  1. GetModuleFileName(0, path, 256); //obtien la ruta de si mismo


Título: Re: Problema copiandose a si mismo a system32
Publicado por: Dryken en 19 Agosto 2012, 16:10 pm
Compañero he probado a ejecutarlo como administrador para ver si así permite copiarlo en la ruta pero no funciona, dudo que ese sea el problema para que vaya.

También he probado a sustituirlo por el GetModuleFileName que me has pasado, es verdad que a apariencia debería de ir pero no es así, debería de ser otra cosa u haber otra solución.


Título: Re: Problema copiandose a si mismo a system32
Publicado por: Eternal Idol en 19 Agosto 2012, 16:38 pm
Depuralo, si GetLastError es 5 entonces es ACCESS_DENIED: ejecutalo como administrador correctamente. Otra cosa es que no deberias tratar a la cadena devuelta por getenv como si fuera un buffer propio, reserva memoria suficiente (estatica o dinamica, da igual).