Dofusinvoker patch

Inscrit
10 Mai 2015
Messages
357
Reactions
55
#1
Bonjour tout le monde, me revoilà avec un petit problème, j'essaie de modifier le DofusInvoker pour que je puisse lui envoyer un rawdatamessage hasardeux mais voilà des que je le modifie, je test avec un vrai rawdatamessage et j'ai une erreur pourtant tout me semble bon.

Code:
ArgumentError: Error #2100: The ByteArray parameter in Loader.loadBytes() must have length greater than 0.
    at flash.display::Loader/_loadBytes()
    at flash.display::Loader/loadBytes()
    at com.ankamagames.dofus.logic.common.frames::ServerControlFrame/process()
    at com.ankamagames.jerakine.messages::Worker/processMessage()
    at com.ankamagames.jerakine.messages::Worker/processMessages()
    at com.ankamagames.jerakine.messages::Worker/onEnterFrame()
voici le code de mon dofusinvoker :

JavaScript:
 case param1 is RawDataMessage:
               _loc2_ = param1 as RawDataMessage;
               _loc3_ = new ByteArray();
               _loc4_ = new Signature(SIGNATURE_KEY_V1,SIGNATURE_KEY_V2);
               _log.info("Bytecode len: " + _loc2_.content.length + ", hash: " + MD5.hashBytes(_loc2_.content));
               _loc2_.content.position = 0;
               _loc8_ = new Loader();
               _loc9_ = new LoaderContext(false,new ApplicationDomain(ApplicationDomain.currentDomain));
               AirScanner.allowByteCodeExecution(_loc9_,true);
               _loc8_.loadBytes(_loc2_.content,_loc9_);
               return true;
L'erreur vient normalement d'ici : _loc8_.loadBytes(_loc2_.content,_loc9_); mais je vois pas l'erreur.
 
Inscrit
2 Novembre 2013
Messages
38
Reactions
0
#2
La réponse t'as déjà été apporté dans un de tes sujets. La traduction du RawDataMessage est fausse.
 
S

Sapuraizu

Invité
#3
The ByteArray parameter in Loader.loadBytes() must have length greater than 0.
_loc8_ = new Loader();

Je suis pas certain, mais il me semble que le message dit clairement que tu dois avoir + de 0 argument -_-
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#4
Comment ça elle est fausse ?! c'est du MITM je ne fais que le rediriger...
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#5
Ton code est bon, comment tu envois les bytes ?
Partage nous ton fichier RDM.
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#6
c'est celui du serveur, je ne fais que le transmettre.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#7
Le problème ne vient pas du client, donc il vient de ton programme.
Tu peux essayer de réécrire le paquet.

PS: Tu peux essayer d'extraire le SWF et de le renvoyer manuellement, voir comment le client réagit.
 
Inscrit
7 Mars 2015
Messages
30
Reactions
0
#8
Il me semble que les RawDataMessage officiels doivent passer par cette fonction.

Code:
_loc4_.verify(_loc2_.content,_loc3_)
Ainsi le contenu du RawData est redirigé sur un nouveau tableau de byte et c'est celui là qui est exécuté.
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#9
ok est-ce nouveau ?

Alexandre : mon bot redirige bien le rawdatamessage en temps normal ici des que je modifie le client ça pose problème.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#10
Je pense avoir compris, d'après la fonction verifiy(), il y a deux ReadUTF, avant que le tableau de byte soit retourné.

Code:
public function verify(param1:IDataInput, param2:ByteArray) : Boolean
      {
         var _loc3_:String = null;
         var _loc4_:* = 0;
         _loc3_ = param1.readUTF();
         if(_loc3_ != ANKAMA_SIGNED_FILE_HEADER)
         {
            param1["position"] = 0;
            _loc4_ = param1.bytesAvailable - ANKAMA_SIGNED_FILE_HEADER.length;
            param1["position"] = _loc4_;
            _loc3_ = param1.readUTFBytes(4);
            if(_loc3_ == ANKAMA_SIGNED_FILE_HEADER)
            {
               return this.verifyV2Signature(param1,param2,_loc4_);
            }
            throw new SignatureError("Invalid header",SignatureError.INVALID_HEADER);
         }
         return this.verifyV1Signature(param1,param2);
      }
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#11
Je ne comprends pas . j'enlève cette signature.
 
Inscrit
18 Février 2015
Messages
228
Reactions
7
#12
Je ne comprends pas . j'enlève cette signature.
En gros le tableau de byte que tu envoi dans le RawData contient la signature si elle n'est pas lu via les ReadUTF dans le LoadBytes tu aura un problème dans le décalage de ta lecture
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#13
Ok merci, je vais essayer de contourner ça.
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#15
Merci wilfried
, l'erreur était donc due à ceci : _loc3_ = new ByteArray(); je n'ai pas encore testé.
 
Inscrit
18 Février 2015
Messages
228
Reactions
7
#16
Merci wilfried
, l'erreur était donc due à ceci : _loc3_ = new ByteArray(); je n'ai pas encore testé.
il n'y a aucun rapport avec le LoadBytes car tu envoi le content du message recu tu utilise même pas la variable Loc3
 
Inscrit
2 Novembre 2013
Messages
38
Reactions
0
#17
Le problème c'est le loc3 qui est utilisé dans le verify via readUTF, c'est pour cela qu'on initialise loc3 avec le contenu du loc2 qui détient les données a envoyer.
Ou alors je me trompe ? Je dois avouer que j'ai même pas encore toucher au RDM :teeth: je regarde juste les codes sur les deux sujets.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#18
C'est tout simple, @Brizze tu ne touche plus au code ton client, il est parfait.

Lorsque tu reçois le RDM, au lieu de le rediriger, tu le bloque, tu fais un ReadUTF() et un ReadUTF(4) sur le content et tu recrée un message RDM avec les bytes.
 
Dernière édition:
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#19
Ok merci alexandre.
 
Haut Bas