C/C++ Intérêts de faire un bot

Inscrit
14 Septembre 2022
Messages
2
Reactions
1
#1
Bonjour,

Je me demandais quelles étaient les avantages niveau apprentissage de faire un bot?
Je suis à l'aise niveau développement mais je nais jamais tenter ce genre de projets, je me doutes que ça va me permettre de remettre les mains dans whireshark (que j'ai plus utilisé depuis des années), et en apprendre plus sur le rétro ingenering

Selon vous quelles sont les choses qu'on peut apprendre lors de ce genre de projet ? La méthode par MITM et socket on l'aire de nécessité des compétences différentes (comme de l'injection, la je commence à me rendre compte qu'il y a une bonne tonne de chose sur lesquels je suis incompétents pour l'instant), esque c'est compliqué de passer de l'un à l'autre ou il vaut mieux se spécialiser sur un seul au début ?

En vous remerciant par avance
 
Inscrit
20 Decembre 2012
Messages
148
Reactions
25
#2
Tu peux globalement séparer l'architecture d'un bot en 3 couches :

- La récupération et le parsing des données. Typiquement convertir un flux de données brutes en objects compréhensibles (Networking / Fichiers du jeu / etc.).

Celle-ci pourrait contenir :
  • L'implementation d'un protocol réseau suivant la version du jeu. La 1.29 communique en String clair alors que la 2.0 en byte[] avec des règles beaucoup plus poussées.
  • Une bibliothèque de paquets réseau représentés sous formes de classes. Tu seras bien content de découvrir les ProtocolBuilder. CC @BlueDream :inlove:
  • Des parsers de fichiers du jeu. Pour Dofus, les fichiers D2o, D2p, I18N, dlm et bien d'autres.
  • ...

- Le cerveau du bot.

Par cerveau j'entant l'ensemble des comportements implémentés pour faire face à des tâches identifiées (Marcher, Lancer un sort, Définir une stratégie de combat, cultiver etc. etc).
C'est le moment d'approfondir son niveau en architecture logicielle (ça devient vite la jungle)

- Le cerveau de groupe.

  • Un bot socket doit pouvoir gérer des groupes de bots et la manière conventionnelle de gérer ces groupes et de définir un chef de groupe à qui toutes les décisions reviendront. Les autres cerveaux ne seront que des suiveurs et réaliseront bêtement les tâches pour lesquelles ils ont été programmé. Ce mécanisme de leader / suiveur(s) peut s'implémenter dans ce cerveau. A noter que cette manière de gérer un groupe n'en est qu'une parmi tant d'autres.

  • La plupart du temps un bot MITM ne devra gérer qu'un seul personnage à la fois. Celui du client ouvert. Cela simplifie énormément le développement de ce cerveau car il n'y a pas besoin de gérer la synchronisation entres plusieurs sous-cerveaux. Celui-ci est toujours nécessaire car on peut considérer notre seul client comme étant le leader d'un groupe d'une seule personne. C'est donc à lui que revient l'entièreté des décisions. Logique non ? =D


On ne parle là que de l'architecture profonde, pas la couche graphique et autres couches de haut niveau.

--

LA grande différence entre full Socket et MITM est que le MITM intercepte et manipule des données envoyées par un vrai client Dofus alors que le full Socket doit créer ces données de toute pièce en reproduisant fidèlement les données d'un vrai client.

Par reproduction des données d'un vrai client j'entends:

  • L'algorithme de pathfinding: les chemins générés par le bot socket doivent être exactement les mêmes que ceux générés par un vrai client. (La moindre erreur de calcul = ban)
  • Les réponses aux différentes stratégies anti-bot utilisées dans le protocol (dans le cas de Dofus 2.0).
  • Le chiffrement RSA du mot de passe : en utilisant la clef trouvée dans le code source du jeu.
  • et beaucoup ... beaucoup beaucoup d'autres

Le MITM quant à lui manipule les données sûres d'un client certifié. Elles garantissent une sécurité au niveau de l'anti-bot. Le MITM est libre de choisir quand il interagira avec le flux réseau afin de soit modifier soit y injecter un paquet. Il n'a donc quasiment aucune logique de connexion à implémenter étant donné que tout est fait par le vrai client :cool:.

Je recommande de commencer par développer un bot MITM car le développement d'un bot fonctionnel sera 2 à 3 fois plus rapide (source Evian) que celui d'un bot full Socket. De plus, les projets full Socket demandent une quantité de code faramineuse et peuvent vite décourager les plus novices d'entre nous. Une fois ce premier projet réussi alors pourquoi pas passer sûr du full Socket =)

Le développement d'un bot est une entreprise certes importante mais qui apporte énormément de connaissances aussi bien dans l'architecture logicielle, que dans la prise de décision, que dans l'arrachage de cheveux, que dans la réflexion / concentration, que dans les mathématiques etc etc etc.

Plus personnellement, j'ai commencé le développement à 12 ans et le développement Dofus à 14. Ca ne m'a jamais vraiment quitté depuis (cela fait une dizaine d'années). C'est même ça qui m'a passionné pour le développement informatique et qui m'a poussé à en faire mon métier. Ce 14 septembre (je vous écrie dans la nuit du 14 au 15) j'ai terminé mon stage de fin d'études, qui conclue lui même 5 années d'études. Ce message est un peu une sorte de remerciement envers ce que tout ce jeu m'a apporté. Dans le monde virtuel tout comme IRL.

J'espère que ma petite introduction pourra t'éclairer quant à tes questionnements :)
@+
 
Inscrit
14 Septembre 2022
Messages
2
Reactions
1
#3
Merci pour ta réponse détaillé, autant l'architecture logiciel je suis plutôt confiant (sûrement l'une des seul choses sur lesquels je le suis sur ce genre de projet), autant la partie parsinget récupération de donné va être la partie qui va me faire découvrir le plus de choses
Aux vue de mes objectifs, qui sont purement et simplement une envie de découvrir des parties de l'informatique que je n'explores pas dans mon métier je vais surement passer par le full socket dès le début
Ton message me fait réaliser qu'il va aussi falloir que je prépares pas mal de comptes pour supporter les tests et erreurs de parcours

Je te souhaites de t'épanouir dans ta voies professionnelle
 
Inscrit
27 Septembre 2019
Messages
47
Reactions
250
#4
Merci pour ta réponse détaillé, autant l'architecture logiciel je suis plutôt confiant (sûrement l'une des seul choses sur lesquels je le suis sur ce genre de projet), autant la partie parsinget récupération de donné va être la partie qui va me faire découvrir le plus de choses
Aux vue de mes objectifs, qui sont purement et simplement une envie de découvrir des parties de l'informatique que je n'explores pas dans mon métier je vais surement passer par le full socket dès le début
Ton message me fait réaliser qu'il va aussi falloir que je prépares pas mal de comptes pour supporter les tests et erreurs de parcours

Je te souhaites de t'épanouir dans ta voies professionnelle
Je te réponds en me basant sur ma seule expérience de développement de bots retro sous windows, je pense que c'est plus l'architecture qui va te poser problème plutôt que le parsing du protocole qui est vraiment très simple (protocole texte non chiffré). En ce qui concerne les domaines auxquels ça touche: tu vas avoir du networking, donc tout ce qui touche à la communication réseau (sockets etc), si tu pars sur du MITM il te faudra en plus sûrement développer un proxy TCP, ce qui peut être plus ou moins difficile selon le langage de programmation que tu utilises (personnellement j'utilise boost asio en C++). Après toujours en MITM tu vas devoir trouver un moyen de rediriger le flux entre le client et le serveur vers ton proxy, donc il faudra rediriger la fonction connect() vers ton proxy, généralement via une dll injectée. Tu devras aussi émuler le launcher @nkama pour pouvoir te connecter au serveur de jeu.

Une fois que tu auras réussi à intercepter le flux TCP entre le serveur et le client tu vas vouloir développer les fonctions principales d'un bot c'est à dire lire et parser des maps, calculer les chemins et les lignes de vue. Pour ça tu vas devoir décompiler le loader.swf et recoder les algorithmes (le pathfinding utilise un genre de A* par exemple) et l'algo de ligne de vue utilise Bresenham si je dis pas de connerie.

Ensuite tu vas sûrement vouloir créer une API pour pouvoir intéragir avec le jeu et devoir développer un interpreteur de script (ex: lua)

Et quand tu auras tout ça il te faudra une interface graphique qui te permet de gérer le tout :teeth:

Pour ma part je ne considère pas que le full socket soit plus compliqué qu'un MITM, au contraire. Et puis les bots MITM sont beaucoup plus safe que les socket, du simple fait que tu n'as pas à émuler ce que fais le client (onActionEnd, onTelemetry, checkFile) et que tu n'as pas à mettre à jour ton bot si ils décident de changer le protocole
 
Haut Bas