[D2] Le client compte les messages ! Des conséquences pour les MITM ?

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#1
Salut, j'étais en train de reprendre mes LaBot-Tools pour tester mon nouveau protocol builder, et il bloquait au premier message envoyé par le client.
En fait, je me suis aperçu que c'était parce qu'il bloquait au message 4 : "0012000000030117…"
En effet, mon code lisait le header de 18 donc message 4 et taille de la longueur 2, donc longueur 0 et ça marchait pas.
Là j'ai repris les sources, et j'ai découvert

Code:
      public function writePacket(param1:ICustomDataOutput, param2:int, param3:ByteArray) : void
      {
         var _var5_:uint = 0;
         var _var6_:uint = 0;
         var _var4_:uint = computeTypeLen(param3.length);
         param1.writeShort(subComputeStaticHeader(param2,_var4_));
         param1.writeUnsignedInt(this._instance_id);
         switch(_var4_)
         {
            case 0:
               return;
            case 1:
               param1.writeByte(param3.length);
               break;
            case 2:
               param1.writeShort(param3.length);
               break;
            case 3:
               _var5_ = param3.length >> 16 & 255;
               _var6_ = param3.length & 65535;
               param1.writeByte(_var5_);
               param1.writeShort(_var6_);
         }
         param1.writeBytes(param3,0,param3.length);
      }
Du coup, le client compte le nombre de messages. Est-ce que Ankama utilise ça pour ban ?
 

DevChris

Membre Actif
Inscrit
12 Avril 2017
Messages
138
Reactions
24
#2
Personnellement ban je pense pas, mais ce qui est sur c’est que sans ca marche pas
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#3
Tu veux dire que si le compte de messages est pas bon ça marche pas ?
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#4
Bah tu comptes toi aussi le nombre de paquets qui transitent, en soustrayant le nombre de paquets que ton MITM envoit.
Tu auras donc le nombre de paquets officiels.
 
Inscrit
18 Février 2017
Messages
149
Reactions
18
#5
Je pense que c'est un moyen qu'ils ont trouvé pour complexifier l'émulation
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#6
@BlueDream tu veux dire en additionnant, non ?
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#7
Je pense que c'est un moyen qu'ils ont trouvé pour complexifier l'émulation
C'est pas du tout le but, en quoi ce serait plus compliquer de faire un serveur dofus ?
 
Inscrit
18 Février 2017
Messages
149
Reactions
18
#8
C'est pas du tout le but, en quoi ce serait plus compliquer de faire un serveur dofus ?
En ajoutant une fonction non-essentielle en soi mais fondamentalement au système d'envoi/réception
Après cela n'est que mon avis
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#9
@BlueDream tu veux dire en additionnant, non ?
Le client réactualise l'instance_id selon le dernier paquet du serveur. Cela permet que malgré le spam d'un même paquet, l'instance_id ne soit pas décalée. Si tu trafiques le paquet du serveur, tu pourras avoir un instance_id cohérent.
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#10
Le client réactualise l'instance_id selon le dernier paquet du serveur. Cela permet que malgré le spam d'un même paquet, l'instance_id ne soit pas décalée. Si tu trafiques le paquet du serveur, tu pourras avoir un instance_id cohérent.
Le client envoie l'instanceId mais les paquets du serveur ne contiennent pas d'instance_id.
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#11
En ajoutant une fonction non-essentielle en soi mais fondamentalement au système d'envoi/réception
Après cela n'est que mon avis
Enfaite la seule chose que tu devras changer dans ton émulateur c'est la lecture d'un packet en provenance du client et quand bien même tu serais pas capable d'adapter ton émulateur pour faire un ReadUint sur ton parser, tu peux modifier le bytecode du client pour supprimer cette simple ligne.
 
Haut Bas