Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: LeandroA en 9 Octubre 2010, 03:16 AM

Título: [Proyecto]Explorador Remoto.
Publicado por: LeandroA en 9 Octubre 2010, 03:16 AM
Hola es un poco mas de lo mismo, por el momento es un explorador remoto de archivos y carpetas realizado en vb, tiene unas cuantas herramientas.
si les interesa saber un poco mas de que se trata y descargarlo abajo esta el link.

(http://www.leandroascierto.com.ar/imagenes/ExploradorRemoto4.png)
(http://www.leandroascierto.com.ar/imagenes/ExploradorRemoto1.png)
(http://www.leandroascierto.com.ar/imagenes/ExploradorRemoto3.png)

Descargar. (http://www.leandroascierto.com.ar/categoria/Proyectos/articulo/Explorador%20Remoto.php)
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: BlackZeroX en 9 Octubre 2010, 03:37 AM
.
Muy bonito...

Yo ando haciendo algo siilar pero voy por otro modo... hasta ahora es Indetectable (los AV's no detectan las conexiones Salientes xP).

a si se me olvidaba si se compila en

P-Code

Se reduce mucho el peso del Ejecutable (De 700KB a unos 500KB)!¡, y en el cliente o Stup sea como sea... se baja de 120KB a 76KB.

Dulces Lunas!¡.
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: LeandroA en 9 Octubre 2010, 03:43 AM
aja si es cierto 76 kb, es mucho mas interesante, porque en la primera etapa pesa 120 kb voy mal ;D.

Saludos.
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: VanHan en 9 Octubre 2010, 07:59 AM
Exelente LEA!!!! muy bueno!!!!! te pasaste!!! esta barbaro!  :o :o :o :o :o :o :o :o :o


Salu2
[vHn]
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: Karcrack en 9 Octubre 2010, 10:31 AM
Ahora no puedo revisar el codigo, pero viendo las capturas se que sera buenisimo :D Mas tarde si puedo verlo te dejo un comentario mas productivo :P

Gran trabajo Leandro ;)
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: d(-_-)b en 9 Octubre 2010, 15:32 PM
Es un exelente explorador de archivos, muy bonito.

saludos...
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: Petro_Boca en 9 Octubre 2010, 18:29 PM
B-U-E-N-I-S-I-M-O.
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: Petro_Boca en 9 Octubre 2010, 20:09 PM
una pregumta...

si yo abro el CLIETE en otra pc, me va a aparecer ami?
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: d(-_-)b en 9 Octubre 2010, 21:37 PM
Para un RAT el explorador es muy bonito y muy funcional.

por cierto, nada mas hay que crear una opcion de crear servidor y poco mas, ya teneis un RAT Explorer. XD

muy bueno.

saludos... :P
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: raul338 en 9 Octubre 2010, 21:48 PM
Esta perfecto LenadroA

y... explorandolo y debugeando, en la pc de mi hermana tenia un ligero bug, que era que un disco duro no tenia etiqueta, se enviaba igual y descolocaba los items de "Otros sitios" en el explorador. La solucion:

En el proyecto cliente, Modulo de clase: clsExplorer, Procedimiento AddPathToBuffer cambiar:
Código (vb) [Seleccionar]

If sPath <> "" Then


por

Código (vb) [Seleccionar]

If sPath <> "" And sName <> "" Then


Lo mas raro es que se enviaba la unidad D: 2 veces :rolleyes:




Otra cosa, gracias a este bug habria que evitar Items de captions vacios en el ExplorerFrame :) agregando en el sub AddItem:

Código (vb) [Seleccionar]
If Caption = "" Then Exit Sub




Por otro lado, el mostrar en carpeta... yo cambiaria el shell execute por este
Código (vb) [Seleccionar]
ShellExecute 0&, "open", "explorer.exe", "/select, " & Chr$(34) & ucListView2.ItemText(Item) & Chr$(34), ucListView2.SubItemText(Item, 7), SW_SHOWNORMAL

ya que abre el explorador con el archivo seleccionado (util cuando es una carpeta con muuchos archivos)




Saludos y muuuy buen proyecto LeandroA, si bien te conteste el post del Drag&Drop (del cual nunca diste señales de vida :xD) el ucListView no tiene ni el metodo StartDrag como para hacerlo :(
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: LeandroA en 10 Octubre 2010, 03:13 AM
Gracias raul338 por reportar el bugs, ya lo estoy corrigiendo, en cuanto a lo del drag a drop que me pasaste el otro día, bueno mala educación la mía no responder ejej, pero igualmente no me sirve por el tema de que el archivo no existe en la pc, osea para poder hacerlo de esa forma primero deberia descargar el archivo y como este no trabaja de una forma sincronizada, no puedo, yo lo que necesitaria saber es el destino donde se soltó el item para luego hacer una descarga normal.
no importa que el uclistview no tenga los eventos del drag and drop yo se los agrego.
una solución no muy elegante que me salio
http://www.vbforums.com/showthread.php?t=629147
pero no esta bien ya que no funciona con el escritorio, con subitems del listview de la carpeta y menos con el treview del explorer, osea una cagada.
pero no importa ya fue.

saludos. y gracias a todos por sus comentarios.
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: raul338 en 10 Octubre 2010, 03:38 AM
[offtopic]seria mejor hablar del tema en el hilo que empezaste para ello[/offtopic]

Vi un "intento" de solucion en .net que usa un FileSystemWatcher (una clase especie de "hook" de archivos) lo cual usaba el metodo que puse ahi y con FileSystemWatcher obtenia la ruta final al cual queria copiar. Te digo aver si descubrir algo porque si en .net se puede, en vb6 tambien :xD
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: LeandroA en 10 Octubre 2010, 10:33 AM
si de echo yo pensaba lo mismo, pero no lo intente, Cobein hizo una clase FileSystemWatcher para vb6

Saludos.
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: BlackZeroX en 10 Octubre 2010, 10:43 AM
@FileSystemWatcher  me suena a algo similar a esto... ReadDirectoryChangesW

http://planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=61052&lngWId=1

Dulces Lunas!¡.
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: LeandroA en 11 Octubre 2010, 03:07 AM
Solucionado, Gracias Raul338 y BlackZeroX , habia que hacerlo con ReadDirectoryChangesW

Código (Vb) [Seleccionar]

Option Explicit

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function ReadDirectoryChangesW Lib "kernel32.dll" (ByVal hDirectory As Long, ByVal lpBuffer As Long, ByVal nBufferLength As Long, ByVal bWatchSubtree As Boolean, ByVal dwNotifyFilter As Long, lpBytesReturned As Long, ByVal lpOverlapped As Long, ByVal lpCompletionRoutine As Long) As Long
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)

Private Const FILE_SHARE_DELETE             As Long = &H4
Private Const FILE_SHARE_READ               As Long = &H1
Private Const FILE_SHARE_WRITE              As Long = &H2
Private Const FILE_LIST_DIRECTORY           As Long = &H1
Private Const OPEN_EXISTING                 As Long = &H3
Private Const FILE_FLAG_BACKUP_SEMANTICS    As Long = &H2000000
Private Const FILE_FLAG_OVERLAPPED          As Long = &H40000000
Private Const INVALID_HANDLE_VALUE          As Long = (-1)
Private Const FILE_NOTIFY_CHANGE_ALL        As Long = &H17F


Private Type OVERLAPPED
    Internal                        As Long
    InternalHigh                    As Long
    offset                          As Long
    OffsetHigh                      As Long
    hEvent                          As Long
End Type

Private Type FILE_NOTIFY_INFORMATION
    dwNextEntryOffset               As Long
    dwAction                        As Long
    dwFileNameLength                As Long
    wcFileName(1023)                As Byte
End Type


Private Type DriveChange
    hDrive                          As Long
    sDrive                          As String
    Buff(0 To 1024 * 9 - 1)         As Byte
End Type


Private aChange()           As DriveChange

Private MyFileName          As String

Private Sub Form_Load()
    MyFileName = "RemoteImagen.bmp"
    Picture1.OLEDragMode = 1
End Sub

Private Sub Picture1_OLECompleteDrag(Effect As Long)
    Debug.Print GetDestination(MyFileName)
    Kill App.Path & "\" & MyFileName
End Sub


Private Sub Picture1_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
    Open App.Path & "\" & MyFileName For Binary As #1: Close #1
   
    Call StartWatching
    Data.SetData , vbCFFiles
    Data.Files.Add App.Path & "\" & MyFileName
    AllowedEffects = vbDropEffectCopy
End Sub

Public Sub StartWatching()
    Dim lRet As Long
    Dim sBuff As String * 255
    Dim arrDrive() As String
    Dim lPos As Long
    Dim i As Long
    Dim tOLAP As OVERLAPPED
   
    lRet = GetLogicalDriveStrings(255, sBuff)

    arrDrive = Split(Left$(sBuff, lRet - 1), Chr$(0))

    For i = 0 To UBound(arrDrive)
        lRet = CreateFile(arrDrive(i), FILE_LIST_DIRECTORY, FILE_SHARE_READ Or FILE_SHARE_DELETE Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS Or FILE_FLAG_OVERLAPPED, 0&)
   
        If lRet <> INVALID_HANDLE_VALUE Then
            ReDim Preserve aChange(lPos)
            aChange(lPos).hDrive = lRet
            aChange(lPos).sDrive = arrDrive(i)
            lPos = lPos + 1
        End If
    Next
   
    For i = 0 To UBound(aChange)
        Call ReadDirectoryChangesW(aChange(i).hDrive, VarPtr(aChange(i).Buff(0)), 9216, True, FILE_NOTIFY_CHANGE_ALL, 0&, VarPtr(tOLAP), 0&)
    Next
   
End Sub

Private Function GetDestination(ByVal sName As String) As String
    Dim i As Long
    Dim sData As String
    Dim lPos As Long
    Dim lRet As Long
    Dim tFNI As FILE_NOTIFY_INFORMATION
    Dim tOLAP As OVERLAPPED
   
    Dim SafeCounter As Long
   
    Do While SafeCounter < 1000

        For i = 0 To UBound(aChange)
            lPos = 0
           
            Do
                Call CopyMemory(VarPtr(tFNI), VarPtr(aChange(i).Buff(lPos)), Len(tFNI))
   
                sData = Left$(tFNI.wcFileName, tFNI.dwFileNameLength / 2)
     
                If InStr(sData, sName) Then
                    GetDestination = aChange(i).sDrive & sData
                    GoTo StopWatching
                End If
               
                If tFNI.dwNextEntryOffset = 0 Then Exit Do
               
                lPos = lPos + tFNI.dwNextEntryOffset
            Loop
           
            Call ReadDirectoryChangesW(aChange(i).hDrive, VarPtr(aChange(i).Buff(0)), 9216, True, FILE_NOTIFY_CHANGE_ALL, 0&, VarPtr(tOLAP), 0&)
       
            DoEvents
        Next
        SafeCounter = SafeCounter + 1
       
    Loop
   
    Debug.Print "Error or Cancel"
   
StopWatching:

    For i = 0 To UBound(aChange)
        Call CloseHandle(aChange(i).hDrive)
    Next
   
    Erase aChange
   
End Function

Título: Re: [Proyecto]Explorador Remoto.
Publicado por: raul338 en 11 Octubre 2010, 04:02 AM
Fuaaaa leandro, sos un groso, yo solo vigilaba la carpeta por lo que nunca podria saber el path de destino :)

Mañana lo testeo (a cazar bugs y a entender como funciona) :P
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: ssccaann43 © en 11 Octubre 2010, 15:44 PM
Leandro Excelente...! Buen trabajo..!
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: EddyW en 11 Octubre 2010, 16:00 PM
Wenas,

Gran trabajo Leandro, voy a probarlo más tarde..[En este momento debo irme]
Viendo los Screen's se ve muy bien trabajado ;)

SaluDOS!!!
Título: Re: [Proyecto]Explorador Remoto.
Publicado por: raul338 en 11 Octubre 2010, 20:44 PM
Bueno, siempre hay que hacerlo user-like (y anti herrores del usuario XD) asi que agregue este pequeño filtro para evitar unidades de cd. Porque? Porque windows tiene su sistemita para grabar cds... y si se graba no se graba el archivo bajado sino el temporal de 0 bytes (y se pierde un cd/dvd)

Aunque dudo que alguien haga un drag&drop al cd, nunca falta el que lo prueba :xD

En el sub StartWatching...
Código (vb) [Seleccionar]

   ' Private Declare Function GetDriveTypeA Lib "kernel32" (ByVal lpRootPathName As String) As Long
   For i = 0 To UBound(arrDrive)
       If Not GetDriveTypeA(arrDrive(i)) = 5 Then
           lRet = CreateFile(arrDrive(i), FILE_LIST_DIRECTORY, FILE_SHARE_READ Or FILE_SHARE_DELETE Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS Or FILE_FLAG_OVERLAPPED, 0&)
   
           If lRet <> INVALID_HANDLE_VALUE Then
               ReDim Preserve aChange(lPos)
               aChange(lPos).hDrive = lRet
               aChange(lPos).sDrive = arrDrive(i)
               lPos = lPos + 1
           End If
       End If
   Next


Seguire viendo :P