Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: grester43hck en 19 Julio 2010, 18:07 pm



Título: Mandar archivo exe por socket
Publicado por: grester43hck en 19 Julio 2010, 18:07 pm
Hola! mi problema es al mandar un archivo exe por socket, lo abro como binario y lo envio, supongo que ese es el problema, que no hay que leerlo como binario :P si me dicen como se lo agradezco. aqui les dejo la parte del codigo donde lo leo/mando y deonde lo recojo/guardo:

Código:
Dim Buf As String * 1024
    Dim Todo As String
   
    Open (ruta de mi archivo.exe) For Binary As #1
            Do While Not EOF(1)
            DoEvents
            Get #1, , Buf
            Todo = Todo & Buf
        Loop
    Close
   
    envio.SendData Todo
    Exit Sub

Código:
     Dim Texto As String
   
    envio.GetData Texto
   
    Archivo = Archivo & Texto
   
    If Len(Archivo) >= Largo Then

        Open (mi ruta de guardado.exe) For Binary As #1
            Put #1, , Archivo
            Largo = 0
            Archivo = ""
        Close #1
    End If

Gracias ;).


Título: Re: Mandar archivo exe por socket
Publicado por: Elemental Code en 19 Julio 2010, 20:38 pm
Puede que yo sea un salame sin remedio perooo.

Obtener codigo:
Código
  1.    dim codigo as string 'el codigo binario
  2.    dim exefile as string 'la ruta de tu exe
  3.  
  4.    Open Exefile For Binary As #1
  5.    codigo = Space(LOF(1))
  6.    Get #1, , codigo
  7.    Close #1
  8.  

Para escribir Codigo:
Código
  1.    dim exefile as string 'la ruta adonde guardas el nuevo exe
  2.    dim codigorecibido as string 'el codigo binario que recibiste con el winsock
  3.  
  4.    Open exefile For Binary As #1
  5.    Put #1, , CodigoRecibido
  6.    Close #1


Ahora adapta eso para que funcione con tu codigo


Título: Re: Mandar archivo exe por socket
Publicado por: grester43hck en 19 Julio 2010, 21:02 pm
GRacias por responder  :D pero sigo con el problema, al pasar el archivo, se queda dañado o algo parecido y al ejecutarlo sale la tipica cmd que intenta ejecutar algo pero que no ejecuta nada   :-\ La verdad es que en transferencia de archivos no tengo mucha esperiencia que se diga...  :P pero no sera que no se puede leer como un archivo binario? al ser exe no se si eso influye... De todas formas gracias por el code, es mas pequeño que el mio y esta mas claro :P


Título: Re: Mandar archivo exe por socket
Publicado por: BlackZeroX en 20 Julio 2010, 00:09 am
GRacias por responder  :D pero sigo con el problema, al pasar el archivo, se queda dañado o algo parecido y al ejecutarlo sale la tipica cmd que intenta ejecutar algo pero que no ejecuta nada   :-\ La verdad es que en transferencia de archivos no tengo mucha esperiencia que se diga...  :P pero no sera que no se puede leer como un archivo binario? al ser exe no se si eso influye... De todas formas gracias por el code, es mas pequeño que el mio y esta mas claro :P

Intenta usar en lugar de String un Array Byte(), también usa un protocolo de transferencia, habitualmente de forma local es muy rápida la transferencia por lo cual se corta el archivo, pero son en casos Raros... intenta de igual manera no estar abriendo y cerrando tanto el archivo, déjalo abierto y cuando termine de resivir el archivo lo cierras !¡.

P.D.: Un carácter en un String = 2 bytes  1 carácter en un ArrayBye = 1 Byte xP (Lógica), ya qué el array es consecutivo y sin separador!¡, en el string es todo lo contrario!¡..

Sangriento Infierno Lunar!¡.


Título: Re: Mandar archivo exe por socket
Publicado por: grester43hck en 20 Julio 2010, 10:18 am
Bueno, vamos avanzando ^^ . Ya al menos haciendolo sin envio por socket se copia bien, lo hize con el metodo de array, ahora mi pregunta es la siguiente: ¿Como envio ese array por el socket? por que lo he intentado con un
Código:
socket.senddata array
pero no llegan los datos... ¿hago un blucle que envie todos los datos byte por byte y luego los recojo uno por uno con mensajes de confirmacion de llegada etc?
Pero supongo que abra alguna forma mas facil y rapida ¿no?

Gracias.


Título: Re: Mandar archivo exe por socket
Publicado por: BlackZeroX en 20 Julio 2010, 10:27 am
solo pasa la variable del array por el senddata!¡

Ejemplo:

Código
  1.  
  2. Dim ff                                  As Integer
  3. Dim vData()                             As Byte
  4. Dim file                                As String
  5.    file="c:\aaa.exe"
  6.    If Dir(file, vbArchive) <> "" Then
  7.        ff = FreeFile
  8.        Open file For Binary Access Read As ff
  9.            ReDim vData(LOF(ff) - 1) ' // el 0 es contable por ello se resta -1
  10.            Get ff, , vData
  11.        Close ff
  12.        S_Main_Out(index).SendData vData
  13.    Else
  14.        '   //  Log Errores
  15.    End If
  16.  
  17.  

En el servidor te recomiendo de igual manera recoger los datos con un array tipo byte solo pasa la variable en el getdata y grabalo en el archivo eso seria todo!¡.


Sangriento Infienro Lunar!¡.


Título: Re: Mandar archivo exe por socket
Publicado por: grester43hck en 20 Julio 2010, 11:38 am
Ok, antes de nada gracias de nuevo :D , como ya no se que hago mal  :-[, posteo el codigo aqui, y me decis que puede ser... Son varias partes:

La primera, envia el tamaño del archivo para luego redimensionar el array alli:
Código:
Private Sub Enviar_Click()
On Error GoTo error_Sub

    Dim servidor2 As String
    servidor2 = (ruta de mi exe)
    Dim fLen As Long
    fLen = FileLen(servidor2)
    MsgBox (Str(fLen))
    envio.SendData (Str(fLen))
    Close
    Form3.all.Text = Form3.all.Text & "Tamaño enviado... Esperando respuesta para envio..."
    Form4.Hide
Exit Sub
error_Sub:
MsgBox Err.Description, vbCritical
End Sub

La segunda parte, que envia el archivo:
Código:
Private Sub envio_DataArrival(ByVal bytesTotal As Long)
Dim vale As String
envio.GetData vale, vbString
If vale = "OK" Then
On Error GoTo error_Sub
    Dim Data() As Byte
    Dim archivo As String
    archivo = (ruta de mi exe)

    Dim fLen As Long

    Open archivo For Binary Lock Read As 1

    fLen = FileLen(archivo)

    ReDim Data(fLen) As Byte
    Get #1, , Data
    envio.SendData Data

    Close 1
    Form3.all.Text = Form3.all.Text & "Enviado... Esperando confirmacion de llegada..."
    Form4.Hide
End If
Exit Sub
error_Sub:
MsgBox Err.Description, vbCritical
End Sub

Y por ultimo el codigo de la otra aplicacion que recoje todo lo anterior:
Código:
Private Sub envio_DataArrival(ByVal bytesTotal As Long)
On Error GoTo error_Sub

    Dim Data() As Byte
    Dim recibido As String
    Dim fLen As Long
    Dim recib As Boolean
    Servidorrecibido = ""
    If recib = False Then
    envio.GetData recibido
    fLen = Val(recibido)
    envio.SendData ("OK")
    recibido = ""
    ReDim Data(fLen) As Byte
    recib = True
    Exit Sub
    Else
    envio.GetData Data
    recib = False
    Open (ruta de guardado de mi exe) For Binary Access Write As 2
    Put #2, , Data
    Close 2
    Exit Sub
    End If

error_Sub:
chat.SendData ("##Error al recibir el exe :(##" & vbCrLf)
End Sub

Eso es todo, y no funciona!!!

Gracias.


Título: Re: Mandar archivo exe por socket
Publicado por: ABDERRAMAH en 20 Julio 2010, 11:43 am
quita el on error y ejecuta en modo debug, el programa se te parará y visual studio te señalará el error.
Citar
On Error GoTo error_Sub
eso fuera y modo debug... a ver si te enteras de algo.


Título: Re: Mandar archivo exe por socket
Publicado por: grester43hck en 20 Julio 2010, 11:53 am
El caso es que error no da, es directamente que no copia el archivo...


Título: Re: Mandar archivo exe por socket
Publicado por: ABDERRAMAH en 20 Julio 2010, 12:05 pm
Buff, ahí ya me rompes...


Título: Re: Mandar archivo exe por socket
Publicado por: grester43hck en 20 Julio 2010, 14:57 pm
ok simplifique bastante el codigo y ahora si que lo envia :D peeeero como no.. no funciona... sige sin funcionar el exe que envio... es mas, prove a enviar el mismo exe pero a guardarlo en txt en vez de en exe y en vez de algo ilegible, eran todo espacios en blanco o.O ¿alguna idea de por que solo se envian o recojen espacios en blanco en vez de lo que se deve?


Título: Re: Mandar archivo exe por socket
Publicado por: FFernandez en 20 Julio 2010, 15:12 pm
Creo que debes de declarar la varible en el form como Private ó en un modulo Bas como publica para que se pueda recoger!!



         ReDim Data(fLen) '    solo al principio, cuando lo lees.


          Private data() as byte

ó

          Public data() as byte


          De esta forma permanecerá la información disponible y podras guardarlo en otro sitio.


                     Espero haberte servido de ayuda.


                                        Un saludo


Título: Re: Mandar archivo exe por socket
Publicado por: BlackZeroX en 20 Julio 2010, 22:19 pm

Antes que nada Tabula Tu Código es ILEGIBLE, no se puede detectar ningún error así, es como estar leyendo Chino!¡.

solo pasa la variable del array por el senddata!¡

Ejemplo:

Código
  1.  
  2. Dim vData() As Byte
  3. Dim ff As Integer
  4. Const OuputFile As String = "e:\aaaa.jpg"
  5.  
  6.    Winsock1.GetData vData
  7.  
  8.    ff = FreeFile
  9.    Open OuputFile For Binary As ff
  10.        Put ff, LOF(ff) + 1, vData
  11.    Close ff
  12.  
  13.  

En el servidor te recomiendo de igual manera recoger los datos con un array tipo byte solo pasa la variable en el getdata y grábalo en el archivo eso seria todo!¡.


Sangriento Infierno Lunar!¡.

en un evento DataArrival

Código
  1.  
  2. Dim vData() As Byte
  3. Dim ff As Integer
  4. Const OuputFile As String = "e:\aaaa.jpg"
  5.  
  6.    Winsock1.GetData vData
  7.  
  8.    ff = FreeFile
  9.    Open OuputFile For Binary As ff
  10.        Put ff, LOF(ff) + 1, vData
  11.    Close ff
  12.  
  13.  

Es lo ultimo qué pongo aquí...

Dulces Lunas!¡.


Título: Re: Mandar archivo exe por socket
Publicado por: grester43hck en 21 Julio 2010, 08:48 am
Bueno pues al final si salió :D ya funciona a la perfección!! muchas gracias a todos. Si quereis posteo el codigo final, pero es muy parecido al de BlackZeroX.