Zyko a dit : "Du coup ce qui suit ( si quelque chose suit ) sera l'id+la taille repartis sur deux octets? Et ainsi de suite pour la lecture suivante? Si oui j'aurais compris :P"
oui c'est ca
pour interpreter "le corps" du message il faut commencer par trouver le fichier .as qui correspond a l'id , maxilia explique comment faire ici https://cadernis.com/d/143-[tuto-identifier-les-packets dans le III°) Trouver le fichier .as correspondant
on va essayer avec encore le 1er paquet , on trouve le bon fichier .as : d'apres le tuto ca donne ProtocolRequired.as
on l'ouvre avec bloc note ou n'importe quoi , on chercher la fonction deserialize :
Cliquez pour révéler
Cliquez pour masquer
public function deserialize(param1:IDataInput) : void
{
this.deserializeAs_ProtocolRequired(param1);
return;
}// end function
elle renvoit a une autre fonction : deserializeAs_ProtocolRequired , bon ok on y va :
Cliquez pour révéler
Cliquez pour masquer
public function deserializeAs_ProtocolRequired(param1:IDataInput) : void
{
this.requiredVersion = param1.readInt();
if (this.requiredVersion < 0)
{
throw new Error("Forbidden value (" + this.requiredVersion + ") on element of ProtocolRequired.requiredVersion.");
}
this.currentVersion = param1.readInt();
if (this.currentVersion < 0)
{
throw new Error("Forbidden value (" + this.currentVersion + ") on element of ProtocolRequired.currentVersion.");
}
return;
}// end function
ce qui est interressant pour nous c'est juste les lignes avec "param1." , on en a 2 dans ce fichier :
this.requiredVersion = param1.readInt();
this.currentVersion = param1.readInt();
donc 2 variables : requiredVersion et currentVersion
il faut toujours les lire dans l'ordre donc on commence par requiredVersion , on peu voir grace a readInt qu'il faut lire un integer (un entier) donc 4 octets (un entier est sur 4 octets)
ce qui donne : requiredVersion = 00 00 05 A4 = 1444
on passe a currentVersion , pareil readint donc un entier donc 4 octets (bon la c'est les memes octets) :
currentVersion = 00 00 05 A4 = 1444
----------------------------------------------------------------------------------------------------------------------------------------------
(a partir d'ici je me base sur une ancienne version pour coller a l'image mais le principe restera toujours le meme)
Voila , on peu passer au message suivant qui a on a vu ID=3 taille = 330 , on trouve le fichier .as : HelloConnectMessage
Cliquez pour révéler
Cliquez pour masquer
public function deserializeAs_HelloConnectMessage(param1:IDataInput) : void
{
var _loc_4:int = 0;
this.salt = param1.readUTF();
var _loc_2:* = param1.readUnsignedShort();
var _loc_3:uint = 0;
while (_loc_3 < _loc_2)
{
_loc_4 = param1.readByte();
this.key.push(_loc_4);
_loc_3 = _loc_3 + 1;
}
return;
}// end function
this.salt = param1.readUTF();
var _loc_2:* = param1.readUnsignedShort();
_loc_4 = param1.readByte();
salt est un UTF , on lit un UTF (une chaine de caracteres) en regardant les 2 1er octets , 00 20 , la chaine contiendra 00 20 caracteres (32 caracteres) , on lit alors 32 octets
salt = ces 32 octets
_loc_2 est un UnsignedShort (c'est 2 octets) , comme j'ai la flemme de compter les 32 octets precedent de memoire ca fait 294 (bon ca c'est a verifier)
on arrive dans la boucle :
while (_loc_3 < _loc_2)
{
_loc_4 = param1.readByte();
this.key.push(_loc_4);
_loc_3 = _loc_3 + 1;
}
donc on lira loc_4 (un byte donc un octet) 294 fois ca qui donnera un tableau "key" de 294 octets