Une fois que ton parseur est opérationnel, tu vas devoir te plonger dans les sources de D0fus.
Utilises un décompileur SWF gratuit comme "JPEXS Free Flash Decompiler".
http://www.free-decompiler.com/flash/
Une fois téléchargé, décompile grace a JPEXS "D0fusInvoker.SWF" (C:\Program Files\D0fus2\app).
Normalement tu te retrouves avec cela:
Cliquez pour révéler
Cliquez pour masquer
Loading Image
Va dans : Script/Com/Ankam@Games/D0fus/Network
Dans ce dossier tu retrouveras toutes les classes du jeu permettant de communiquer avec le serveur.
Donc toi tu recois le paquet 1 et 3.
1: ProtocolRequiredMessage, mais on en a pas besoin
3: HelloConnectMessage -> Voila la classe qui nous intéresse.
En effectuant une recherches dans JPEXS, tu retrouveras HelloConnectMessage à cet emplacement:
Network/Messages/Connection
Cliquez pour révéler
Cliquez pour masquer
Loading Image
On sait que le paquet 3 correspond à cette classe car dans les sources de la classe tu retrouves cette variable:
public static const protocolId:uint = 3;
Présente dans tous les messages de d0fus.
A partir de cette classe tu vas devoir 'deserializer' les datas recu par le serveur après qu'ils soient parsés.
public function deserializeAs_HelloConnectMessage(param1:IDataInput) : void {
var _loc4_:* = 0;
this.salt = param1.readUTF();
var _loc2_:uint = param1.readUnsignedShort();
var _loc3_:uint = 0;
while(_loc3_ < _loc2_)
{
_loc4_ = param1.readByte();
this.key.push(_loc4_);
_loc3_++;
}
}
Une fois la classe déserializé tu vas pouvoir récupérés les variables présentes dans la classe, tel que le fameux SALT et la Clé public RSA.
En ce qui concerne le cryptage, c'est un RSA modifié par le jeu.
Déserialize la classe et après je t'aiderais pour le cryptage.
EDIT: Et biensur avec la fonction serialize:
public function serializeAs_HelloConnectMessage(param1:IDataOutput) : void {
param1.writeUTF(this.salt);
param1.writeShort(this.key.length);
var _loc2_:uint = 0;
while(_loc2_ < this.key.length)
{
param1.writeByte(this.key[_loc2_]);
_loc2_++;
}
}
Tu pourras parser des classes pour les envoyer au serveur.
Par exemple, VersionExtended que l'on envoi une fois HelloConnectMessage recu, qui correspond à la version du jeu cela donne ce pseudo code:
Define Version : VersionExtented
Version.Serialize(2, 16, 2, 79439, 1, 0)
Version.Pack(ServerSock)
Pack servant a envoyer directement la classe sérializé au serveur :)
Voila donc pour ce résumé assez rapide, il te faudra faire un reader et un writer afin de serializer et deserializer les classes du jeu.
Penche toi la dessus et transmet nous les problèmes rencontrés.
Cordialement