comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[SOLUCIONADO] Podrian indicarme si estoy usando mal recv o porque esta fallando?

  • 2 Respuestas
  • 1432 Vistas

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

Desconectado proxy_lainux

  • *
  • Underc0der
  • Mensajes: 118
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Julio 22, 2013, 09:48:06 pm »
tengo un problema con recv, no logro recibir la cadena de texto

estuve buscando como usar recv en asm, encontre en un blog como lo usaban en fasm, note que usaban dos veces la estructura sockaddr_in, una para bind guardaban eax y luego usaban la segunda estructura para usar accept con la longitud guaradada en bind

Código: ASM
  1. section .data
  2.  
  3. sockAddr    dw    AF_INET                     ; sockAddr Structure .. check API reference..
  4.     sockAddrp    dw    ?
  5.     sockAddrip    dd    0
  6.     sockAddrZ    rb    8
  7.     sockAddrSize    =    $-sockAddr                    ; Size of struct (16 bytes)
  8.  
  9.     remoAddr    dw    ?                        ; Another sockAddr Structure
  10.     remoAddrp    dw    ?
  11.     remoAddrip    dd    ?
  12.     remoAddrZ    rb    8
  13.     remoAddrSize    dd    ?
  14.  
  15.  
  16.     invoke    bind, [hSocket], sockAddr, sockAddrSize  
  17.  
  18.     .accept_loop:
  19.         mov    [remoAddrSize], sockAddrSize                ; Store our sockAddr structures size
  20.         invoke    accept, [hSocket], remoAddr, remoAddrSize        ; Accept any incoming connections
  21.         cmp    eax, -1                         ; Did we get one?
  22.         je    .accept_loop                        ; Nah, keep trying
  23.         mov    [hRemoteSocket], eax                    ; Yes we did, so store the new sockets handle
  24.     .recv_loop:
  25.         xor    eax, eax                        ; Clear eax (mov eax, 0)
  26.         mov    dword [recvBuf], eax                    ; Zero recvBuf (otherwise it keeps thinking we have data)
  27.         invoke    recv, [hRemoteSocket], recvBuf, 1024, 0         ; Try and recieve any data being sent
  28.         cmp    eax, 0                            ; Did we get any?
  29.         je    .end_recv_loop        
  30.  

intente hacer lo mismo, pero no recibo nada, no se si estoy haciendo bien el uso de accept y bind, alguien sabe porque podria estar fallando?

tengo entendido que INADDR_ANY es 0x00000000, asi que en bind pongo 0x00000000 + puerto + AF_INET y en accept pongo 0x00 en todo para que acepte cualquier conexion, y recv uso buff como buff resb 50 en .bss

alguien podria indicarme si estoy haciendo algo mal y como podria usar recv?

Código: ASM
  1. push 0x00000000
  2. push 0xB9220002
  3. mov esi,esp
  4. push byte 16
  5. push esi
  6. push dword[soadd]
  7. call [binaddr]  <-- bind()
  8.  
  9. push lis
  10. push dword [wsaddr]
  11. call _GetProcAddress@8
  12. mov [lisaddr], eax
  13.  
  14. push 2
  15. push dword[soadd]
  16. call [lisaddr] <-- listen()
  17.  
  18. push accp
  19. push dword [wsaddr]
  20. call _GetProcAddress@8
  21. mov [accaddr], eax
  22.  
  23. ac_acp:
  24. push 0x00000000
  25. push 0x00000000
  26. mov esi, esp
  27. push byte 16
  28. push dword[soadd]
  29. call [accaddr] <--- accept()
  30. cmp eax, -1
  31. je ac_acp
  32. mov [rsocket], eax <-- guardo en otro registro, no se si esto este bien pero asi lo vi en el codigo de arriba
  33.  
  34. push rec
  35. push dword [wsaddr]
  36. call _GetProcAddress@8
  37. mov [recaddr], eax
  38.  
  39. loop_recv:
  40. push 0
  41. push 1024
  42. push buff
  43. push dword[rsocket]
  44. call [recaddr]  <-- recv()
  45. cmp eax, -1
  46. je loop_recv
  47.  
  48. push eax
  49. call _printf
  50.  
« Última modificación: Agosto 30, 2014, 09:16:15 am por Expermicid »

Desconectado proxy_lainux

  • *
  • Underc0der
  • Mensajes: 118
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Julio 23, 2013, 04:11:52 pm »
bueno ya lo resolvi, era porque usaba buff como no inicializado en bss, lo puse en data y ya funciona, me manda el mensaje "hola mundo", pero obviamente finaliza y se cierran los dos

solo una duda, a ver que recomendacion me pueden dar, quiero hacer un while en recv y send para mandar y recibir datos y empezar a hacer cosas como el clasico abrir el cd-rom, apagar pantalla, crear archivos, etc, siento que con todo eso, lograre aprender a usar mejor ensamblador, ya que con mis tres semanas con esto hay muchas cosas que aun se me complica entender, y haciendo esto me a ayudado a practicar y aprender mas sobre asm

por el momento uso cmp y je que es como un if, pero como podria usar while para mantener activo recv y send, recuerdo que en C tenia que mandar algo con send() del cliente y regresar algo en send() con el servidor porque si intentaba mandar varias cosas con recv no se podia, la unica manera era, mandar con cliente, recibir con servidor - mandar servidor - recibir cliente

por ejemplo

cliente -> send = "abrir cd" - servidor -> recv  = "abrir cd"
sevidor -> send = "hecho" - cliente -> recv = "hecho"

de esa manera podia mandar varias cosas sin que se bloqueara send o recv, no se si tenga que hacer lo mismo en ensamblador, creo le llaman bloqueantes o semaforo en sockets

pero antes me gustaria saber como implementar while, porque cuando ejecuto en consola el server y despues en otra consola el cliente, se conecta y aparece en el server el mensaje de hola mundo

y hay un problema, cuando hago click en el server, se mantiene esperando la conexion, pero despues hago click sobre el cliente y aparece pero se cierra muy rapido, y solo me aparece en el server que se conecta pero no se manda ningun mensaje y el server se queda esperando algun dato, parece que solo funciona cuando es ejecutado en consola

entonces me imagino que tendre que hacer un loop para que se mande el mensaje y no se cierre el cliente, algo como en C con while

me podrian ayudar diciendome como lo podria hacer?

asi es como tengo recv()

Código: ASM
  1. loop_recv:
  2. push 0
  3. push 50
  4. push buff
  5. push dword[rsocket]
  6. call [recaddr]  <-- recv()
  7. cmp eax, -1
  8. je loop_recv

y send lo tengo asi

Código: ASM
  1. push 0
  2. push srelen
  3. push sre
  4. push dword[soadd]
  5. call [senaddr]  <-- send()
  6.  

de que forma podria implementar un while para mantener activo send y recv?

y que podria usar para que al ejecutar el server haciendo click no se cierre tan rapido, almenos que le de tiempo de mandar el mensaje antes de cerrarse?, aunque me imagino que con while ese problema se solucionaria

salu2
salu2
 

Desconectado The Swash

  • *
  • Underc0der
  • Mensajes: 18
  • Actividad:
    0%
  • Reputación 0
  • Return to reversing!
    • Ver Perfil
    • Email
  • Skype: the_swash@outlook.com
« Respuesta #2 en: Julio 23, 2013, 07:23:46 pm »
Hola,

Lo que te recomiendo es que trabajes cliente-servidor para empezar, donde el servidor es el que siempre está a la escucha y ejecuta las acciones enviadas por el cliente. Luego si quieres manejar respuestas ya te tocaría que justo cuando el cliente mande la petición al servidor se coloque en espera de recibir la respuesta del servidor y una vez terminada pues vuelve el servidor a escuchar y el cliente al prompt de lo que deseas enviar.

Y si todo lo puedes hacer dentro de un ciclo que valide el comando de salida.

Saludos.

 

¿Te gustó el post? COMPARTILO!



[SOLUCIONADO] ¿Kali Linux o Kali Linux Ligth ?

Iniciado por worq

Respuestas: 2
Vistas: 6214
Último mensaje Noviembre 21, 2017, 12:28:54 pm
por Codig0Bit
[SOLUCIONADO] Multiuploader de imagenes con mysql, hosting de imagenes con mysql

Iniciado por graphixx

Respuestas: 4
Vistas: 2123
Último mensaje Marzo 26, 2013, 05:42:58 pm
por Xt3mP
[SOLUCIONADO] ¿Como publicar un software como software libre?

Iniciado por FuriosoJack

Respuestas: 2
Vistas: 1529
Último mensaje Mayo 23, 2017, 07:24:22 am
por HATI
[SOLUCIONADO] Linux Mint, errores, errores y mas errores...

Iniciado por n1sendev

Respuestas: 12
Vistas: 2663
Último mensaje Noviembre 22, 2017, 06:50:55 am
por RuidosoBSD
[SOLUCIONADO] Problem al instalar Windows "cualquier windows"

Iniciado por Made

Respuestas: 7
Vistas: 2882
Último mensaje Septiembre 03, 2012, 04:53:08 pm
por Made