Problème dans le message ID

Inscrit
30 Avril 2022
Messages
1
Reactions
0
#1
Bonjour,

J'ai un petit soucis avec la lecture des message ID des paquets, en gros, je récupère un paquet de Chat (ChatServerMessage, (super AbstractChatServerMessage) )
Et je récupère le message ID 6616 au lieu du 373 indiqué dans les sources du jeu, pas de soucis pour récuperer le contenu du paquet (Le chan, le nom du gars, le message envoyé etc) mais juste l'ID qui est cassé, donc j'ai revérifier dans les sources, si le protocole avait pas un peu bouger, et visiblement pas, enfin rien trouver de ma décompilation de la 2.63
Alors voilà, je voudrais savoir si quelqu'un pouvait m'aiguiller, merci à tous ceux qui prendront la peine de me répondre et bon dev à tous !


Le code que j'utilise pour read les paquets:
            BigEndianReader Reader = new BigEndianReader(Packet.PayloadData);

            int Length = 0;
            ushort staticHeader = Reader.ReadUShort();
            ushort messageId = (ushort)(staticHeader >> 2);
            ushort lenType = (ushort)(staticHeader & 3);

            while (lenType-- > 0)
                Length = (Length << 8) + Reader.ReadByte();

            Console.WriteLine("messageId: " + messageId);
 
Inscrit
23 Avril 2021
Messages
4
Reactions
4
#2
Même soucis
 

Vlooz

Membre
Inscrit
12 Aout 2021
Messages
35
Reactions
6
#3
J'viens de retrouver mon ancien compte
Du coup, enfaite, c'est une question de folie d'Ankama, ils ont rechangés les protocolID, j'viens de vérifier en redécompilant, et le protocal ID est différent de ma dernière décompilation, le protocolID est le bon, 6616 dans la classe du message !
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#4
Tu as réussi du coup ?

je crois que t'as oublié un ReadUInt() pour l'instance Id.
 

Vlooz

Membre
Inscrit
12 Aout 2021
Messages
35
Reactions
6
#6
Salut blue, merci pour l'info, ouais techniquement je pourrais read l'instance ID, enfaite, le protocol ID à changer (comme je l'explique plus haut) et si je la read pas, c'est parce que je fait un filtre sur le Paquet lors du sniff, j'vérifie que le paquet source pas de mon addresse locale, enfin pour l'instant, après effectivement, j'vais vérifier si le Paquet sort de chez moi et si c'est le cas je ferais un read sur l'instanceID histoire d'avoir le bon contenu du message, j'te remercie pour la précision, c'est vrai que j'ai pas pensé à la faire moi-même, donc si quelqu'un tombe sur ce post useless, bah il verra un peu comment ça marche
Mais effectivement, faudra que je le fasse read si c'est un paquet émis

D'ailleurs, il me semble que non, mais l'instance ID est useless si tu as pas prévu de faire de l'envoi de paquet, non ?
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#7
Oui si tu n'envois pas de paquet c'est useless, il faut juste respecter le décalage lors de la lecture.
Sinon j'ai pas trop d'idée xd, peut être que le paquet est trop long et qu'il est découpé comme le 226.
Tu gères l'excédent ?
 

Vlooz

Membre
Inscrit
12 Aout 2021
Messages
35
Reactions
6
#8
Oui si tu n'envois pas de paquet c'est useless, il faut juste respecter le décalage lors de la lecture.
Sinon j'ai pas trop d'idée xd, peut être que le paquet est trop long et qu'il est découpé comme le 226.
Tu gères l'excédent ?
En effet le cas où c'est un paquet emis, je skip bytes, puis-ce que j'en ai rien à foutre de l'instance ID btw
Ouais, en gros c'que je fais c'est que tant que les bytes restant dans le buffer (Un buffer global) correspondent pas à la taille attendus du message, je traite pas le buffer, et une fois qu'il y'a au moins tous les bytes du message dans le buffer, jbuild mon paquet et j'le dispatch pour le traiter et ensuite j'retire les bytes du Buffer global

Donc en gros le seul soucis était que comme je prennais un référentiel (Le dofus invoker décompilé) dont le protocol ID était 373 bah quand mon bot lisait du 6616, il le reconnaissait pas, mais enfaite le client actuel le ChatServerMessage c'est bien le 6616 donc, c'est juste que mes sources étaient pas à jour

Là j'ai plus de soucis, ça n'est plus qu'une longue mer d'eau bleue face à moi

Edit : Enfin une longue mer de recopiage des paquets du jeu surtout
 
Dernière édition:
Haut Bas