Las hay más llenas o más vacías, conteniendo cosas banales o secretos de estado, pero lo que todos los sistemas Windows tienen en común al respecto, es que todos tienen una. En esta ocasión hablaré de Windows Vista y 7, porque de los anteriores ya se sabe bastante.
Lo primero es lo primero y el mérito en este caso corresponde a Mitchell Machor, autor del primer análisis en su documento "The Forensic Analysis of the Microsoft Windows Vista Recycle Bin". Yo sólo comento en castellano y propongo una herramienta.
Todos sabemos que cuando eliminamos una carpeta o archivo, y siempre que no mantengamos pulsado el botón de las mayúsculas, ésta o éste se almacenará temporalmente en la Papelera de reciclaje. Lo de temporalmente en ocasiones no es más que un eufemismo ya que la mayoría de las costumbres reales solemos transferirlas voluntaria o involuntariamente al mundo digital, y no son pocas aquellas que amenazan con desbordarse. ¿Pero cómo se organiza internamente este elemento tan particular?
En las últimas versiones de Windows, entiéndase Vista/7, existe un directorio oculto en cada unidad con nombre $Recycle.Bin. Sin embargo me temo que al final todos ellos apuntan al mismo lugar siendo éste su homónimo en la unidad del sistema:
%SystemDrive%\$Recycle.Bin
utilizando las variables de entorno. Si además tenemos en cuenta que Windows es un sistema multiusuario no será fácil deducir que existirá una Papelera por usuario. Veamos un ejemplo de como se gestiona esta característica en un sistema Windows 7 con dos usuarios:
C:\>dir /A:H C:\$Recycle.Bin
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: 9C87-DB2F
Directorio de C:\$Recycle.Bin
15/02/2010 20:07 <DIR> .
15/02/2010 20:07 <DIR> ..
15/02/2010 20:02 <DIR> S-1-5-21-1730169009-2451939862-3791123446-1001
15/02/2010 20:14 <DIR> S-1-5-21-1730169009-2451939862-3791123446-1003
0 archivos 0 bytes
4 dirs 14.153.822.208 bytes libres
Simple y elegante, se crea un subdirectorio utilizando para ello el SID de la cuenta correspondiente y ya se encarga el Explorador de Windows de enlazarlo adecuadamente desde la sesión del usuario. Por si hay algún despistado, más sobre SIDs en Microsoft, la Wikipedia y como no, Wadalbertia.
El valor de tiempo asociado al subdirectorio puede servir para acotar la fecha y hora de la primera sesión del usuario en el sistema, siempre que éste haya eliminado algún elemento desde dicha sesión y no haya manipulado este valor. Como suele pasar con la mayor parte de las cosas, nada es del todo seguro.
Identificado el mecanismo interno de gestión utilizado por Windows para las papeleras de los usuarios resta saber como se aclara con los diferentes elementos que almacena. Ahora, para un sistema Vista, veamos el contenido de la papelera del usuario:
C:\>dir C:\$Recycle.Bin\S-1-5-21-1435829524-487146864-2118318027-1000
El volumen de la unidad C es SYSTEM
El número de serie del volumen es: B00D-25C9
Directorio de C:\$Recycle.Bin\S-1-5-21-1435829524-487146864-2118318027-1000
21/02/2010 22:28 544 $I3UT5T8
21/02/2010 22:28 544 $IN3DQ7V.exe
21/02/2010 22:27 544 $ISW6AHM
21/02/2010 22:27 <DIR> $R3UT5T8
24/06/2009 22:18 454.656 $RN3DQ7V.exe
21/02/2010 22:27 <DIR> $RSW6AHM
4 archivos 456.288 bytes
2 dirs 19.253.620.736 bytes libres
Del listado anterior podemos obtener parejas de elementos con nombres similares si obviamos los 2 primeros carácteres. Así tendríamos:
$I3UT5T8 $IN3DQ7V.exe $ISW6AHM
$R3UT5T8 $RN3DQ7V.exe $RSW6AHM
que el Explorador de Windows interpretará como:
Pues resulta que los ficheros encargados de almacenar la información asociada a cada uno de los elementos eliminados son aquellos que empiezan por $I, y los elementos eliminados serían los que empiezan por $R. El formato interno de los ficheros de información:
- 8 bytes para la cabecera de fichero que siempre es 01 00 00 00 00 00 00 00.
- 8 bytes para el tamaño del fichero/carpeta asociado, en formato litle endian.
- 8 bytes para la fecha y hora de eliminación del fichero/carpeta, en formato litle endian y que se corresponde con el número de segundos transcurridos desde la medianoche del 1 de Enero de 1601 (windows filetime).
- El resto de bytes, 520 hasta completar los 544 que ocupa cada fichero/carpeta, se utiliza para almacenar la ruta que ocupaba originalmente el elemento antes de ser eliminado. Los carácteres que forman la ruta aparecen separados por un byte nulo (00) que también se utiliza para completar el espacio asignado.
C:\>dir C:\$Recycle.Bin\S-1-5-21-1435829524-487146864-2118318027-1000\$R3UT5T8
El volumen de la unidad C es SYSTEM
El número de serie del volumen es: B00D-25C9
Directorio de C:\$Recycle.Bin\S-1-5-21-1435829524-487146864-2118318027-1000\$R3UT5T8
21/02/2010 22:27 <DIR> .
21/02/2010 22:27 <DIR> ..
21/02/2010 22:27 <DIR> wadalbertia
21/02/2010 22:27 <DIR> web
0 archivos 0 bytes
4 dirs 19.251.822.592 bytes libres
Ahora sabiendo todo lo anterior, y como sigo aprendiendo python, vamos a ver como funciona el script:
C:\>intrash.py -h
Usage: intrash.py [options] path
Script that gets information about the contents of a recycle bin from a
Windows Vista/7 system
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-f OUTFORMAT, --format=OUTFORMAT
format of the output: normal or csv [defaults: normal]
-o OUTFILE, --output=OUTFILE
write output to OUTFILE instead of stdout
-e OUTENCODING, --output-encoding=OUTENCODING
define output encoding [defaults: utf-8]
Tal como indica la ayuda del comando por defecto la salida se vuelca en la consola utilizando utf8, por lo que los carácteres especiales como la ñ y las vocales con acentos aparecerán como caracteres extraños. Para evitar este problema primero obtendremos el encoding utilizado por defecto y posteriormente lo indicaremos en la invocación del comando:
C:\>chcp
Página de códigos activa: 850
C:\>intrash.py -e cp850 C:\$Recycle.Bin
S-1-5-21-1435829524-487146864-2118318027-1000
Trash file: $R3UT5T8
Path: C:\Users\javi\Desktop\diseñoweb
Size: 1278246 bytes
Deleted at: Sun Feb 21 21:28:01 2010 UTC
Trash file: $RN3DQ7V.exe
Path: C:\Users\javi\Desktop\putty.exe
Size: 454656 bytes
Deleted at: Sun Feb 21 21:28:21 2010 UTC
Trash file: $RSW6AHM
Path: C:\Users\javi\Desktop\Nueva carpeta
Size: 0 bytes
Deleted at: Sun Feb 21 21:27:43 2010 UTC
Ahora si queremos almacenar la salida en un fichero determinado y en formato csv de forma que podamos analizarla facilmente por ejemplo con excel:
C:\>intrash.py -e iso-8859-1 -f csv -o recyclebin.csv C:\$Recycle.Bin
C:\>dir recyclebin.csv
El volumen de la unidad C es SYSTEM
El número de serie del volumen es: B00D-25C9
Directorio de C:\
21/02/2010 23:24 458 recyclebin.csv
1 archivos 458 bytes
0 dirs 19.251.257.344 bytes libres
Para facilitar el uso de la herramienta sin tener que obligar a nadie a instalar un intérprete de python he generado los binarios adecuados mediante py2exe. Para utilizar el programa bastará con desempaquetar el fichero zip y almacenar todo su contenido en un mismo directorio, invocándolo desde allí. En el caso de que se muestre un error relacionado con la librería MSVCR90.dll deberá instalarse el paquete "Microsoft Visual C++ 2008 Redistributable Package".
El script está desarrollado de forma que también pueda utilizarse sin problemas desde linux, y como no, he tirado de la inestimable ayuda de mi profesor particular, mi amigo y compañero hilario.
Código, scripts y ejecutable: intrash.zip
En breve más, y mejor, espero.
1 comentario:
Muchas gracias me ha sido de mucha utilidad tu entrada,
saludos
Publicar un comentario