Touch Problèmes DofusTouch :3

Inscrit
13 Avril 2016
Messages
72
Reactions
0
#1
Bonjour tout le monde !
J'ai décidé de me remettre à DofusTouch, et bien-sûr au botting.
Mais je fais face à certains problème (et oui) :/

I-Création d'un compte


-Lors de la création du compte, il y a une requête avec comme paramètres:

J'ai redémarré plusieurs fois le jeu pour voir si c'était le même, et j'ai remarqué que oui. Mais je pense pas que ça soit le même pour tout le monde.
Et dans le code source j'ai trouvé:
JavaScript:
, function(t) {
                e.guestLogin = v.login,
                e.guestPassword = v.password,
                d.validateGuest(e, t)
            }
et
JavaScript:
v && (t.guestLogin = v.login,
            t.guestPassword = v.password),
Et donc ma question est: le guestLogin et le guestPassword sont-ils toujours les mêmes ? Si non, comment les retrouver ?

II-Après la connexion

Lors de la connexion avec un compte, il y a une requête pour obtenir l'apiKey afin d'obtenir un token.
Ensuite il y a plusieurs requête avec "primus", et voici les paramètres:

-STICKER: je ne sais pas ce que c'est mais j'ai l'impression que c'est toujours le même
-_primuscb: paramètre généré grâce à cette fonction (trouvé dans primus.js):
JavaScript:
function yeast() {
  var now = encode(+new Date());

  if (now !== prev) return seed = 0, prev = now;
  return now +'.'+ encode(seed++);
}
-EIO: engine.io protocol
-transport: je ne sais pas, mais toujours le même et j'ai trouvé ça:
JavaScript:
Socket.prototype.createTransport = function (name) {
  debug('creating transport "%s"', name);
  var query = clone(this.query);

  // append engine.io protocol identifier
  query.EIO = parser.protocol;

  // transport name
  query.transport = name;
-t: je ne sais pas ce que c'est, et c'est là mon plus gros problème, j'ai converti en décimal, je ne vois rien d'intéréssant
-b64: base 64 ? toujours le même

Et donc ma question est: comment est généré t ?

Merci beaucoup !
Si vous le souhaitez, je pourrai vous en donner d'avantage d'informations.
Cordialement, Trytax.
 

suntyop

Contributeur
Inscrit
6 Avril 2016
Messages
17
Reactions
2
#2
Salut,

En fait tu t'y prends mal. Il n'y a pas besoin de convertir quoi que ce soit.
Tu as des requêtes XHR pour obtenir l'api key, qui va servir par la suite à obtenir le token encore en XHR.
Une fois que tu as obtenu le token, il faut établir une connexion socket avec le serveur et ce n'est plus du XHR, mais du WS(websocket). Je te conseille d'utiliser Primus.

PS: Pour le stickerID, tu peux en générer un aléatoirement.
 
Inscrit
13 Avril 2016
Messages
72
Reactions
0
#3
Merci pour ta réponse !
Et oui j'ai remarqué pour l'apiKey et le token en XHR ^^
J'ai également vu le WS, j'ai même analysé l'envoi des messages, merci beaucoup :)
Et donc, après avoir obtenu le token, on peut établir une connexion avec le WS,? car il nécessite un sid.
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#4
Pour I., ça a l'air de dépendre de v.
Pour le II., on dirait qu'ils utilisent https://github.com/primus/primus. Le plus simple serait donc de l'utiliser aussi.

Petite question : comment as-tu chargé le jeu dans chrome ? C'est marrant qu'ils ne vérifient pas l'user agent.
 
Inscrit
13 Avril 2016
Messages
72
Reactions
0
#5
Pour le I, j'ai remarqué que le guestLogin et guestPassword sont toujours les mêmes.
Pour le II effectivement, ils utilisent primus :)
Avec l'application No-Emu(http://dofustouch.no-emu.com/), on peut jouer à DofusTouch sur PC, et on peut activer le mode développeur en allant sur: Menu->Vue->Toggle Developer Tools.
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#6
Sunytop a tout dit et comme le dit Labo , ne cherche pas à inventer des choses (sauf si t'aimes te casser la tête ^^ ) . Tu peux utiliser directement primus et jette un coup d'oeil sur la classe connectionManager de DofusTouch tout y est ;) .
@Labo non je crois pas qu'on puisse lancer le jeu directement d'un navigateur ^^ . lui ici il fait un full socket , donc il peut simuler n'importer quel userAgent , par contre sur Chrome on peut rien faire pour ça ( à la limite de mes petites connaissances :3) .
 
Dernière édition:
Inscrit
13 Avril 2016
Messages
72
Reactions
0
#7

et le contenu:



Ensuite je reçois:

et le contenu:

(le sid est très important).

WS de connexion:

et le contenu:


Puis WS de jeu:

et le contenu:


Je pense le STICKER et le t ne sont pas à négliger pour se connecter aux WS, de plus il faut obtenir la clé et le salt.
Je suis en galère mdrr, merci beaucoup :)
 

suntyop

Contributeur
Inscrit
6 Avril 2016
Messages
17
Reactions
2
#8
Merci pour ta réponse !
Et oui j'ai remarqué pour l'apiKey et le token en XHR ^^
J'ai également vu le WS, j'ai même analysé l'envoi des messages, merci beaucoup :)
Et donc, après avoir obtenu le token, on peut établir une connexion avec le WS,? car il nécessite un sid.

Le sid sera généré automatiquement t'as juste besoin d'envoyer un STICKER.
J'ai l'impression que tu te casses trop la tête. Il ne faut pas tenir compte des paquets XHR où tu n'envoies pas de POST ou GET, car ça passe en websocket. On s'en fou du t. Il n'y a que le sticker qui compte.

Pour le salt il est dans "HelloConnectMessage". Tu dois envoyer les paquets "connecting" et "login" une fois que tu as obtenu token+apikey. Il est possible que tu vois "connecting" et "login" en XHR et pas en WS, car dofus touch NE les fait passer en XHR, mais tu peux très bien les faire passer en WS.
 
Inscrit
13 Avril 2016
Messages
72
Reactions
0
#9
Donc, il faut envoyer un STICKER, on reçoit le sid pour se connecter au websocket. Ensuite pour se connecter au websocket, seul le sid compte et pas les autres ?
Et envoyer les packets connecting et login au WS pour avoir salt+key et avoir le ticket pour se co au serveur de jeu comme sur D2 ?

(Désolé je suis un nouveau en botting mdrr)
 

suntyop

Contributeur
Inscrit
6 Avril 2016
Messages
17
Reactions
2
#10
Donc, il faut envoyer un STICKER, on reçoit le sid pour se connecter au websocket. Ensuite pour se connecter au websocket, seul le sid compte et pas les autres ?
Envoyer les packets connecting et login au WS ?

(Désolé je suis un nouveau en botting mdrr)

Voici un indice. C'est la connexion en WS avec Primus à dofus touch, et seulement le sticker est envoyé. pas besoin de sid.
JavaScript:
var primus = new Primus("https://proxyconnection.touch.dofus.com?STICKER=qHhReZShM3mPt6MQ", {});
Tu vas trouver les paquets connecting et login dans la rubrique "ws"(ouXHR comme dit plus haut Dofus touch NE peut les envoyer en XHR mais ça ne t'empêche pas de les envoyer en WS) du tool developer Chrome.
 

Pièces jointes

Inscrit
13 Avril 2016
Messages
72
Reactions
0
#12
Désolé de vous déranger à nouveau, j'ai encore un problème, mais là c'est lors de la connexion au WS. (je dev en C#).
J'essaye de me co au serv dofus touch en C# mais j'ai l'impression que je ne peux pas me connecter.
J'ai essayé WebSocketSharp mais j'obtiens ceci:
(message d'erreur)
avec comme code:
C#:
using (var ws = new WebSocket ("wss://proxyconnection.touch.dofus.com?STICKER=ahhReZShM3mPt6rQ")) {
       ws.OnMessage += (sender, e) =>
           Console.WriteLine (e.Data);

       ws.Connect ();
     }
Ensuite j'ai essayé WebSocket4Net, des résultats plus intéressants déjà:

avec comme code:
C#:
var ws = new WebSocket("wss://proxyconnection.touch.dofus.com?STICKER=ahhReZShM3mPt6rQ");
            ws.Opened += (sender, e) =>
                Console.WriteLine("Connected");
            ws.MessageReceived += (sender, e) =>
                Console.WriteLine(e.Message);
            ws.Open();
mais bien-sûr il n'y a pas de "Connected" lorsqu'il y a connexion.

Si quelqu'un saurait résoudre mon problème.. Je ne sais pas si c'est l'url ou la librairy qui déconne :/
Merci beaucoup !
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#13
As-tu essayé avec un autre STICKER ? Peut-être qu'il dépend de la machine…
Ou alors il faut avoir certains cookies. Compare les deux connexions avec Wireshark.
Il est probable qu'il n'accepte pas qu'on se connecte directement, et qu'il y a un mécanisme pour identifier le websocket, comme un header Origin (voir par exemple ici : https://www.christian-schneider.net/CrossSiteWebSocketHijacking.html)
 
Inscrit
13 Avril 2016
Messages
72
Reactions
0
#14
Oui j'ai essayé avec d'autres STICKEr mais rien, le STICKER est inutile apparement, il est aléatoire.
Bah il y a un cookie mais il est useless, normalement on peut se co au serveur directement.
Je ne vois pas où ça bloque ça m'énerve, j'ai mis origin et tout ça mais rien :/
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#15
Bah il y a un cookie mais il est useless, normalement on peut se co au serveur directement.
Qu'est-ce qui te fait penser ça ?

Compare exactement les paquets envoyés.
 
Inscrit
13 Avril 2016
Messages
72
Reactions
0
#16
C'est bon j'ai résolu mon problème ! :)
Il fallait que j'importe la lib SuperSocket.ClientEngine
Que je récupère le sid pour avoir: wss://proxyconnection.touch.dofus.com/primus/?STICKER=aa0AURPLyh98kRcW&_primuscb=LcV3CU0&EIO=3&transport=websocket&sid=" + sid
Et fallait que je mette:
C#:
ServicePointManager.ServerCertificateValidationCallback = delegate (Object obj, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors errors)
            {
                return true;
            };

            ServicePointManager.MaxServicePointIdleTime = 100000;
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#17
Les libs que tu utilises sont-elles compatibles avec primus ?
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#19
Bah comme l'a mentionné Labo , rien n'est mieux que de sniffer le trafic avec Wireshark et comparer :).
 
Haut Bas