Bonjour à tous!
Ceci est mon premier post sur le forum et j'espère que vous allez être bien gentil avec moi. J'ai vu des réponses sur d'autres posts... oulala...
Je vais commencer par présenter mon background de programmeur (j'exclus beaucoup de choses, cela sert simplement pour la suite) :
[tab][/tab]Avancé - Java, Python
[tab][/tab]Débutant - .NET, AS3
Mon but : Créer un bot de Dofus
Raison : Expérience que je peux y gagner
Langage : C++
Bon, vous pouvez déjà le voir, je suis assez casse-cou. Oui, j'ai décider de créer mon premier bot de Dofus en C++, qui est un nouveau langage pour moi. Attention avant de me traiter de fou, j'ai quand même suivi les tutoriels de OpenClassrooms. Je le fais simplement en C++ car c'est un langage que je veux très bien maîtriser (oui oui, je veux VRAIMENT gagner de l'expérience en faisant ce bot). J'ai déjà programmer beaucoup d'applications, des serveurs, des scripts, etc. Par contre, c'est mon premier bot.
Bon, j'ai lu beaucoup d'autres posts sur le forum, notamment le protocole D2 et comment s'en servir. J'ai aussi essayer d'analyser le code source du bot BlueSheep (https://github.com/Sadikk/BlueSheep), mais bon, analyser un code sans le connaître, c'est extrêmement difficile : j'ai donc échoué. Bon... J'ai pas trouvé nul part quelqu'un qui a refait la conversation du client/serveur, j'ai donc analyser moi-même les paquets. Mais alors des choses horribles se sont passés... Oui mes amis, des choses très bizarres et imprévues.
Pour mon analyse, j'ai utiliser le code source de dofus 2.26 (https://github.com/Emudofus/Dofus) et WireShark (https://www.wireshark.org/).
Bon, je vais vous expliquer ce que je veux dire par des choses horribles. Tout d'abord, voici la liste des "Messages" de dofus en ordre que je vois lors de ma connexion :
Cliquez pour révéler
Cliquez pour masquer
id = protocolId
lt = lengthType
lg = length
1. ProtocolRequired (id=1, lt=1, lg=8) --> Receive
2. AuthenticationTicketMessage (id=110, lt=1, lg=38) --> Send
3. BasicAckMessage (id=6362, lt=1, lg=2) --> Receive
4. RawDataMessage (id=6253, lt=3, lg=88017) --> Receive
5. CheckIntegrityMessage (id=6372, lt=2, lg=258) --> Send
6. BasicAckMessage (id=6362, lt=1, lg=3) --> Receive
7. AuthenticationTicketAcceptedMessage (id=111, lt=0) --> Receive
8. CharacterListRequestMessage (id=150, lt=0) --> Send
9. BasicAckMessage (id=6362, lt=1, lg=3) --> Receive
10. QueueStatusMessage (id=6100, lt=1, lg=4) --> Receive
Ok ... Je sais que c'est seulement une question par post, mais elles se rapportent tous a la connection. Maintenant, voici mes questions :
1. Je comprends le principe du bot socket, qui imite le client, mais j'ai aucune idée qu'est-ce qu'un bot MITM peut bien venir faire de plus... Est-ce seulement pour pouvoir voir le client (du jeu) en même temps? Si oui, si on fait un "émulateur de position et de map" avec un bot socket, est-ce que ça revient au même?
2. Parfois, le serveur envoie plus d'informations qu'il dit envoyer explicitement... Par exemple, dans le premier (ProtocolRequired), il dit avoir 8 bytes de taille, ce qui correspond effectivement aux deux paramètres requiredVersion et currentVersion. Par contre, il reste 2 autres bytes qui trainent derrières... Pourquoi !? Meh.. un nouveau truc qui est dans la 2.29 mais pas dans la 2.26 ? La même chose arrive à 7 et 10.
3. Bon, excluant le handshake TCP du début, le client/serveur envoie des paquets vide a peu près à tous les 2-3 échanges... Est-ce seulement pour dire : Hey, je suis encore vivant, continue à envoyer ? Que signifie ces paquets vides.
4. Si on suit le schéma, le serveur envoie toujours un BasicAwkMessage avant d'envoyer ses trucs bizarres. Qu'est-ce que ça signifie? En plus, la taille varie entre chaques.
5. Un ticket doit être envoyé à l'étape 2... on le trouve où ce truc... La langue je peux comprendre que c'est FR, mais le ticket, qui change à chaque fois, c'est quoi?
6. Les messages 7 et 8 ont tous les deux un lt de 0. J'imagine que c'est normal vu que c'est juste un OK et une requête. Par contre, il y a énormément plus de bytes qui sont envoyés dans le TicketAccepted? (question 2).
7. Hem... Parfois lors de la réception du RawData, celui-ci est compressé.. Et d'autres fois non? Ils sont gelés les créateur de Dofus? C'est quoi la logique de réception du RawData et ça sert a quoi ce gros RawData.
8. En gros, il se passe quoi la-dedans!?
En gros, j'aimerais avoir de l'aide sur comment se passe les échanges. Si quelqu'un qui s'y connait plus serait assez gentil pour m'aider dans ces échanges bizarres ce serait vraiment super... Je suis disponible sur TeamSpeak, Skype et sur le forum. Évidemment, si on parle sur TS ou Skype, les réponses seront consignés ici.
Voici un résumé des questions :
1. Bot socket vs MITM?
2. Plus d'informations? (2.26 vs 2.29) ?
3. Paquets TCP vides?
4. BasicAwkMessage?
5. Ticket?
6. Pas de taille de message?
7. RawData
8. Explanation PLZ?
PS: Désolé si vous trouvez mon formattage bizarre, je teste des trucs haha.