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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  logre un socket en nasm jeje
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: logre un socket en nasm jeje  (Leído 3,314 veces)
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
logre un socket en nasm jeje
« en: 20 Julio 2013, 22:05 pm »

yeeeeeah!! lo logre

les dejo el codigo por si a alguien mas le sirve y por si lo pierdo se que aqui estara, solo me falta el servidor pero espero se me facilite un poco mas

y gracias al consejo de cpu2 de usar direcciones en vez de usar estructuras logre hacerlo

Código
  1. [BITS 32]
  2.  
  3. section .data
  4.  
  5. wsdll: db 'ws2_32.dll',0
  6. wsaddr: dd '0xFFFFFFFF'
  7. Getpc: dd '0xFFFFFFFF'
  8.  
  9. WStp: db 'WSAStartup',0
  10. WSaddr: dd '0xFFFFFFFF'
  11. WSD: dd 'WSADATA',0
  12. saveWSA: dd '0xFFFFFFFF'
  13. soc: db 'socket',0
  14. soadd: dd '0xFFFFFFFF'
  15. conn: db 'connect', 0
  16. conaddr: dd '0xFFFFFFFF'
  17. sen: db 'send', 0
  18. sendadd: dd '0xFFFFFFFF'
  19.  
  20. res1: db "WSAStartup %d", 10, 0
  21. res2: db "Socket %d", 10, 0
  22. res3: db "connect %d", 10, 0
  23. res4: db "send %d", 10 ,0
  24.  
  25. sre: db "hola mundo",0
  26.  
  27. section .bss
  28. sn resb 10
  29.  
  30. section .text
  31.  
  32. global _WinMain@16
  33. extern _ExitProcess@4
  34. extern _LoadLibraryA@4
  35. extern _GetProcAddress@8
  36. extern _printf
  37. extern _WSAStartup@8
  38.  
  39. _WinMain@16:
  40.  
  41. xor eax, eax
  42.  
  43. push wsdll
  44. call _LoadLibraryA@4
  45. mov [wsaddr], eax
  46.  
  47. push WStp
  48. push dword [wsaddr]
  49. call _GetProcAddress@8
  50. mov [Getpc], eax
  51.  
  52. push WSD
  53. push 0x202
  54. call [Getpc]
  55. mov [saveWSA], eax
  56.  
  57. cmp dword [saveWSA], -1
  58. jne mns1
  59. je erro
  60.  
  61. mns1:
  62. push dword [saveWSA]
  63. push res1
  64. call _printf
  65.  
  66. push soc
  67. push dword [wsaddr]
  68. call _GetProcAddress@8
  69. mov [Getpc], eax
  70.  
  71. push 6
  72. push 1
  73. push 2
  74. call [Getpc]
  75. mov [soadd], eax
  76.  
  77. push dword [soadd]
  78. push res2
  79. call _printf
  80.  
  81. push conn
  82. push dword [wsaddr]
  83. call _GetProcAddress@8
  84. mov [conaddr], eax
  85.  
  86. push dword [conaddr]
  87. push res3
  88. call _printf
  89.  
  90. push 0x0100007F
  91. push 0xB9220002
  92. mov esi, esp
  93. push byte 16
  94. push esi
  95. push dword [soadd]
  96. call [conaddr]
  97.  
  98. erro:
  99. push 0
  100. call _ExitProcess@4


Habia leido sobre poner sockaddr_in en nasm pero no supe como usar estructuras asi que puse directamente la ip, el puerto y el formato de direccion (AF_INET) lo guarde en ESI, despues reserve 16 bytes de espacio para la longitud de sockaddr_in y listo, meti en la pila la longitud, ESI, el descriptor e hice un call a connect

aun me confundo en la posicion de las cosas, habia puesto el descriptor socket al inicio pero iba antes de connect

bueno, espero a alguien mas le ayude esto que si me costo trabajo, seguire estudiando todavia mas sobre asm

solo como ultima peticion, alguien me podria explicar bien el funcionamiento de ESI y EDI

funciona para concatenar o copiar?, por ejemplo

lo que haya en esi se concatena con edi

esi = 1
edi = 2

mov eax, edi
eax = 12

es algo asi?

se que significa source index y destination index y en este caso me ayudo como registro para salvar lo que habia en esp, pero muy bien aun no lo entiendo, podrian explicarme y si se puede con un ejemplo porfavor

gracias y salu2


« Última modificación: 20 Julio 2013, 23:47 pm por Belial & Grimoire » En línea

.                                 
xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: logre un socket en nasm jeje
« Respuesta #1 en: 20 Julio 2013, 23:11 pm »

Pues nada, me alegro de que lo hayas conseguido.

y gracias al consejo de cpu2 de usar direcciones en vez de usar estructuras logre hacerlo

Me parece que no entiendes muy bien lo que te explique, se nota que vienes de un lenguaje de alto nivel. Bueno ya lo entenderas.

Sobre esi y edi no se concatenan de esa forma de donde sacaste eso? simplemente copiaria 0x00000002 a eax.
Donde si tabrajan juntas esi y edi son con instrucciones especiales de manejo de cadenas.

Y sobre source index y destination index no te entendi muy bien, te refieres al stack?

Un saludo


En línea

Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: logre un socket en nasm jeje
« Respuesta #2 en: 20 Julio 2013, 23:46 pm »

jeje lo siento, no me fije que puse direcciones en ves de valores, o en otras palabras, ip, puerto y AF_INET

es que cuando buscaba informacion lei que alguien decia que ESI y EDI eran continuos, asi que imagine que lo que se ponia en uno, se concatenaba al otro, pero ya despues lei en otro lugar que era algo parecido a esto

buffer1[i++] = buffer2[j++]

por eso me confundo, porque ya no seria concatenar, seria copiar y veo que muchos usan

push esi
push edi

e incluso veo que lo usan mucho con ecx

push esi
push edi
push ecx

por eso quisiera saber cual es el proposito, de esi y edi
En línea

.                                 
xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: logre un socket en nasm jeje
« Respuesta #3 en: 21 Julio 2013, 00:25 am »

por eso me confundo, porque ya no seria concatenar, seria copiar y veo que muchos usan

push esi
push edi

e incluso veo que lo usan mucho con ecx

push esi
push edi
push ecx

por eso quisiera saber cual es el proposito, de esi y edi

Estas cargando los valores de dichos registros al stack, eso se acerca mas a concatenar.

Ejemplo, si esi vale 0x02 y edi 0x03.

Código
  1. push esi
  2. push edi

Concatenas esto 0x0000000200000003, espero que lo entiendas.

por eso quisiera saber cual es el proposito, de esi y edi

Te invito a la chincheta de documentacion, y que te mires el manual de AMD o Intel, yo tengo a mano el de AMD, en la pagina 31 y 32 del tomo numero 1, estan escritos los usos que tiene cada registro, esi y edi tienen el mismo proposito solo que tienen una diferencia.



Un saludo.

« Última modificación: 21 Julio 2013, 00:30 am por cpu2 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Mi primer programa en NASM
ASM
Debci 6 7,479 Último mensaje 2 Abril 2010, 13:23 pm
por Debci
Eso es bug del hypervisor o del NASM....
ASM
ño_ño 1 3,069 Último mensaje 15 Julio 2010, 03:58 am
por ño_ño
[NASM] String Reverse =P
ASM
Binary_Death 0 3,601 Último mensaje 28 Noviembre 2010, 19:23 pm
por Binary_Death
NASM en Linux
ASM
Stroncio 5 6,349 Último mensaje 28 Enero 2011, 02:01 am
por Stroncio
Multithread Socket (Thread per Socket)not Complete « 1 2 »
Programación Visual Basic
ntaryl 12 9,307 Último mensaje 10 Febrero 2012, 18:42 pm
por ntaryl
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines