Bonjour,
Depuis peu, je me suis lancé un défi : Me créer un BOT MITM en partant de 0 pour DOFUS RETRO.
Ce poste aura pour but de partager mes attentes, mes expériences, mes résultats et mes questions.
J'ai quelques bases en réseaux et en programmation avec le langage Python, c'est d'ailleurs ce langage que je compte utiliser principalement.
Ca fait quelques jours que je me suis lancé dans ce projet.
J'ai pas mal parcouru le forum Cadernis et il fallait bien commencé quelque part alors j'ai commencé mes toutes premières expériences avec Wireshark.
Objectif 1 : Installer et comprendre les bases de Wireshark - OK
Objectif 2 : Trouver les échanges entre ma carte réseau et le serveur Allisteria - OK
Objectif 3 : Récupérer les infos nécessaires pour passer sur la création de mon script avec pyshark (adresse IP du serveur, Port, etc...) - OK
Objectif 4 : Créer un script Python (avec pyshark) pour récupérer et afficher dans mon terminal les paquets envoyés et reçus - OK
Objectif 5 : Traduire les paquets bruts pour avoir un résultat compréhensible (héxadécimale -> chaîne de caractères en remplaçant les caractères non imprimables) - OK
Objectif 6: Essayer de traduire un paquet en utilisant les infos trouvés sur le net - OK
(par exemple) grâce au Diagramme des packets Dofus : Lien Cadernis vers le Diagramme
Après quelques heures de tests, j'ai remarqué que certains paquets avaient bien évolués depuis l'époque du Diagramme des packets Dofus.
Voici ce que j'ai pu décrypter d'un paquet GM.
Pas certain que tout soit exacte mais c'est ce que j'ai déduis lors de mes tests, si vous connaissez les "Infos Inconnues", ou si vous voyez des informations erronés, je suis preneur.
(Informations récupérés sur le paquet d'un joueur au hasard.)
PACKET GM TRADUCTION BRUT
![img]()
PACKET GM TRADUCTION AVEC MON SCRIPT PYTHON

On peut voir dans ACCESSOIRES, qu'il n'arrive pas a me donner le nom des items avec l'ID 12958 et l'ID 12809, c'est simplement parce que j'utilise un ancien fichier txt de Maxoubot, Objets.txt pour chercher les infos.
Ce sont simplement des items qui ont été rajoutés par la suite et mon fichier Objets.txt n'est pas à jour.
Il y a aussi quelques différences lorsque le joueur porte des items Obvijevan, des items Polykrome, une dinde Caméléone, etc...
Pour le moment, j'ai juste gérer les erreurs du script, j'ai pas réussi a traduire toutes ces informations, pareil pour les emblèmes, mais ça viendra, ça me passionne vraiment et je suis motivé.
Globalement, la plus part des paquets GM qui ont des informations associés à une entité se ressemblent plus ou moins.
J'ai pu remarqué qu'il y a quelques différences entre les paquets GM hors combat, en combat et aussi si les joueurs sont connectés ou en mode marchand, si c'est une autre entité (comme par exemple un PNJ, un Percepteur, etc...).
Objectif 7: Trouver la fameuse signature des paquets - OK
Pendant mes expériences, j'ai pu remarqué la présence d'une signature des paquets sur version modern qu'on ne retrouve pas sur la version legacy.
Pour le moment, j'ai aucune idée de comment décrypter cette signature pour, plus tard, pouvoir reproduire cette signature lors de mes envoies de paquets via mes scripts pour effectuer des actions via les scripts.
Chaque chose en son temps, je suis encore loin de cette étape.
EXEMPLE D'UN PAQUET EN MODERN (censuré)
![img]()
EXEMPLE D'UN PAQUET EN LEGACY (censuré)
![img]()
Objectif 8: Récupérer les infos venant du launcher DOFUS (globalement refaisant les objectifs 2 a 5 mais pour le launcher) - OK
Première chose, j'ai remarqué que le launcher pouvait avoir deux IP suivant le moment de connexion.
Ensuite, je suis tombé sur des informations qui me semblaient importantes (dans un Layer HTTP2), j'ai adapté mon script pour enlever tous les paquets superflus, viser uniquement ce Layer HTTP2 spécifique et y récupérer uniquement ce que je voulais.
Quand j'ouvrais le launcher, j'avais des centaines de paquets, il a fallu faire un tri pour garder uniquement ce que je voulais garder, et ce n'était pas si simple, mes compétences en programmation sont très basique, heureusement avec des bons prompt, chatGPT m'a solutionné le tout !
Voici a quoi ça ressemble (pour le moment je ne sais pas si j'aurai besoin de ces données mais je trouvais ça intéressant xD)
1er paquet : OUVERTURE DU LAUNCHER
2eme paquet : LANCEMENT DU COMPTE POUR SE CONNECTER EN JEU

Pour le moment, mes découvertes s'arrêtent là.
Pour la suite, j'aimerai :
- Comprendre les données se trouvant dans les fichiers .swf décompilés via la décompilation des fichiers avec JPEXS
Pour le moment je comprends rien, je ne sais pas quel fichier .swf spécifique je dois décompiler et comment comprendre et extraire les données nécessaires pour avancer.
- Réussir a me placer entre ma carte réseau et le serveur pour pouvoir récupérer, interpréter et renvoyer des paquets au serveur de jeu (MITM)
A ce niveau là, je connais rien, je dois découvrir le fonctionnement de base et comment je peux mettre cela en place.
Voici quelques infos que certains voudront surement récupérer et que je peux partager :
A date du 24/02/2024
server_ip_allisteria = '172.65.210.126'
port : 443
Je rappel que je débute de 0, je n'avais aucunes connaissances du fonctionnement avant mon démarrage dans ce projet.
Assez d'infos pour commencer, merci de m'avoir lu, n'hésitez pas a participer si le sujet vous intéresse et/ou si vous souhaitez m'aider.