Knoxbide
Salut Romain,
Très joli travail !
Rare sont les présentations aussi complètent et propres !
Si je peut me permettre, d'un premier coup d'oeil on ne sait pas ou en est ton projet.
Je pense qu'une roadmap pourrait etre assez cool !
Voila pour moi :)
Bonne continuation !
J'étais sensé mener à bien le projet avec plusieurs collègues mais finalement ils n'ont pas eu le temps,
Donc normalement j'ai essayé de maintenir un board (qui ressemble un peu à un trello).
Je crois que tout le monde y a accès: https://github.com/Romain-P/Guinness-Bot/projects/1
Je résume quand même rapidement les feats:
- Redirection des connexions vers le mitm via une DLL injectée par l'extension native du bot (guinness-native)
- Packets customs envoyés depuis la DLL pour donner au MITM le host/port visé initialement (3 packets custom qu'on peut retrouver ici https://github.com/Romain-P/Guinness-Bot/blob/master/guinness-bot/guinness-core/src/main/kotlin/com/guiness/bot/controllers/NativeController.kt )
- Auto-Login (1: envoie d'input sur le process dofus, accounts, password, press OK, 2: le mitm prend le relais via les controllers)
- L'API native est assez intuitive, vous pouvez trouver toutes les fonctions sympathiques ici: https://github.com/Romain-P/Guinness-Bot/blob/master/guinness-bot/guinness-core/src/main/kotlin/com/guiness/bot/core/NativeAPI.kt
- SwfService qui sert à extraire toutes les informations des derniers swf à jour d'ankama, que ça soit un fichier lang, une map etc.. A terme il faudra s'en servir pour afficher à l'utilisateur du bot les items dispos, les ids etc..
- MapService qui sert à charger une map. Le bot reçoit MapDataMessage, contenant l'id de la map et sa clée de déchiffrement. En envoyant ces paramètres à MapService, la map va être chargée depuis le dossier dofus de l'utilisateur (path du jeu retrouvé directement grâce à l'API native). Si elle n'est pas présente, elle téléchargée depuis les serveurs d'ankama. Un système de cache est derrière tout ça. Lien du controller: https://github.com/Romain-P/Guinness-Bot/blob/master/guinness-bot/guinness-core/src/main/kotlin/com/guiness/bot/controllers/MovementController.kt
Sinon j'ai aussi commencé les game-actions (j'ai seulement fait la structure des packets, disponible ici https://github.com/Romain-P/Guinness-Bot/tree/master/guinness-bot/guinness-core/src/main/kotlin/com/guiness/bot/protocol/messages/game/actions)
----------------------
En bossant les game actions, je voulais d'abord gérer le mouvement. Lorsqu'un joueur clique sur une cellule, le client envoie GA001{path} avec {path} qui correspond à une suite de cellule correspondant au chemin emprunté par le joueur.
J'ai pas voulu m'embêter à adapter le code du client, qui est infecte, ni prendre le risque d'en faire un custom et détectable par l'antibot.
L'idée c'est donc d'infecter un swf à la volée pour demander au client, depuis le mitm, de bouger sur telle cellule. J'ai réécris le comportement du handler onDate (tu peux trouver toutes les informations tout à la fin du readme).