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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Duda CSocketMaster, error al transferir un archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda CSocketMaster, error al transferir un archivo  (Leído 3,120 veces)
The_Shakah

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Duda CSocketMaster, error al transferir un archivo
« en: 26 Junio 2009, 05:15 am »

Hola amigos, les queria preguntar una duda, estoy haciendo un troyano y lo tenía hecho con la libreria winsock pero como quiero prescindir de esta libreria, me puse a buscar un clon de ella, y encontre CSocketMaster, todo el troyano funciona muy bien con CSocketMaster menos la de transferir un archivo, y es que con Winsock el servidor transfería todo el archivo entero, y el cliente lo iba recibiendo de a poco, de este modo:

Código
  1. Public Sub Enviar_Componente(Index As Integer)
  2. Dim tamaño As Long
  3. 'abrimos el archivo en modo binario de lectura
  4. Open App.Path & "\DIjpg.dll" For Binary Access Read As #1
  5.  
  6. tamaño = LOF(1) 'Tamaño en bytes de la imagen
  7. 'Redimensionamos el Array
  8. ReDim imagen(tamaño - 1)
  9. 'Leemos todo el archivo y lo almacenamos en el array imagen
  10. Get #1, , imagen
  11. Close
  12. 'Enviamos el array al cliente
  13. frmMain.Winsock2(Index).SendData imagen
  14. frmMain.ProgressBar1.Max = tamaño + 1
  15. frmMain.ProgressBar1.Visible = True
  16. End Sub

Después la progressBar va aumentando en el evento SendProgress.

Código
  1. Private Sub Winsock2_SendProgress(Index As Integer, ByVal bytesSent As Long, ByVal bytesRemaining As Long)
  2.  
  3. If progreso = True Then
  4.  
  5. ProgressBar1 = ProgressBar1 + bytesSent ' bytesSent son los bytes enviados
  6. End If
  7. End Sub

Y el cliente lo recibe de este modo:

Código
  1.        Dim Archivo() As Byte
  2.        'Aumentamos sizeFileRecibido con los datos que van llegando
  3.        sizeFileRecibido = sizeFileRecibido + bytesTotal
  4.        'Recibimos los datos y lo almacenamos en el array de bytes
  5.        Winsock1.GetData Archivo
  6.        'Escribimos en disco el array de bytes, es decir lo que va llegando
  7.        Put #1, , Archivo
  8.  
  9.        ' Si lo recibido es mayor o igual al tamaño entonces se terminó y cerramos
  10.        'el archivo abierto
  11.        If sizeFileRecibido >= sizeFile Then 'SizeFile contiene el tamaño en bytes del archivo que se esta recibiendo
  12.        'Cerramos el archivo
  13.        Close #1
  14.        sizeFileRecibido = 0
  15.        End If


Esto funciona perfectamente con Winsock, pero no así con CSocketMaster. En las normas dice que uno se limite a decir que lo que pasa, sin dar opiniones de cual cree uno que es el problema, pero si me lo permiten, creo que el problema pasa porque CSocketMaster intenta enviar todo el archivo de una, y el resultado es que envía solo 8kb aprox del total del archivo, el Winsock, en cambio, lo va enviando de a partes, de esto me doy cuenta porque el evento Data_Arrival es llamado una y otra vez con la Winsock.ocx, y en el CSocketMaster solo es llamado una vez, escribe 8kbs aprox. y nunca más sucede nada más.

Estoy casi seguro que ese es el problema, pero no tengo idea de como tengo que hacer para solucionarlo ¿Alguna ayuda?

Quizás puedan recomendarme alguna otra class para imitar al Winsock que no sea CSocket...


« Última modificación: 27 Junio 2009, 00:01 am por The_Shakah » En línea

BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 3.132


I'Love...!¡.


Ver Perfil WWW
Re: Duda CSocketMaster, error al transferir un archivo
« Respuesta #1 en: 26 Junio 2009, 05:39 am »

prueba con esto:

El codigo que te pongo esta un poco mejor (No esta optimisado ojo, ya que el el archivo final posiblemente incremente unos bytes mas xP, pero el archivo en si funcionara perfectamente.¡!)

Este tramo es para No cargar por Completo el Archivo a enviar por completo de esta forma NO USAMOS TODA LA RAM si es que fuese un archivo de un GIGA o MAS xS, por ello se puede enviar cualquier archivo.¡!
Código
  1. Dim Buffer As String * 1024             'Declaramos la variable de 1 Kb
  2. Open Archivo For Binary As #1   'Abrimos en modo binario
  3.    Do While Not EOF(1)                 'Mientras no lleguemos al final
  4.        Get #1, , Buffer
  5.        tcpCliente.SendData Buffer      'va mandando los dato
  6.    Loop                                'hasta q terminemos
  7. Close #1                                'cerramos el archivo
  8.  

'No tengo que decir nada de este.
Código
  1. Private Sub tcpServidor_DataArrival(ByVal bytesTotal As Long)
  2.    Dim Datos As String
  3.    tcpServidor.GetData Datos, vbString
  4.    Open Archivo For Binary As #1
  5.        Seek (1), LOF(1) + 1 'Nos posicionamos en el ULTIMO BYTE + 1
  6.        Put #1, , Datos 'Escribimos
  7.    Close #1
  8. End Sub
  9.  

Dulces Lunas


En línea




CScript (Actualizado 26/06/2013).

FileX <-- Re-modelando...
Web Principal-->[ Blog(VB6/C/C++) | Host File | Scan Port) ]

The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilit y el metal mi relig
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 3.132


I'Love...!¡.


Ver Perfil WWW
Re: Duda CSocketMaster, error al transferir un archivo
« Respuesta #2 en: 26 Junio 2009, 05:42 am »

el codigo que te puse carga y va enviando de 1kb cada vez hasta que sease el ultimo puedes modificarlo hasta 8kb tengo entendido.¡!, pero el archivo final si no llegase a ser multiplo de 8 quedaria un poco mas pesadito no mas de 78191 bytes
En línea




CScript (Actualizado 26/06/2013).

FileX <-- Re-modelando...
Web Principal-->[ Blog(VB6/C/C++) | Host File | Scan Port) ]

The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilit y el metal mi relig
The_Shakah

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Re: Duda CSocketMaster, error al transferir un archivo
« Respuesta #3 en: 26 Junio 2009, 06:01 am »

Muchas gracias BlackZeroX, supongo que con eso funcionará, mañana lo intento y comento, ahora me voy a dormir.

Lo que no entiendo es esto:
Código
  1.    Do While Not EOF(1)                 'Mientras no lleguemos al final
  2.        Get #1, , Buffer
  3.        tcpCliente.SendData Buffer      'va mandando los dato
  4.    Loop  

No entiendo como eso llega al final... no es un bucle infinito que almacena siempre el primer kb??

Otra cosa:

Código
  1. Dim Buffer As String * 1024    

En primer lugar no deberia ser de tipo byte la variable, o al menos integer?
Pero además de eso, no estas creando una variable de 1kb, estas creando una variable de texto vacía (0 * 1024 es = a 0)
« Última modificación: 26 Junio 2009, 06:13 am por The_Shakah » En línea

yovaninu


Desconectado Desconectado

Mensajes: 349



Ver Perfil
Re: Duda CSocketMaster, error al transferir un archivo
« Respuesta #4 en: 26 Junio 2009, 07:18 am »

Esto funciona perfectamente con Winsock, pero no así con CSocketMaster. En las normas dice que uno se limite a decir que lo que pasa, sin dar opiniones de cual cree uno que es el problema, pero si me lo permiten, creo que el problema pasa porque CSocketMaster intenta enviar todo el archivo de una, y el resultado es que envía solo 8kb aprox del total del archivo, el Winsock, en cambio, lo va enviando de a partes, de esto me doy cuenta porque el evento Data_Arrival es llamado una y otra vez con la Winsock.ocx, y en el CSocketMaster solo es llamado una vez, escribe 8kbs aprox. y nunca más sucede nada más.

Estoy casi seguro que ese es el problema, pero no tengo idea de como tengo que hacer para solucionarlo ¿Alguna ayuda?

Quizás puedan recomendarme alguna otra class para imitar al Winsock que no sea CSocket...

No no, me parece que estas equivocado,  tanto el Winsock como el CSocketMaster funcionan muy igual, no he revisado al milimetro tu code pero estoy muy seguro (salvo equivocacion universal mia) que el Csocket funciona tan igual que el Winsock, asi que si con uno funciona con el otro tambien, te lo digo por experiencia y nunca he tenido problemas ni con la Clase ni con el OCX y menos con la transferencia de archivos... deja de pensar que el CSocketMaster es menos que el OCX, nada de eso es tan o mas poderoso que Winsock.

Un saludo.
En línea

BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 3.132


I'Love...!¡.


Ver Perfil WWW
Re: Duda CSocketMaster, error al transferir un archivo
« Respuesta #5 en: 26 Junio 2009, 07:32 am »

Muchas gracias BlackZeroX, supongo que con eso funcionará, mañana lo intento y comento, ahora me voy a dormir.

Lo que no entiendo es esto:
Código
  1.    Do While Not EOF(1)                 'Mientras no lleguemos al final
  2.        Get #1, , Buffer
  3.        tcpCliente.SendData Buffer      'va mandando los dato
  4.    Loop  

No entiendo como eso llega al final... no es un bucle infinito que almacena siempre el primer kb??

Otra cosa:

Código
  1. Dim Buffer As String * 1024    

En primer lugar no deberia ser de tipo byte la variable, o al menos integer?
Pero además de eso, no estas creando una variable de 1kb, estas creando una variable de texto vacía (0 * 1024 es = a 0)

revisa esto

una variable vacia con 1.024 espacios  es igual aun vacia a 1kb... es igual que los archivos DUMMY que se usan para relleno estan con spacios o vacios pero en si pesan lo que pesan por que eso esta declado en el Disco Duño es igual lo que hice de:

Código
  1. Dim Variable as string  * 1024 ' Se llena de caracteres Chr(0)=NULL por ello es igual que SPACE(1024) o similar a FillZeroMemory o algo asi era la api...¡!
  2.  

Ahora el bucle que tui dices es infinito no lo es. pruebalo y me dices, usa Doevents por si acaso en el bucle ya sitado.¡!

Por cierto lo del Byte o integer mmm bueno eso no aplica en este codigo que te puse por que no estoy CARGADO TODO, me gusta tu codigo ya que manda y se rsive esactamente lo del archivo sin un byte mas ni uno menos. solo te puse este como alternativa.¡!

Un archivo vendria siendo en memoeria String si es que no lo manejo con con un array() tipo byte (intenerger no puede ser por optimización y por tipo de datos) 0 a 255 caracteres REALES existen en el codigo ascci por ello esta bien el tipo byte() y en el modo que lo empleas, pero al cargar una rchivo de texto y lo quieras mostrar en un textbox no lo aras en una rray lo arias en un string nada mas por simplisicidad es lo mismo solo que de otra forma extresiba... por asi decirlo (No creo que me ayas entendido pero aún asi pruebalo no pierdes nada xP).

Te recomiendo que lo pruebes.

P.D.: Es el mismo code que uso para un programa que tengo por hay y me va maravilloso, solo que no lo e actualisado pero con que funiones bien estoy contento xP.

Dulces Lunas
En línea




CScript (Actualizado 26/06/2013).

FileX <-- Re-modelando...
Web Principal-->[ Blog(VB6/C/C++) | Host File | Scan Port) ]

The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilit y el metal mi relig
The_Shakah

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Re: Duda CSocketMaster, error al transferir un archivo
« Respuesta #6 en: 26 Junio 2009, 20:52 pm »

Tu código funciona perfectamente, tube que hacer algunas modificaciones al troyano para que funcione (por ejemplo tube que aumentar el valor del progressbar.max para que pueda predecir los bytes extras que puede pesar el archivo) y cosas así, pero el código me funcionó bien.

Duda resuelta, gracias!!
En línea

BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 3.132


I'Love...!¡.


Ver Perfil WWW
Re: Duda CSocketMaster, error al transferir un archivo
« Respuesta #7 en: 26 Junio 2009, 21:05 pm »

Un Consejo.¡!

Has una regla de TRES en tu ProgressBAr para que si el archivo llegase a pesar mas de 32675 (me parece que este era el limitede la propiedad MAx del mismo progressbar) no te de error

Código
  1. 'Tan solo evitamos un Crash Posible por desvordamiento de Memoria o Similar
  2. Max=10000' Este puede ser cual sea el numero solo que debe estar entre mayor o igual a 1 hasta 32765(creo era el limite xP)
  3. ' Max es un valor Statico recomiendo dejarlo en 10000 por comodidad y presición¡!
  4. VALUE=INT((MAX)*(bytes)/FILELEN(ARCHIVO))
  5.  
  6.  

Dulces Lunas
« Última modificación: 26 Junio 2009, 21:09 pm por ░▒▓BlackZeroҖ▓▒░ » En línea




CScript (Actualizado 26/06/2013).

FileX <-- Re-modelando...
Web Principal-->[ Blog(VB6/C/C++) | Host File | Scan Port) ]

The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilit y el metal mi relig
The_Shakah

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Re: Duda CSocketMaster, error al transferir un archivo
« Respuesta #8 en: 26 Junio 2009, 23:38 pm »

Otro excelente consejo de tu parte, lo voy a hacer, (el límite es el doble de 32675, porque acordate que no usa los negativos y por lo tanto puede llegar hasta 64 mil, (la variable integer va de -32mil a 32mil, o de 0 a 64mil))
En línea

The_Shakah

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Re: Duda CSocketMaster, error al transferir un archivo
« Respuesta #9 en: 26 Junio 2009, 23:58 pm »

No no, me parece que estas equivocado,  tanto el Winsock como el CSocketMaster funcionan muy igual, no he revisado al milimetro tu code pero estoy muy seguro (salvo equivocacion universal mia) que el Csocket funciona tan igual que el Winsock, asi que si con uno funciona con el otro tambien, te lo digo por experiencia y nunca he tenido problemas ni con la Clase ni con el OCX y menos con la transferencia de archivos... deja de pensar que el CSocketMaster es menos que el OCX, nada de eso es tan o mas poderoso que Winsock.

Un saludo.

Esto es un poco alimentar al troll pero igual te voy a contestar:

Nada mas decir que no estoy equivocado, el code funciona con winsocks y no funciona con CSocket y la razón la puse muy claro en el post, ya sé cual es la razón y de hecho le mande un mail en inglés al creador de CSocket informandole sobre el bug.

Esto no es por desprestigiar al CSocket, de hecho me parece una excelentísima herramienta, pero ese bug existe, existe.


PD: Si tu code de transferir archivos funciona es porque es diferente al mío, el mío transfería todo de una, el tuyo seguramente va transfiriendo el archivo de a pedazos, como dijo BlackZeroX, al transferirlo de a pedazos el código funciona perfectamente con CSocketMaster, pero si uno lo transfiere todo junto, pues no funciona (con Winsock sí funciona).
« Última modificación: 27 Junio 2009, 00:02 am por The_Shakah » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Duda] Error con Connectify
Redes
Hurubnar 0 3,259 Último mensaje 17 Septiembre 2011, 23:34 pm
por Hurubnar
Basta con un anillo para transferir un archivo entre dispositivos táctiles
Noticias
wolfbcn 0 1,003 Último mensaje 20 Octubre 2013, 22:06 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines