Banner 1

La Papelera de reciclaje en Windows Vista/7

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              .
15/02/2010  20:07              ..
15/02/2010  20:02              S-1-5-21-1730169009-2451939862-3791123446-1001
15/02/2010  20:14              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              $R3UT5T8
24/06/2009  22:18           454.656 $RN3DQ7V.exe
21/02/2010  22:27              $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.
Por lo que he podido experimentar no aparece ningún dato dentro del fichero de información que permita identificar si el elemento eliminado es un arhivo o una carpeta, y en el caso de que sea ésto último la modificación del nombre original únicamente afecta al elemento superior:
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              .
21/02/2010  22:27              ..
21/02/2010  22:27              wadalbertia
21/02/2010  22:27              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.


Agradecimientos a :

http://neosysforensics.blogspot.com/2010/02/la-papelera-de-reciclaje-en-windows.html

No hay comentarios:

Powered by Bad Robot
Helped by Blackubay