C/C++ [Résolu]HelloConnectMessage

Inscrit
1 Mars 2014
Messages
120
Reactions
0
#1
Salut tout le monde !

Après avoir lancé l'idée de mon projet de Player musique 1.29 j'ai eu envie de reprendre mon bot socket.

J'ai voulu repartir sur ces "bonnes" bases et j'ai donc repris tout à 0. Et du coup je bloque sur la dé-sérialisation du paquet HelloConnectMessage ...

Bon j'ai commencé par sniffer le client officiel et je reçoit ce paquet HelloConnectMessage :
Code:
000e0155002069636c726677786b2d76505e33474e2c4c7b2a6f4f347a6f5d7063223d376377b1020497294693df1b2ba966a1e8de8a7deed5e1e7b280b561f67aa15eeb2365068dbcea3ee462992cbda79364ccd80c04241a9533a032ccb719408e2a6d28492ccc26578b1dd13cb5fbc169827f2a30d1cb8bf7a1cd23b41b7147ca75a3e20f82584009a9de024b38396121686346b7a94b59ebc04fce9433db1b46ced297977e9c37c2e25c5731c2657012106f21ddabc38205c9066bb620d5b89b6691fa3d29bf81692143d940314f0378a578180d28b7df99f4119d816110aa66d34dbc5a09501ab5d7c585ac61d9a0c7334048e523b03bec1cfeb505e2a137619a10a277d8922230606c52657ea45d7096c1efa0c58f0b0ef34b97d4f065d8378cf0ec384c1bd946a6ef7ebd07befe596e7b524b4ca7b43262a8d013e44b083da1ff0ac90c8a564d58d3109563fdf175960e4b92f9f9d1
Pour dé-sérialiser ce magnifique paquet on regarde les sources de D2 :
Code:
public function deserializeAs_HelloConnectMessage(input:ICustomDataInput) : void
      {
         var _val2:* = 0;
         this.salt = input.readUTF();
         var _keyLen:uint = input.readVarInt();
         for(var _i2:uint = 0; _i2 < _keyLen; _i2++)
         {
            _val2 = input.readByte();
            this.key.push(_val2);
         }
      }
On se rend compte qu'il faut donc, dans un premier temps lire une chaine UTF, puis la taille de la clef et enfin la clef (après la lecture du header biensur).

Donc j'ai essayé de le faire à la main ce qui donne :
Code:
000e => id 3 et length type 2
0155 => taille 341

UTF:
0020 => taille 32
69636c726677786b2d76505e33474e2c4c7b2a6f4f347a6f5d7063223d376377 => iclrfwxk-vP^3GN,L{*oO4zo]pc"=7cw
Jusqu'au salt ca va, j'ai bien ma chaine de 32octets, c'est après que je comprends pas.
On nous demande de lire un int, donc les 4octets suivant, ce qui correspond à b1020497 (hexa) ou 2969699479 (déci) .... Sachant que c'est censé être la taille de la clef qui suit je ne comprends pas :/ .... J'ai du louper un truc, pourtant je vois pas quoi

Alors j'ai cherché dans les sources mais j'ai rien trouvé de concret. J'ai cherché aussi à lire un short mais ca ne change rien, la taille reste trop grande.

Est ce que quelqu'un peut m'éclairer sur la solution ?
Merci :)
 
Inscrit
27 Juin 2012
Messages
238
Reactions
0
#2
Re: HelloConnectMessage

Hey,

Avec les quelques connaissances qu'il me reste (tu me donnes trop envie de recommencer aussi :D) je pense pouvoir t'éclairer.
Essaye de trouver la méthode readVarInt, elle est différente de readInt et donc n'est pas forcément sur 4 octets mais peut être sur 10 bits (par exemple), c'est une manière qu'à Ankagras de réduire la taille des paquets (tromper les développeurs).

Regarde du côté du reader d'Alex.
 
Inscrit
1 Mars 2014
Messages
120
Reactions
0
#3
Re: HelloConnectMessage

Oui je m'étais dit que ça venait peut être de là :

fichier CustomDataWrapper
Code:
public function readVarInt() : int
      {
         var b:* = 0;
         var value:int = 0;
         var offset:int = 0;
         for(var hasNext:Boolean = false; offset < INT_SIZE; )
         {
            b = this._data.readByte();
            hasNext = (b & MASK_10000000) == MASK_10000000;
            if(offset > 0)
            {
               value = value + ((b & MASK_01111111) << offset);
            }
            else
            {
               value = value + (b & MASK_01111111);
            }
            offset = offset + CHUNCK_BIT_SIZE;
            if(!hasNext)
            {
               return value;
            }
         }
         throw new Error("Too much data");
      }
mais vu que je suis pas super bon en reader/writter j'me suis dit que ca lisait 4octets :D

Je vais regarder celui d'Alex alors :)
Merci à toi et merci à Alex du coup ^^ !
 
Inscrit
1 Mars 2014
Messages
120
Reactions
0
#5
Re: HelloConnectMessage

Oui je viens de recoder en C++ la méthode et ça fonctionne :)

Merci !
 

Sorrow

Membre Actif
Inscrit
5 Mai 2012
Messages
376
Reactions
26
#6
C'est tout à fait normale pour les 32 caractère, ce n'est pas une chaîne UTF-8.
 
Inscrit
1 Mars 2014
Messages
120
Reactions
0
#7
Ouaip :)
Maintenant je passe au IdentificationMessage >< .... Ca a l'air d'être assez chaud ...
 
Inscrit
5 Février 2016
Messages
1
Reactions
0
#8
Bonsoir, j'ai exactement le même problème que toi actuellement, d'ou venait donc le problème ?
 
Haut Bas