Consulta: Análisis de Paquetes TCP Cliente <=> Servidor

PumpkinEater91

Newbie Lvl 1
Buenas a todos!

Los molesto dado que estoy intentando replicar los paquetes generados por el Cliente y quería ver si hay algún gurú o experimentado en la materia podría aclararme el panorama.

La verdad que poco y nada entiendo del protocolo TCP y en lo que pude sumergirme estaría respetando lo que es tamaño de las tramas, posiciones de bytes y de más.

Mi duda más que nada radica en si el cliente, obviando la contraseña, cuenta con algún encriptado adicional sobre los paquetes TCP, dado que con un muy rudimentario análisis con Wireshark el output original difiere bastante del generado por mi cliente en C#. Y de yapa si alguien tiene la idea si hay manera alguna de observar en texto humano legible el output TCP?
 

Dr. Lord Fers

Legendario Inmortal Lvl 5
Miembro del equipo
Moderador de Tecnología
Moderador
Qué tal, no entiendo una cosa, ¿estás usando un cliente del que poseés el source o no?, porque en ese caso, estaría bueno que especifiques a qué cliente/mod/juego te referís, así sabemos si pueda llegar o no a tener alguna encriptación; en caso contrario, podrías revisar el código para analizar si tiene o no los datos de los paquetes encriptados.

Si también podés subir imágenes del análisis que nos comentás que hiciste con WireShark, mejor, y de paso también qué o cuáles datos supuestamente son los esperados según vos.

Saludos.
 

PumpkinEater91

Newbie Lvl 1
Buenas Fers! De antemano gracias por la respuesta.



Actualmente estoy corriendo un servidor v0.13.56 y el cliente figura v0.13.53. Dispongo teóricamente el código de ambos, descargue todo del Git de AOLibre.



Simplifique los paquetes al momento que le doy a Crear Cuenta en ambos momentos. En el cliente original recibo el alerta de que la cuenta de usuario ya existe según lo esperado



En mi cliente customizado observo que la salida no es ni parecida por lo que no entiendo si los datos se encriptan, o las librerias que uso moldean los datos de formas distintas? Acá envío un paquete 131 LoginNewAccount


Para ambos casos los datos de creación que utilizo es:
[email protected]
prueba123

No se si con esto alcance para explicar la incertidumbre que tengo. Cabe aclarar tengo poco por no decir nulo conocimiento de toda esta negociación TCP del Cliente<=>Servidor.



Nuevamente gracias por el tiempo!

EDIT: Lo que llegué a ver es como se compone dicho Packet:
9MJ.png

De ahí saqué que outgoingData es una clsByteQueue, que termina ejecutando el Connect de un socket. Pero no pude ahondar donde se encripta (o no) los datos. Por ejemplo el WriteByte de la versión del cliente debería verse claramente en WireShark? O el protocolo TCP evita esto?

De ahí saqué que outgoingData es una clsByteQueue ...
 
Última edición:

recox

Argentum Online Libre
No se que tendras en tu cliente customizado, pero tene en cuenta el XOR. Hay una variable de compilacion que se llama "AntiExternos" que le agrega unos bytes al paquete capaz por eso no ves lo que estas esperando.

Pone la variable de compilacion en 0 tanto en server como cliente asi desactivas eso.


 

Dr. Lord Fers

Legendario Inmortal Lvl 5
Miembro del equipo
Moderador de Tecnología
Moderador
¿Cuál es tu cliente customizado, el que estás haciendo en C#? Porque si es ése el que "pareciera estar encriptado", deberías ser vos quien sabe si está o no encriptado ese paquete en la trama que enviaste.

¿Podrías proporcionar una parte del código de prueba, al menos en cómo hacés el envío de datos y cómo 'paquetizás' esos datos?

Por lo que vi en el "Cliente Original", pareciese haber alguna encriptación según lo que se ve ahí, no conozco el código de AOLibre, y hace mucho tiempo no veo mucho código de Argentum, pero por lo que recuerdo en los códigos "vírgenes" no venían con ningún tipo de encriptación, así que vas a tener que buscar en el código a ver si en el WriteData hay alguna llamada a alguna función de encriptación.

Por último, lo que veo en el paquete tuyo, es que estás enviando sólo 1 dato, lo demás es todo cabecera del IPv4 que por estándar son 20 bytes, lo mismo que TCP que son otros 20 bytes, y los primeros 4 bytes del order, así que para completar, te queda el último byte que supuestamente según tu captura es un 0x63, por lo que entiendo que no se parece ni de cerca al paquete que envía el cliente de AOLibre que son los correspondientes 33 + 2 + 2 + 4 = 41 bytes. 33 del size del mail y contraseña, 4 bytes para definir el tamaño de ambos Strings de VB, así que no pareciera haber bytes extras en el cliente de AOLibre, y el tuyo evidentemente está incompleto.

Saludos.
 

^[GS]^

GS-Zone Admin
Miembro del equipo
Administrador
Moderador
El AO-Libre el cliente envía los datos al servidor mediante un XOR 13, por defecto de cifrado, y luego utilizando un valor que le proporciona el servidor para hacer el mismo XOR, de manera predeterminada. A esto oficialmente se le pueden añadir mas capas de seguridad.
Deberías pegarte una vuelta por mis directos de Twitch los viernes a la noche cuando hablo de los avances del servidor que estoy reprogramando, basado en el servidor de AO Libre. Se habla de todo este asunto técnico especifico y detallado. jeje ;)
Post automatically merged:

Para el que no está enterado, el día de ayer me plantee empezar a pasar a una documentación todo el protocolo de AO Libre, cosa de pasar en limpio cada operación cliente-servidor y así poder entenderlo mejor.

 
Última edición:
Arriba