programa pepe.txt
que mueva el archivo automáticamente a la papelera.
En Windows, las papeleras tienen un nombre exclusivo del usuario con muchos números y además puede ser recycled (con D) según la versión de Windows c:\recycler\1-2-3-3433-343434-343434 por tanto hablaré de Windows XP que es el que tengo.
Para entrar en esas rutas, usar dir /a /x que muestra todos los archivos incluso ocultos y /x para que muestre nombres cortos y poder escribirlos rápido al hacer "cd".
En ese directorio hay un fichero oculto llamados INFO2 que tiene el registro de archivos borrados, otro llamado desktop.ini que tiene las propiedades de la carpeta que indican que es una papelera y una serie de ficheros llamados DXNNN.EXT que son los ficheros almacenados que se borraron. La X es la unidad donde estaba el archivo, NNN es un número correlativo y EXT es la extensión original.
He visto que hay gente que cree que en bat puede usarse la papelera para guardar archivos borrados, pero es falso. Aunque se copien archivos dentro de esas carpetas, no se actualiza el archivo INFO2 y luego al consultar la papelera desde el Explorador de Windows, no aparecen.
Sería posible vaciar la papelara desde .bat y hasta incluso seudorestaurar archivos dejando la copia en la papelera, pero nunca meterlos sin tocar el INFO2.
Opciones para construir el programa de borrado de un archivo desde MSDOS a través de la papelera:
1.- Crear una papelera alternativa en bat donde mover los archivos, que puede ser incluso c:\recycled, pero ya digo de antemano que poner un archivo ahí no actualiza INFO2 y no sale en la papelera realmente.
Hay que crear programa llamado "delp.bat" y meterlo en alguna ruta de búsqueda del PATH:
Código:
@echo off
move /y %* \recycler
2.- Usar la papelera de Windows y tras mover el archivo habría que tocar el INFO2. Para ello puede usarse el manual de la estructura del archivo INFO2 y la papelera de Windows: http://www.bandwidthco.com/whitepapers/compforensics/windows/Forensic%20Analysis%20of%20Microsoft%20Windows%20Recycle%20Bin%20Records.pdf
Sigo con el punto 2.
UNICODE Recycled Name File Variable, NULL terminated Start of Record+0x11C
- Crear un programa que lea INFO2 para hacer pruebas. Ya hay uno llamado "rifiuti" pero necesito programarlo desde 0 para que sea la base de los añadidos a INFO2.
Código
Const lonreg = &H320 Private Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Private Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End Type Private Declare Function FileTimeToSystemTime Lib "kernel32" _ (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long Private Declare Function FileTimeToLocalFileTime Lib "kernel32" _ (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long Private Sub Form_Activate() Dim udtFileTime As FILETIME Dim udtFileTime2 As FILETIME Dim udtSystemTime As SYSTEMTIME Dim a As String * lonreg x = 1 Open "d:\recycler\S-1-5-~1\info2" For Random As 1 Len = lonreg ultireg = Fix(LOF(1) / lonreg) aju = lonreg - &H10 otro1: DoEvents If x > ultireg Then GoTo sale Get 1, x, a a = Right(a, aju) ' Ajuste registro por cabecera fichero If Mid(a, 5, 1) = Chr(0) Then GoTo otro3 ' Descarta los ya borrados n1 = Mid(a, 5, InStr(5, a, Chr(0)) - 5) Print "Nombre: "; n1 pp = &H108: GoSub saca Print "Identificación: "; nn q = Asc(Mid(a, &H10D, 1)) + Asc("A") Print "Disco: "; Chr(q) pp = &H110: GoSub saca udtFileTime.dwLowDateTime = nn pp = &H114: GoSub saca udtFileTime.dwHighDateTime = nn FileTimeToLocalFileTime udtFileTime, udtFileTime2 FileTimeToSystemTime udtFileTime2, udtSystemTime q = udtSystemTime.wDay & "/" & udtSystemTime.wMonth & "/" & udtSystemTime.wYear q = q & " " & udtSystemTime.wHour & ":" & udtSystemTime.wMinute Print "Fecha borrado: "; q pp = &H118: GoSub saca Print "Tamaño físico en disco: "; nn otro3: x = x + 1 GoTo otro1 saca: n = "" For f = pp + 1 To pp + 4 n2 = Hex(Asc(Mid(a, f, 1))) If Len(n2) = 1 Then n2 = "0" & n2 n = n2 & n Next f nn = Val("&h" & n) If nn < 0 Then nn = nn + 65536 Return sale: Close End Sub