Bonjour à tous!
Après de nombreuses semaines à écumer les tréfonds de ce forum, l'heure est venue pour moi de publier ici mon premier poste à l'attention des quelques enthousiastes encore présents. L'objectif de ce post est double : d'une part, faire un bref compte-rendu de ce que j'ai pu apprendre et découvrir durant mon temps passé ici récemment ; et d'autre part, parler un peu de la suite et des nouveaux défis que Unity apporte.
1) Les balbutiements d'un premier robot
Il y maintenant quelques mois, frustré par cette compétition injuste que me vouaient tous ces autoclickers dans ma quête à monter mes métiers de récolte, me vient l'idée de me simplifier un peu la vie en automatisant la récolte de ressources. Après quelques premières tentatives plus ou moins glorieuses avec différents outils d'automatisation de tâches et de reconnaissance d'image, la constat est plutôt clair: ça marche... mais pas vraiment de ouf. Il fallait donc trouver mieux. C'est alors que, dans mes recherches, je suis rapidement tombé sur ce forum et sur le travail fantastique partagé ici. Très vite, la solution s'est imposée : si je veux récupérer des infos fiables sur ce qui se passe en jeu, il va falloir décrypter ces fameux paquets à l'aide d'un "sniffer". Seul problème: je n'ai jamais vraiment codé avant, et toutes ces histoires de bytes, de deserialization et autres créatures mystiques, c'est un peu à s'en cogner la tête contre les murs.
M'enfin voilà, je décide d'installer mon premier éditeur de code et de me lancer dans cette longue aventure. Et après de (beaucoup trop) nombreuses heures à se familiariser avec python, le protocole TCP et quelques détours bien relou par les RegEx (et je vous passe les autres chapitres), me voilà enfin avec une réplique du protocole sous python capable de déchiffrer ces précieux paquets. La suite? Là mon idée était de faire un truc plutôt "light" et indétectable, donc exit toutes ces histoires d'injection de dll, de bot socket et autre architecture qui de toute façon, me semblaient bien trop compliquées pour un novice comme moi. Je me tourne alors vers un bot complètement "externe" (si on peut dire ça comme ça) qui se contenterait de lire les packets et de simuler des clics dans le client en fonction de ce que contiennent ces derniers. On verra bien jusqu'ou on peut aller comme ca..
Je me retrouve alors vite avec un petit outil capable de récolter quelques ressources et le constat est clair: ca marche! Et en plus, je commence enfin à y comprendre quelque chose à la programmation. Fort de ce premier succès (et surtout grace au super travail partagé par les membres de ce forum), mon petit outil se dote progressivement de nouvelles fonctions: déplacement entre les maps, gestion des combats, pathfinding... Et enfin, même de quelques fonctions plus ambitieuses: chasse aux trésor, ou même donjon korriandre, qui, après pas mal de boulot, fonctionnent enfin correctement (et pourraient même faire le sujet d'un petit poste s'il y a des interessés :))
2) Unity et la suite des aventures
Seulement, avec le futur portage vers Unity en fin d'année s'annonce aussi la mort prématurée de ce petit projet perso. Du coup, j'ai profité de cette nouvelle Beta fraîchement sortie pour jeter un premier coup d'oeil à ce qui se cache dessous. Sans surpise, tout a pas mal changé et l'utilisation d'IL2CPP - auquel que je n'y connais encore pas grand chose - n'arrange pas vraiment l'affaire. Fort heureusement, nous ne sommes pas les premiers à nous atteler au reverse-engineering d'un jeu sous Unity et de nombreux outils et tutoriels (tels que Il2cppDumper et Ghidra) existent déjà pour nous mettre sur la bonne voie (ce qui a d'ailleurs déjà fait l'objet d'un premier post sur ce forum ces derniers jours).
Je me suis alors vite penché sur ce qui m'interressait déjà en mettant pour la première fois les pieds sur ce forum: le protocole. Et sans surpise, lui aussi a pas mal changé. Le nouveau protocole semble maintenant basé sur une librairie nommée "Protobuf" sur lequel j'ai déjà pu trouver quelques informations interessantes qui m'ont permi de déchiffrer partiellement quelques premiers paquets. Il me reste cependant encore un pas mal de travail à faire pour avoir un outil capable de déchiffrer correctement les paquets, notamment au niveau des paquet headers qui je n'ai pas encore déchiffré.
Je profite donc de ce premier poste pour passer un message aux quelques courageux qui liront ce message et se sont aussi mis en tête de déchiffrer le nouveau protocole Unity: n'hésitez pas à m'envoyer un message si vous souhaitez collaborer sur ce nouveau projet, ou simplement en discuter.
En attendant un prochain poste peut-être un peu plus détaillé et technique sur ce nouveau protocole, je vous dis à très bientôt!