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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Creando un socket con FASM para Linux
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Creando un socket con FASM para Linux  (Leído 3,189 veces)
Yuki

Desconectado Desconectado

Mensajes: 80


El error es una muestra de la incompetencia.


Ver Perfil WWW
Creando un socket con FASM para Linux
« en: 26 Septiembre 2019, 16:26 pm »

Bueno, como estoy creando un malware para Linux tengo que escribir y probar código, tuve (y tengo) bastantes problemas con los sockets, no por su complejidad de uso (que es nula), sino por el simple hecho de que no obtengo los resultados deseados.

Escribí este código para encontrar el error de manera más sencilla, pero no pude hacerlo debido a que milagrosamente el código decidió funcionar sin problemas (o eso creo).


Para FASM:
Código
  1. format ELF executable 3
  2. entry start
  3.  
  4. segment readable executable
  5.  
  6. SYS_SOCKET = 1
  7. SYS_SOCKETCALL = 102
  8. SYS_WRITE = 4
  9.  
  10. start:
  11.        mov DWORD[sockparams+4*0],2 ; PF_INET - AF_INET (2)
  12.        mov DWORD[sockparams+4*1],1 ; SOCK_STREAM (1)
  13.        mov DWORD[sockparams+4*2],0 ; 0, También probé con IPPROTO_TCP (6)
  14.  
  15.        lea ecx,DWORD[sockparams]
  16.        mov ebx,SYS_SOCKET
  17.        mov eax,SYS_SOCKETCALL
  18.        int 0x80
  19.        cmp eax,0
  20.        je .MOSTRAR_MENSAJE_CERO
  21.        js .MOSTRAR_MENSAJE_MENOR_CERO
  22.        jb .MOSTRAR_MENSAJE_MENOR_CERO
  23.        ja .MOSTRAR_MENSAJE_NO_CERO
  24.        jmp .CONTINUAR
  25. .MOSTRAR_MENSAJE_CERO:
  26.        mov edx,7
  27.        mov ecx,cero_mensaje
  28.        mov ebx,1
  29.        mov eax,SYS_WRITE
  30.        int 0x80
  31.        jmp .CONTINUAR
  32. .MOSTRAR_MENSAJE_NO_CERO:
  33.        mov edx,19
  34.        mov ecx,nocero_mensaje
  35.        mov ebx,1
  36.        mov eax,SYS_WRITE
  37.        int 0x80
  38.        jmp .CONTINUAR
  39. .MOSTRAR_MENSAJE_MENOR_CERO:
  40.        mov edx,15
  41.        mov ecx,menorcero_mensaje
  42.        mov ebx,1
  43.        mov eax,SYS_WRITE
  44.        int 0x80
  45. .CONTINUAR:
  46.        mov eax,1
  47.        xor ebx,ebx
  48.        int 0x80
  49.  
  50. segment readable writeable
  51.  
  52.        sockparams rd 10
  53.  
  54.        menorcero_mensaje db 'Menor a cero...',0
  55.        cero_mensaje db 'Cero...',0
  56.        nocero_mensaje db 'Es mayor a cero! :0',0

Considero que está muy claro, pero si no se entiende no duden en decirme. Espero que les sirva a aquellas personas interesadas en la programación de bajo nivel para Linux.

Testeado en TinyCore Linux emulado mediante QEMU.


En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Creando un socket con FASM para Linux
« Respuesta #1 en: 3 Octubre 2019, 18:08 pm »

Hola

Porque en las líneas 11,12 y 13 pasas los parámetros con un mov?

No es mejor dejarlos ya preparados como los mensajes de abajo, y luego pasar el puntero de una sola instrucción?

Lo mismo con los saltos, y las etiquetas para los write, sobran instrucciones.

Si pretendes programar malware de calidad, optimiza tus códigos.

Saludos.


En línea

Yuki

Desconectado Desconectado

Mensajes: 80


El error es una muestra de la incompetencia.


Ver Perfil WWW
Re: Creando un socket con FASM para Linux
« Respuesta #2 en: 3 Octubre 2019, 22:39 pm »

Es un código de ejemplo, lo escribí de esta manera para el foro

Y si te molesta mi código, te recomiendo que veas el de SpyNET, uno de los rats más respetados... su código es un total desastre  :xD te va a agarrar una embolia cuando lo leas
« Última modificación: 3 Octubre 2019, 22:46 pm por Yuki » En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Creando un socket con FASM para Linux
« Respuesta #3 en: 3 Octubre 2019, 23:19 pm »

No me molestas tu código, simplemente es para que lo veas. Puedes escribir código entendible, sin tantas instrucciones, como lo tienes escrito para tí? Sin el ejemplo?

No conozco ese código de SpyNET, si me facilitas la búsqueda te lo agradecería.

Por último, si tienes más problemas te invito ha que los postees, este subforo está inactivo.

Saludos.
En línea

Yuki

Desconectado Desconectado

Mensajes: 80


El error es una muestra de la incompetencia.


Ver Perfil WWW
Re: Creando un socket con FASM para Linux
« Respuesta #4 en: 4 Octubre 2019, 20:32 pm »

Es un código de ejemplo, lo escribí de esta manera para el foro

Y si te molesta mi código, te recomiendo que veas el de SpyNET, uno de los rats más respetados... su código es un total desastre  :xD te va a agarrar una embolia cuando lo leas

Lo decía jugando, no es de mala manera

Dejo el código que yo considero optimizado a continuación:

Código
  1. format ELF executable 3
  2. entry start
  3.  
  4. segment readable executable
  5.  
  6. SYS_SOCKET = 1
  7. SYS_SOCKETCALL = 102
  8. SYS_WRITE = 4
  9.  
  10. start:
  11.        mov ecx,sockparams
  12.        mov ebx,SYS_SOCKET
  13.        mov eax,SYS_SOCKETCALL
  14.        int 0x80
  15.  
  16.        test eax,eax
  17.        jz .ZERO
  18.        js .BELOW_ZERO
  19.        jnz .ABOVE_ZERO
  20. .ZERO:
  21.        mov edx,7
  22.        mov ecx,cero_mensaje
  23.        jmp .WRITE
  24. .ABOVE_ZERO:
  25.        mov edx,19
  26.        mov ecx,nocero_mensaje
  27.        jmp .WRITE
  28. .BELOW_ZERO:
  29.        mov edx,15
  30.        mov ecx,menorcero_mensaje
  31. .WRITE:
  32.        xor ebx,ebx ; Dos opcode menos
  33.        inc ebx     ;
  34.        mov eax,SYS_WRITE
  35.        int 0x80
  36.  
  37.        xor eax,eax ; Dos opcode menos
  38.        inc eax     ;
  39.        xor ebx,ebx
  40.        int 0x80
  41.  
  42. segment readable writeable
  43.  
  44.        sockparams        dd 2,1,0
  45.        menorcero_mensaje db 'Menor a cero...',0
  46.        cero_mensaje      db 'Cero...',0
  47.        nocero_mensaje    db 'Es mayor a cero! :0',0

Si se puede optimizar más avisenme, por ahí necesito mejorar mis códigos. Aunque en realidad ya no uso el sistema SYS_CALL, sino que uso la librería de C para los sockets.
En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Creando un socket con FASM para Linux
« Respuesta #5 en: 5 Octubre 2019, 00:50 am »

Con la optimización te refieres al tamaño del código? O a su rapidez?

En el:

Código
  1. xor ebx, ebx
  2. Inc ebx
  3.  
  4. // Mejor
  5.  
  6. mov ebx, 1

En el del eax igual. Y arriba en los saltos lógicos podrías ahorrar el jz. Ya que si ningún salto condicional como jnz y js es válido ejecutaría la etiqueta ZERO automáticamente.

Si entiendo que no quieras usar algunas syscalls, se quedan cortas... Ejemplo el write mismo, es mucho más práctico printf, pero bueno write está enfocado a más cosas no solo a imprimir texto en pantalla atraves de su descriptor.
Saludos
« Última modificación: 5 Octubre 2019, 00:52 am por cpu2 » En línea

Yuki

Desconectado Desconectado

Mensajes: 80


El error es una muestra de la incompetencia.


Ver Perfil WWW
Re: Creando un socket con FASM para Linux
« Respuesta #6 en: 5 Octubre 2019, 04:28 am »

Está bueno el planteo, yo siempre creí que

Código
  1. xor ebx,ebx
  2. inc ebx

sería más rápido que:

Código
  1. mov ebx,1

Lo ideal siempre es optimizar la velocidad y el tamaño juntos, pero si el primero es más lento que el segundo no creo que tenga mucho sentido ahorrar 2 bytes.

Es verdad que siguen sobrando líneas, no se porqué no me dí cuenta :-\
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Aporte] .inc con api's de distitnas librerias para FASM
ASM
YST 4 5,680 Último mensaje 4 Abril 2009, 14:15 pm
por Karcrack
[problema] SOCKET EN FASM
ASM
afdlkglfgfdgfhgf 1 3,536 Último mensaje 29 Marzo 2010, 09:25 am
por bizco
socket cliente y servidor c++ / linux
Programación C/C++
d00ze13 0 4,704 Último mensaje 28 Abril 2011, 18:38 pm
por d00ze13
Creando aplicaciones portables en GNU/Linux
Noticias
wolfbcn 0 1,276 Último mensaje 4 Junio 2012, 17:41 pm
por wolfbcn
Tutorial mini-IDE para FASM con gedit (linux)
ASM
Danyfirex 2 4,461 Último mensaje 9 Mayo 2013, 15:56 pm
por _Enko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines