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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [Duda] Estructuras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Duda] Estructuras  (Leído 8,750 veces)
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
[Duda] Estructuras
« en: 6 Febrero 2013, 16:56 pm »

Hola

Cuando una función requiere una estructura cargo los valores al stack, y los paso como dirección, pero la pregunta es la siguiente.

Quiero rellenar la estructura tcphdr, el encabezado tcp, pero esta no requiere que la pase a ninguna función, como se hace?

Un saludo.


En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: [Duda] Estructuras
« Respuesta #1 en: 6 Febrero 2013, 18:00 pm »

Fijate esto: http://foro.elhacker.net/programacion_cc/enviar_paquetes_tcpip-t357637.0.html

De ahi, sale esto:http://dlerch.blogspot.com.es/2007/05/raw-sockets.html

Saludos!


« Última modificación: 7 Febrero 2013, 14:13 pm por MCKSys Argentina » En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: [Duda] Estructuras
« Respuesta #2 en: 6 Febrero 2013, 20:07 pm »

¿Pero cómo implemento esa estructura a ASM?

Cómo sabe GAS o GCC que los valores son para esa estructura, porque no requiere pasarla a ninguna función.

Un saludo y gracias.

P.D: No dispongo de include, utilice la directiva pero así no compila.

En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: [Duda] Estructuras
« Respuesta #3 en: 7 Febrero 2013, 14:39 pm »

En el ejemplo de la pagina, usa esto:

Código
  1. #include <netinet/ip.h>  
  2. #include <netinet/tcp.h>
  3. ...
  4. ...
  5. /* Cabecera IP */  
  6. struct iphdr *ip = (struct iphdr *)buffer;  
  7.  
  8. /* Cabecera TCP */  
  9. struct tcphdr *tcp = (struct tcphdr *)(buffer + sizeof(struct iphdr));
  10. ...
  11. ...
  12.  

Ahora, usando Google, llegamos a un .h que contiene una de las structs:

http://freebsd.active-venture.com/FreeBSD-srctree/newsrc/netinet/tcp.h.html

Ahi está definida la estructura tcphdr en C:

Código
  1. struct tcphdr {
  2. u_short th_sport; /* source port */
  3. u_short th_dport; /* destination port */
  4. tcp_seq th_seq; /* sequence number */
  5. tcp_seq th_ack; /* acknowledgement number */
  6. #if BYTE_ORDER == LITTLE_ENDIAN
  7. u_int th_x2:4, /* (unused) */
  8. th_off:4; /* data offset */
  9. #endif
  10. #if BYTE_ORDER == BIG_ENDIAN
  11. u_int th_off:4, /* data offset */
  12. th_x2:4; /* (unused) */
  13. #endif
  14. u_char th_flags;
  15. #define TH_FIN 0x01
  16. #define TH_SYN 0x02
  17. #define TH_RST 0x04
  18. #define TH_PUSH 0x08
  19. #define TH_ACK 0x10
  20. #define TH_URG 0x20
  21. #define TH_ECE 0x40
  22. #define TH_CWR 0x80
  23. #define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)
  24.  
  25. u_short th_win; /* window */
  26. u_short th_sum; /* checksum */
  27. u_short th_urp; /* urgent pointer */
  28. };
  29.  

Inicializa todo con ceros y listo (ojo los tamaños).

Saludos!

PD: Otra fuente: http://ranger.uta.edu/~odell/TCP.H

Ten en cuenta que justo despues de la estructura IP viene la TCP (para eso usa el tamaño de la estructura ip con sizeof).
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: [Duda] Estructuras
« Respuesta #4 en: 7 Febrero 2013, 15:38 pm »

Ya miré las estrucuras, lo que pasa es que no sabia que hacer.

Tengo que hacer todo eso en la sección .data, y luego ir rellenando la estructura no?

Es lo que he visto cuando ago un disassembler.

Se puede hacer todo esto en la pila?

Así fue como lo hice con la sockaddr_in.

Un saludo.
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: [Duda] Estructuras
« Respuesta #5 en: 7 Febrero 2013, 18:36 pm »

Claro, siempre y cuando reserves el espacio necesario...
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: [Duda] Estructuras
« Respuesta #6 en: 8 Febrero 2013, 14:38 pm »

Vale, yo no reserve espacio para la sockaddr_in, bueno tendria que asignar como mucho el tamaño del buffer, que es lo veo en el primer código que me pasaste.

Esto se podría hacer con esas dos?

Código
  1. mov $0x0100007f4cdc0200, %rbx
  2. push %rbx
  3. mov %rsp, %rsi

Eso seria pasar la estructura sockaddr_in ala función bind, connect etc...

Pero hay estaba mi pregunta, tcphdr y iphdr no requieren ser pasadas a ninguna función, como se iba a saber que los datos del stack eran para esas dos estructuras.

Solamente cargo los valores en el stack y ya esta?

La función getsockopt le da la opción al descriptor para que los cabezales se tomen en cuenta.

Código:
#define	IP_HDRINCL		2    /* int; header is included with data */

Pero eso lleva de nuevo amí pregunta, como sabén que los datos del stack son para esas estrcucturas.

Un saludo.

P.D: Perdona, soy un pesado, pero es que estas cosas no salen en los libros pffff...

« Última modificación: 8 Febrero 2013, 14:39 pm por cpu2 » En línea

fary


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: [Duda] Estructuras
« Respuesta #7 en: 9 Febrero 2013, 06:17 am »

Vamos a ver... si una función no va a necesitar una estructura no se escribe esa estructura.. es así de facil, pero no en ensamblador, en cualquier lenguaje.

Cual es tu problema?

un saludo.
En línea

Un byte a la izquierda.
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: [Duda] Estructuras
« Respuesta #8 en: 10 Febrero 2013, 15:57 pm »

Vamos a ver... si una función no va a necesitar una estructura no se escribe esa estructura.. es así de facil, pero no en ensamblador, en cualquier lenguaje.

Cual es tu problema?

un saludo.

Mi problema es que quiero cambiar la dirección de origen, y no se como implementarlo en ASM.

Al ser posible como el ejemplo de arriba, que ya veo que a causado más confusión.

Un saludo.

P.D: Un ejemplo me iría de perlas.
En línea

fary


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: [Duda] Estructuras
« Respuesta #9 en: 10 Febrero 2013, 16:05 pm »

A ver si me entero... quieres rellenar tu una estructura a mano envez de que te lo haga una API, no?

Eso se hace mov mov o con push y pop facilmente, ejemplo:

En la sección data:
Código
  1. struct Numeros
  2.    Numero1        dd ?
  3.    Numero2        dd ?
  4. ends
  5.  
  6. mNumeros        Numeros ?
  7.  

En la code:

Código
  1. mov eax,1
  2. mov [mNumeros.Numero1],eax
  3. mov eax,2
  4. mov [mNumeros.Numero2],eax
  5.  

y listo  :xD

Esa era tu duda?

un saludo!


En línea

Un byte a la izquierda.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C] - Duda estructuras « 1 2 »
Programación C/C++
h0oke 14 6,632 Último mensaje 21 Mayo 2010, 22:34 pm
por Littlehorse
Duda con estructuras (struct)
Programación C/C++
alexis33de 1 2,560 Último mensaje 28 Agosto 2010, 03:41 am
por Littlehorse
Duda con estructuras
Dudas Generales
fins94 1 1,945 Último mensaje 4 Junio 2013, 18:55 pm
por ivancea96
Duda lista con estructuras c++
Programación C/C++
d00ze13 3 2,033 Último mensaje 19 Diciembre 2013, 15:34 pm
por rir3760
Duda rapida sobre estructuras
Programación C/C++
AlucardDracula 2 1,785 Último mensaje 23 Diciembre 2013, 22:40 pm
por AlucardDracula
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines