Autre Débuter sur Cadernis

Inscrit
29 Mai 2020
Messages
6
Reactions
5
#1
Plop la guilde,

Je suis récemment arrivé sur Cadernis avec l'envie d'apprendre le fonctionnement de Dofus, de pouvoir bidouiller quelques bots, pour la science (j'insiste là dessus, j'ai vraiment juste envie d'apprendre et de m'amuser). Et je dois avouer que j'ai trouvé beaucoup de choses plutôt intéressantes, notamment dans les tutoriels sur le protocole, les bots sockets. J'ai trouvé quelques projets qui facilite bien la vie (LaBot pour n'en citer qu'un). Ça m'a permis assez vite de pouvoir sniffer mes premiers paquets et écrire un sniffer qui aide pour les chasses aux trésors (détection automatique des phorreurs, recherche automatique des indices sur dofus-map). Merci à tous pour le contenu !

J'aimerai aller plus loin dans la compréhension, et pour cela, j'aimerais m'assurer que j'ai bien compris. Car en effet, j'aurai beaucoup apprécié qu'il y ait un sujet qui résume un peu "les bases", la terminologie employée, mais je n'en ai pas trouvé (première question: est-ce que je l'ai raté ? Si non, peut-être qu'avec un peu d'aide, je pourrais en écrire un pour les nouveaux arrivants)

Par exemple, j'ai cru comprendre qu'il existait 3 grands types de bot:

1. Les Pixels Bots
Ces bots appliquent de la reconnaissance d'image sur la fenêtre de jeu Dofus, et simulent ensuite des clics de la souris/presse d'une touche de clavier.
L'avantage de ces bots, c'est qu'on ne touche pas du tout aux paquets échangés entre le serveur et le client, donc c'est assez dur de faire la différence entre quelqu'un d'assez braindead qui joue, et un bot. Donc c'est une méthode assez sûre (en terme de ban).
En revanche, c'est moins sûr en terme de si ça fonctionne ou non. En effet, c'est très dur d'implémenter des tests pour ce genre de bot, il faut être confiant sur sa reconnaissance d'image, et sur le fait qu'il y a pas une pop up inattendue qui va apparaitre. De plus, il faut que le jeu tourne sur le PC, donc c'est un peu plus gourmand qu'un bot socket, qu'on verra plus tard. Et c'est aussi plus gourmand, et sans doute plus lent qu'un bot socket ou MITM. Et on est obligé de tout tester en prod.
(Exemple)

2. Les MITM
L'acronyme MITM pour Man In The Middle. On va attraper les paquets échangés entre le client et le serveur, et éventuellement les modifier/ en rajouter. Par exemple, on peut lire le paquet MapComplementaryInformationsDataMessage pour essayer de détecter la présence d'un NPC nommé "Phorreur ..." sur la map. Ou bien on pourrait filter les messages chat reçus et retirer ceux qui ressemblent à des messages de flood bot (comme un filtre anti spam).
L'avantage par rapport au Pixel bot, c'est que les données qu'on reçoit dans les paquets sont plus sûres que celles qu'on récupère en faisant de l'OCR ou autre. De même, quand on envoie un paquet on est sûr de ce qu'il y a dedans, c'est plus dur de rater un paquet que de rater un clic de souris d'un pixel. On a toujours le client qui tourne sur notre machine, donc c'est toujours un peu lourd, mais on peut s'assurer du bon fonctionnement de tout.
D'un autre côté, on commence à toucher aux paquets échangés, donc si on se contente d'écouter y'a pas de soucis, mais si on commence à les modifier, il faut s'assurer qu'ils soient bien formés pour ne pas être détecté par le système anti-bot. Et il faut connaitre le protocole de Dofus (qui change à chaque build ?) (bien expliqué ici) pour pouvoir décoder/encoder les paquets.

3. Les bots socket
Cette fois-ci, plus question de client sur la machine, tout est dans notre code. On définit juste un socket vers les serveurs Dofus, et on fait semblant d'être un client (on reçoit des paquets, on répond avec des paquets adaptés). Celui là me semble beaucoup plus compliqué, il faut prendre soin de tout de A à Z (connexion, choix du serveur, mouvement sur la map, gérer beaucoup de cas), il faut connaitre le protocole sur le bout des doigts. Le gros problème semble être la gestion du RawDataMessage antibot sans client (ici).
Mais en échange, on ne fait pas tourner de client sur la machine, donc c'est vraiment ultra léger, pour faire tourner des bots en masse, je suppose que c'est idéal.

3.5 Juste un sniffer
Comme le MITM, sauf qu'on ne touche pas au packet, on ne fait que les décoder et en extraire des informations. (du coup c'est pas vraiment un bot, d'où le .5)

Il existe aussi la possibilité de faire des bots hybrides (combiner la fiabilité des données d'un MITM, avec la simplicité d'action d'un Pixel) (comme celui là ?).
Les bots 2. et 3. me semblent plus faciles à tester que le pixel bot, à condition de bien savoir simuler les réponses du serveur Dofus (est-ce qu'on a des outils pour faire ça?).

Ca m'amène à ma question suivante: comment tester un bot ? Est-ce qu'il y a des émulateurs de Dofus, ou bien juste on compile notre code, on le lance sur serveurs officiels, et on espère qu'on a tout bien codé, qu'on enverra pas un paquet de travers, et qu'on se fera pas attraper ?

D'ailleurs, je suppose que, si on fait un bot socket, l'idéal c'est de ne pas les faire tourner sous la même IP que son compte officiel/ne pas les faire tourner sous la même IP tout court ? J'ai entendu dire il y a peu que dans des mesures antibot, Ankama avait rendu plus compliqué la connexion depuis des VPNs, etc... Est-ce que cela signifie qu'on ne peut pas faire fonctionner un bot socket depuis un serveur hébergé quelque part ? (OVH, DigitalOcean, ...)

Enfin, est-ce qu'il existe d'autres communautés de dev que Cadernis qui s'intéresse à Dofus ?

Désolé pour toutes ces questions, j'ai essayé de rendre ça lisible et compréhensible, mais si je n'ai pas été clair, je serai heureux de mieux m'expliquer.
Merci d'avance pour vos réponses, et enchanté de faire votre connaissance,
djazouli
 
Dernière édition:
Inscrit
2 Juin 2020
Messages
57
Reactions
32
#2
Ca m'amène à ma question suivante: comment tester un bot ? Est-ce qu'il y a des émulateurs de Dofus, ou bien juste on compile notre code, on le lance sur serveurs officiels, et on espère qu'on a tout bien codé, qu'on enverra pas un paquet de travers, et qu'on se fera pas attraper ?
Tu peux faire des tests unitaires avec un résultat type à avoir. Et faire des tests Unitaires sur le jeu dofus via un sniffer à chaque maj pour vérifier que rien à changer sur les sockets que tu utilises.

D'ailleurs, je suppose que, si on fait un bot socket, l'idéal c'est de ne pas les faire tourner sous la même IP que son compte officiel/ne pas les faire tourner sous la même IP tout court ? J'ai entendu dire il y a peu que dans des mesures antibot, Ankama avait rendu plus compliqué la connexion depuis des VPNs, etc... Est-ce que cela signifie qu'on ne peut pas faire fonctionner un bot socket depuis un serveur hébergé quelque part ? (OVH, DigitalOcean, ...)
Je sais que PureVPN (entre autre) fait payer quelques € en plus pour une option en plus pour attribuer une IP spéciale permettant de voir Netfix US sans se faire bloquer par le filtre antiVPN, tout ça pour dire que leur protection antiVPN n'est pas fiable et peut-être contourné.

Pour ce qui est du changement d'ip, j'ajouterais dans mon code une interface pour gérer les vpn/proxy. Et je n'oublierais pas de rajouter une règle IPTABLE pour deny les accès au serveur dofus qui passerait pas l'ip de mon vps, afin d'éviter qu'un bug de rootage dans mes vpn fassent passer toute mes connexions sur celle de l'ip de mon vps.
 
Haut Bas