Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Miseryk en 10 Abril 2014, 03:32 am



Título: [AYUDA] Borrar archivo en uso
Publicado por: Miseryk en 10 Abril 2014, 03:32 am
Hola a todos, estoy tratando de lograr borrar un archivo en uso, alguno tiene idea de como poder lograrlo?

En realidad quiero lograr algo parecido a lo que hace el programa Unlocker, que desbloquea el archivo sin tener que cerrar la aplicación que lo está usando y lo mejor es que desde la otra aplicación el archivo se sigue visualizando.

Ej: un excel o un doc



Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Eternal Idol en 10 Abril 2014, 03:59 am
Una forma de cerrar el HANDLE es usando DuplicateHandle con DUPLICATE_CLOSE_SOURCE.


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: x64core en 11 Abril 2014, 10:02 am
Unlocker utiliza ambos y un driver o hacer lo que dijo EI.


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Miseryk en 14 Abril 2014, 19:32 pm
Abrí el archivo WORD.xls
Usé el unlocker para ver el pid más el handle, que eran 8300 y 924
Ejecuté este código

Código
  1. int main()
  2. {
  3. DWORD source_pid;
  4. HANDLE oldhandle;
  5. bool success;
  6.  
  7. source_pid = 8300;
  8. oldhandle = (HANDLE)924;
  9.  
  10. LPCSTR Path = "C:\\WORD.xls";
  11.  
  12. HANDLE source_handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, source_pid);
  13. HANDLE newhandle;
  14. success = DuplicateHandle(source_handle, (HANDLE)oldhandle, GetCurrentProcess(), &newhandle, DUPLICATE_SAME_ACCESS, FALSE, DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS);
  15. success = DeleteFile(Path);
  16. CloseHandle(source_handle);
  17. success = DeleteFile(Path);
  18. CloseHandle(newhandle);
  19. success = DeleteFile(Path);
  20.  
  21. return 0;
  22. }
  23.  

Luego de ejecutar este código, usé el unlocker de nuevo, ahora me mostraba "No locking handle found"

pero no puedo eliminar el archivo...

Alguno tiene idea?


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Eternal Idol en 14 Abril 2014, 20:14 pm
Fijate que devuelve GetLastError para empezar.


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Miseryk en 14 Abril 2014, 22:09 pm
DuplicateHandle retorna true los DeleteFile retornan false


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Eternal Idol en 14 Abril 2014, 22:11 pm
Si, llama a GetLastError (http://msdn.microsoft.com/en-us/library/windows/desktop/ms679360%28v=vs.85%29.aspx) despues de DeleteFile y fijate que valor devuelve esa funcion.


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Miseryk en 14 Abril 2014, 22:33 pm
Si, llama a GetLastError (http://msdn.microsoft.com/en-us/library/windows/desktop/ms679360%28v=vs.85%29.aspx) despues de DeleteFile y fijate que valor devuelve esa funcion.

Devolvió el número 32.

Lo busqué y es ésto:

ERROR_SHARING_VIOLATION
32 (0x20)
The process cannot access the file because it is being used by another process.

Luego me dá el número 5.

ERROR_ACCESS_DENIED
5 (0x5)
Access is denied.


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Eternal Idol en 14 Abril 2014, 23:06 pm
El ERROR_SHARING_VIOLATION primero tiene sentido, intenta borrar el archivo todavia teniendo el HANDLE en tu programa y el ERROR_ACCESS_DENIED es por no tener los permisos necesarios.
 
¿Una vez que cerras el HANDLE con tu programa y este termina podes borrar el archivo con el Explorador de Windows?


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Miseryk en 15 Abril 2014, 02:08 am
El ERROR_SHARING_VIOLATION primero tiene sentido, intenta borrar el archivo todavia teniendo el HANDLE en tu programa y el ERROR_ACCESS_DENIED es por no tener los permisos necesarios.
 
¿Una vez que cerras el HANDLE con tu programa y este termina podes borrar el archivo con el Explorador de Windows?

Una vez cerrado el handle no lo puedo borrar desde Windows, inclusive con el Unlocker, porque me muestra en AMBOS que el archivo ya no tiene un handle abierto, pero no se puede eliminar a mano, y para eliminarlo tengo que usar el unlocker con la accion delete, asumo que ahí se usa el driver del unlocker, ya que ambos pueden cerrar el handle y no se puede eliminar a mano. (programación o windows)


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Eternal Idol en 15 Abril 2014, 06:00 am
Una vez cerrado el handle no lo puedo borrar desde Windows, inclusive con el Unlocker, porque me muestra en AMBOS que el archivo ya no tiene un handle abierto, pero no se puede eliminar a mano, y para eliminarlo tengo que usar el unlocker con la accion delete, asumo que ahí se usa el driver del unlocker, ya que ambos pueden cerrar el handle y no se puede eliminar a mano. (programación o windows)

¿Ejecutaste el cmd como administrador y probaste a borrar asi? Otra razon posible: el archivo es de solo lectura. Si es el caso podes usar SetFileAttributes (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365535%28v=vs.85%29.aspx) con FILE_ATTRIBUTE_NORMAL para solucionarlo y despues borrar.


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Miseryk en 15 Abril 2014, 19:37 pm
¿Ejecutaste el cmd como administrador y probaste a borrar asi? Otra razon posible: el archivo es de solo lectura. Si es el caso podes usar SetFileAttributes (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365535%28v=vs.85%29.aspx) con FILE_ATTRIBUTE_NORMAL para solucionarlo y despues borrar.

Estuve viendo con el programa Process Explorer y no me parece más el handle, pero me aparece ésto:

PROCESS      PID     Type   Name
EXCEL.EXE    5080    DLL    C:\WORD.xls


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Eternal Idol en 16 Abril 2014, 15:25 pm
¿Comprobaste lo que te dije? ¿Que Windows y Office usas? Con Windows 7 x64 y Office 2013 no reproduzco el problema ...


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Miseryk en 16 Abril 2014, 20:23 pm
Bueno agrupé todo lo que hice y lo tengo acá:

https://drive.google.com/file/d/0B_8uzBfhUWBZc2JndWFKYmlWOTQ/edit?usp=sharing (https://drive.google.com/file/d/0B_8uzBfhUWBZc2JndWFKYmlWOTQ/edit?usp=sharing)

Archivo->Descargar

Dejé un Readme Steps.txt que dice paso por paso para llegar al mismo problema en el que estoy actualmente.

PD: no hace falta compilar ni algo parecido.

PD2: está en inglés porque también lo postié en hackhound

Edit: Sry, cuando lo abrí desde acá me decía lo de la licencia del OCX, ya está patched.

Edit2: mantengo actualizado el proyecto desde ese mismo enlace.


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Eternal Idol en 16 Abril 2014, 22:27 pm
Es un archivo mappeado en memoria, no una DLL, asi que tenes que encontrar el HANDLE a su section y cerrarlo (ademas de usar UnmapViewOfFile con la direccion mappeada). ¿Como hacerlo desde modo Usuario? Yo crearia un hilo remoto, trataria de encontrar el HANDLE al objeto section que corresponde a la memoria mappeada (con ZwQuerySection y SectionBasicInformation), lo cerraria y finalmente llamaria a UnmapViewOfFile.


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Miseryk en 17 Abril 2014, 04:09 am
Nuevas noticias, estuve buscando y encontré lo siguiente:

Con Process Explorer encontré C:\WORD.xls como ésto:

Process      PID      Type   Name
EXCEL.EXE   12776   DLL   C:\WORD.xls

Traté de EyectarDll con ese nombre pero no funcionó.

Fui a las propiedades:
Load Address:   0x06510000
Mapped Size:   0x19D000 bytes
Mapping Type:   Data

Entonces fui al CheatEngine:
Attach
Memory Viewer
View -> Memory Regions (Crtl+R)

I encontré ésto:

Address      Allocation Protect   State      Protect         Type      Size   Extra
06510000   Read+Write            Commit   Read+Write   Mapped   100000   \Device\Harddisk\Volume2\WORD.xls
06610000   Read+Write            Reserve                  Mapped   9D00      \Device\Harddisk\Volume2\WORD.xls
066AD000                           Free      No Access      -         3000


Título: Re: [AYUDA] Borrar archivo en uso
Publicado por: Eternal Idol en 17 Abril 2014, 05:08 am
¿Noticias? Ya te dije que no es una DLL y que tenes que hacer, no es tan sencillo, suerte con eso.