C/C++ RawDataMessage personnalisé

Inscrit
15 Mai 2015
Messages
41
Reactions
0
#1
Bonjour,
j'essai en ce moment de faire exécuter mes propres RawDataMessage par le client dofus. Pour commencer je tente juste de récupérer le gameServerTicket. Voici le code :

Code:
package
{
	import flash.utils.*;
   	import flash.system.*;
   	import flash.display.*;

	public class HumanCheck extends Sprite
	{
		public function HumanCheck()
		{
			var loc1:Object = getDefinitionByName("AuthentificationManager");
			var loc2:Class = getDefinitionByName("com.ankamagames.dofus.network.messages.connection::SelectedServerDataMessage") as Class;
			var loc3:* = new (loc2)();
			loc3["initSelectedServerDataMessage"](30, "127.0.0.1", 5555, true, loc1["getInstance"]()["gameServerTicket"]);
			var loc4:Object = getDefinitionByName("ConnectionHandler");
			loc4["getConnection"]()["send"](loc3);
		}
	}
}
J'ai préalablement modifier ServerControlFrame.as en inversant la condition. C'est à dire que si la signature n'est pas bonne le client exécute la variable loc2.content c'est à dire le swf brute que le client reçoit.
Le problème est que je ne reçois aucun paquet. Je me suis inspiré d'un vrai RawDataMessage pour les lignes de code mais quelque chose m'échappe surement.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#2
EDIT: Mes excuses, j'ai lu un peu rapidement. Ton code m'a l'air bon, qu'est-ce qu'il s'affiche sur le rapport d'erreur D2 ?
 

Sorrow

Membre Actif
Inscrit
5 Mai 2012
Messages
376
Reactions
26
#3
loc2.content.position = 0; après verify
Après c'est mieux de nullé verify
 

Gohu

Membre Actif
Inscrit
16 Novembre 2013
Messages
222
Reactions
2
#4
Attention les sécurités de dofus pourraient peut être se servir du hash de l'instance or si tu l'a modifié tu changes le hash, je dis ça je dis rien..... ;)
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#5
Pourquoi recevrais-tu un paquet ? J'ai l'impression que quelque chose cloche, après je connais mal l'AS et je ne me suis pas intéressé au fonctionnement, mais normalement quand on veut initialiser une connexion, il faut avoir un serveur qui écoute, et se connecter à ce serveur. Je n'arrive pas à voir très clairement ces deux étapes. Au pire, tu peux sniffer avec Wireshark, ou lancer un rapport de debug.

Sinon, très bonne idée, et bonne méthode. Fais juste attention, parce que tu as modifié le hash du client (G0hu sale fourbe tu m'as volé mon post). Je ne t'en dirai pas plus puisqu'Alex ne veut pas.
EDIT : Je t'en dirai pas plus parce que j'ai la flemme, et que ce n'est pas l'objet de la question :p
 
Inscrit
15 Mai 2015
Messages
41
Reactions
0
#6
Merci pour la piste du hash je vais essayer de voir où je peux trouver ça :) Pour répondre à Alexandre voici le debug :

[11:16:02:735] [ServerConnection] [RCV] RawDataMessage @63
[11:16:02:750] [ServerControlFrame] Bytecode len: 907, hash: 2aaf3487f266b8775fbb7a55b4afa305

(il n'y a plus rien après)

Merci Luax pour le loc2.content.position = 0, je l'ai rajouté(oubli bête de ma part)
Je ne sais pas exactement si mon RDM est vraiment exécuté, et si il l'était je me demande si il arrive vraiment à récupérer les adresses de AuthentificationManager et ConnectionHandler avec de simples lignes comme je l'ai fait.

Labo, je parle d'un paquet que je reçois car avec cette ligne :
loc4["getConnection"]()["send"](loc3);
je demande au client de m'envoyer la variable loc3 à l'aide du socket géré par l'objet ConnectionHandler. J'ai déjà initialisé une connexion avant d'envoyer le RDM.
 
Inscrit
15 Mai 2015
Messages
41
Reactions
0
#8
Merci pour ce lien très utile Sorrow. Ton swf fonctionne et me renvoi bien mon login/password. Le problème vient donc de ma syntaxe.

Edit :

Main.as
Code:
package
{
   import flash.events.Event;
   import flash.display.Sprite;
   import com.ankamagames.dofus.logic.connection.managers.AuthentificationManager;
   import com.ankamagames.dofus.kernel.net.ConnectionsHandler;
   import hashKeyMessage;

   public class Main extends Sprite
   {
      public function Main()
      {
		try
		{
			var authentificationManager:AuthentificationManager = AuthentificationManager.getInstance();

			var gameServerTicketTemp:String = authentificationManager.gameServerTicket;

			var hkm:hashKeyMessage = new hashKeyMessage();
			hkm.inithashKeyMessage(gameServerTicketTemp);

			ConnectionsHandler.getConnection().send(hkm);
		}
		catch (e:*)
		{
			trace("Error : " + e);
		}
      }
   }
}
Merci encore pour l'aide !
 
Haut Bas