elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Programa para borrar archivos desde MSDOS y pasen a la papelera
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa para borrar archivos desde MSDOS y pasen a la papelera  (Leído 3,131 veces)
wyxchari

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Programa para borrar archivos desde MSDOS y pasen a la papelera
« en: 11 Noviembre 2015, 11:40 am »

Me interesa un programa que haga desde MSDOS:
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
El solito se encarga de buscar la unidad si es C:, D:...
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
  1. Const lonreg = &H320
  2. Private Type FILETIME
  3.        dwLowDateTime As Long
  4.        dwHighDateTime As Long
  5. End Type
  6. Private Type SYSTEMTIME
  7.        wYear As Integer
  8.        wMonth As Integer
  9.        wDayOfWeek As Integer
  10.        wDay As Integer
  11.        wHour As Integer
  12.        wMinute As Integer
  13.        wSecond As Integer
  14.        wMilliseconds As Integer
  15. End Type
  16. Private Declare Function FileTimeToSystemTime Lib "kernel32" _
  17. (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
  18. Private Declare Function FileTimeToLocalFileTime Lib "kernel32" _
  19. (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
  20. Private Sub Form_Activate()
  21. Dim udtFileTime As FILETIME
  22. Dim udtFileTime2 As FILETIME
  23. Dim udtSystemTime As SYSTEMTIME
  24.  
  25. Dim a As String * lonreg
  26. x = 1
  27. Open "d:\recycler\S-1-5-~1\info2" For Random As 1 Len = lonreg
  28. ultireg = Fix(LOF(1) / lonreg)
  29. aju = lonreg - &H10
  30.  
  31. otro1:
  32. DoEvents
  33. If x > ultireg Then GoTo sale
  34. Get 1, x, a
  35. a = Right(a, aju) ' Ajuste registro por cabecera fichero
  36. If Mid(a, 5, 1) = Chr(0) Then GoTo otro3 ' Descarta los ya borrados
  37.  
  38. n1 = Mid(a, 5, InStr(5, a, Chr(0)) - 5)
  39. Print "Nombre: "; n1
  40.  
  41. pp = &H108: GoSub saca
  42. Print "Identificación: "; nn
  43.  
  44. q = Asc(Mid(a, &H10D, 1)) + Asc("A")
  45. Print "Disco: "; Chr(q)
  46.  
  47. pp = &H110: GoSub saca
  48. udtFileTime.dwLowDateTime = nn
  49. pp = &H114: GoSub saca
  50. udtFileTime.dwHighDateTime = nn
  51. FileTimeToLocalFileTime udtFileTime, udtFileTime2
  52. FileTimeToSystemTime udtFileTime2, udtSystemTime
  53. q = udtSystemTime.wDay & "/" & udtSystemTime.wMonth & "/" & udtSystemTime.wYear
  54. q = q & " " & udtSystemTime.wHour & ":" & udtSystemTime.wMinute
  55. Print "Fecha borrado: "; q
  56.  
  57. pp = &H118: GoSub saca
  58. Print "Tamaño físico en disco: "; nn
  59.  
  60. Print
  61.  
  62. otro3:
  63. x = x + 1
  64. GoTo otro1
  65.  
  66. saca:
  67. n = ""
  68. For f = pp + 1 To pp + 4
  69. n2 = Hex(Asc(Mid(a, f, 1)))
  70. If Len(n2) = 1 Then n2 = "0" & n2
  71. n = n2 & n
  72. Next f
  73. nn = Val("&h" & n)
  74. If nn < 0 Then nn = nn + 65536
  75. Return
  76.  
  77. sale:
  78. Close
  79. End Sub
  80.  


« Última modificación: 12 Noviembre 2015, 13:57 pm por Eleкtro » En línea

wyxchari

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Programa para borrar archivos desde MSDOS y pasen a la papelera
« Respuesta #1 en: 12 Noviembre 2015, 12:59 pm »

= Cambiar los get de los registros por put y probar que funciona.
- Leer los datos necesarios del archivo a borrar y guardarlos.
- Buscar un identificador disponible dentro de info2.
- Renombrar el archivo.
- Mover el archivo a la papelera.
- Anexar el nuevo registro a info2.

En construcción........................


« Última modificación: 12 Noviembre 2015, 13:01 pm por wyxchari » En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: Programa para borrar archivos desde MSDOS y pasen a la papelera
« Respuesta #2 en: 12 Noviembre 2015, 13:56 pm »

Si estás utilizando Visual Basic 6, ¿por que publicas el post en la sección de Scripting?.



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.

Los números a los que te refieres son identificadores únicos de usuario o SID (Security Identifier), para poder identificar a que usuario pertenece cada cual.

A menos que estés bajo el obsoleto Windows XP, el directorio de la papelera no se llamará "Recycler\Recycled".

Cuando mueves un archivo a la papelera, éste está "dentro de la papelera", puedes acceder a dicho archivo de manera normal, y eliminarlo definitivamente (o restaurarlo) de manera normal. (no se si en XP también)



¿Como mover un archivo a la papelera del sistema en VB6?

     Bien creando una instancia de un objeto Windows shell object:
     https://www.daniweb.com/programming/software-development/threads/416417/delete-a-file-and-go-in-recycle-bin-using-vb6

     O bien usando la WinAPI:
     http://www.freevbcode.com/ShowCode.asp?ID=76

Saludos
« Última modificación: 12 Noviembre 2015, 14:07 pm por Eleкtro » En línea



wyxchari

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Programa para borrar archivos desde MSDOS y pasen a la papelera
« Respuesta #3 en: 13 Noviembre 2015, 13:18 pm »

1.- Si estás utilizando Visual Basic 6, ¿por que publicas el post en la sección de Scripting?.
2.- ¿Como mover un archivo a la papelera del sistema en VB6?
1.- Lo siento. Fallo mío. Empecé hablando de .bat tras leer mensajes de uso de la papelera desde .bat y terminé programando en VB6.
2.- Redefino el proyecto anterior, gracias a ti, porque me han servido mucho esos enlaces. De hecho, lo acabé ayer y ha quedado de maravilla. El programa en VB6 se llama "delp.exe" y lo meto en C:\windows para que pille PATH. Desde MSDOS se usa igual que "del" sólo que "delp" borra y mete en la papelera automáticamente. Dejo el código que va con la referencia activada de Microsoft Scripting Runtime:
Código
  1. Private Type SHFILEOPSTRUCT
  2.        hwnd As Long
  3.        wFunc As Long
  4.        pFrom As String
  5.        pTo As String
  6.        fFlags As Integer
  7.        fAnyOperationsAborted As Long
  8.        hNameMappings As Long
  9.        lpszProgressTitle As String
  10. End Type
  11. Private Const FO_DELETE = &H3
  12. Private Const FOF_ALLOWUNDO = &H40
  13. Private Const FOF_NOCONFIRMATION = &H10
  14. Private Declare Function SHFileOperation Lib "shell32.dll" _
  15. Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
  16. Public fso As New FileSystemObject
  17. Private Sub Form_Load()
  18. Dim cc As String
  19. cc = Command$
  20. If cc = "" Or Dir(cc) = "" Then GoTo sale
  21. cc = fso.GetAbsolutePathName(cc)
  22. If Dir(cc) = "" Then GoTo sale
  23.  
  24. a = MoveToRecycleBin(cc, True) ' Debe tener la ruta completa. True evita confirmación
  25. If a Then MsgBox "Error: " & cc
  26.  
  27. sale:
  28. End
  29. End Sub
  30. Public Function MoveToRecycleBin _
  31. (FileSpec As String, Optional NoConfirm As Boolean = False) _
  32. As Long
  33. 'FileSpec "C:\myfile.txt" or directory/wildcard combination C:\*.txt
  34.  
  35. Dim WinType_SFO As SHFILEOPSTRUCT
  36. Dim lRet As Long
  37. Dim lFlags As Long
  38.  
  39. lFlags = FOF_ALLOWUNDO
  40. If NoConfirm Then lFlags = lFlags Or FOF_NOCONFIRMATION
  41.  
  42. With WinType_SFO
  43.    .wFunc = FO_DELETE
  44.    .pFrom = FileSpec
  45.    .fFlags = lFlags
  46. End With
  47.  
  48. lRet = SHFileOperation(WinType_SFO)
  49. MoveToRecycleBin = lRet
  50.  
  51. End Function
« Última modificación: 13 Noviembre 2015, 13:29 pm por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: Programa para borrar archivos desde MSDOS y pasen a la papelera
« Respuesta #4 en: 13 Noviembre 2015, 14:02 pm »

@wyxchari

¿Lo único que buscas es una manera de compilar un exe para usarlo mediante interfáz por linea de comandos para enviar archivos a la papelera de reciclaje?.

En ese caso, quizás esto no viene a cuento, pero ya que primero empezaste con Batch y luego con VB6, imagino que la razón es por que solo buscabas una manera de lograrlo, pues bien, entonces a modo de sugerencia te recomiendo que olvides el viejo VB6, y en su lugar lo hagas en un lenguaje óptimo como por ejemplo VB.Net para evitar trastear con código no administrado e inseguro, y tener cierto control sobre lo que haces en otros aspectos generales.

Esto es un ejemplo de aplicación de consola que no toma más de 10 minutos de desarrollo en Vb.Net, como ves es muy simple a la vez que efectivo con el uso adicional de comodines, el código proporciona bastante seguridad y es sencillo de entender. Lo puedes extender a tu gusto:



Código
  1. Imports System
  2. Imports System.Collections.Generic
  3. Imports System.IO
  4. Imports System.Linq
  5. Imports System.Text
  6. Imports Microsoft.VisualBasic.FileIO
  7.  
  8. Module Module1
  9.  
  10.    Public Sub Main()
  11.  
  12.        Dim args As IEnumerable(Of String) = Environment.GetCommandLineArgs.Skip(1)
  13.        Dim arg As String = args.FirstOrDefault
  14.        Dim files As New List(Of String)
  15.  
  16.        Console.OutputEncoding = Encoding.GetEncoding("Windows-1252")
  17.  
  18.        If Not (args.Any) Then
  19.            Console.WriteLine("Debe especificar un archivo.")
  20.            Environment.Exit(1)
  21.  
  22.        ElseIf (args.Count <> 1) Then
  23.            Console.WriteLine("Demasiados argumentos.")
  24.            Environment.Exit(1)
  25.  
  26.        ElseIf arg.StartsWith("*"c) Then
  27.            files.AddRange(Directory.GetFiles(".\", arg, IO.SearchOption.TopDirectoryOnly))
  28.            If (files.Count < 1) Then
  29.                Console.WriteLine("Ningún archivo encontrado.")
  30.                Environment.Exit(1)
  31.            End If
  32.  
  33.        ElseIf Not File.Exists(arg) Then
  34.            Console.WriteLine("El archivo especificado no existe.")
  35.            Environment.Exit(1)
  36.  
  37.        Else
  38.            files.Add(arg)
  39.  
  40.        End If
  41.  
  42.        Try
  43.            files.ForEach(Sub(filepath As String)
  44.                              My.Computer.FileSystem.DeleteFile(filepath, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin)
  45.                              Console.WriteLine(String.Format("Archivo borrado: {0}", filepath))
  46.                          End Sub)
  47.  
  48.        Catch ex As Exception
  49.            Console.WriteLine(ex.Message)
  50.            Environment.Exit(1)
  51.  
  52.        End Try
  53.  
  54.        Environment.Exit(0)
  55.  
  56.    End Sub
  57.  
  58. End Module

Saludos
« Última modificación: 13 Noviembre 2015, 14:25 pm por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Batch Para enviar Archivos a la papelera
Scripting
thejerry007 2 4,224 Último mensaje 3 Marzo 2010, 15:27 pm
por flony
programa o codigo bat para copiar archivos desde pc a Pendrive de manera oculta?
Hacking
Adcade 6 13,029 Último mensaje 27 Enero 2012, 22:58 pm
por beholdthe
modificar programa escrito para MSDOS
Programación General
sur-e 1 2,594 Último mensaje 24 Junio 2010, 10:22 am
por @synthesize
MOVIDO: Programa para borrar archivos desde MSDOS y pasen a la papelera
Scripting
Eleкtro 0 1,749 Último mensaje 12 Noviembre 2015, 13:57 pm
por Eleкtro
Programa para borrar archivos
Software
Zorronde 5 5,138 Último mensaje 16 Junio 2022, 13:30 pm
por el-brujo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines