Comment créer un bot MITM (pour de bon)

Inscrit
3 Juillet 2023
Messages
7
Reactions
5
#1
Bonjour à tous ! Avant toute chose, merci à Cadernis.fr pour son existence, il m'a beaucoup aidé à trouver des réponses à mes questions et à penser l'approche d'un projet Bot sous D2fus. Cela dit, concernant le MITM, parfois les sujets datent et après 2 semaines, je cède et je demande de l'aide à la communauté.

Mon objectif: Créer un "simple" (rien ne l'est) bot de combat, qui puisse lancé un combat en Kolizeum, spammer le même sort, avec un IA fuyarde. Un fois le combat gagner ou perdu, relancer la même opération. Mon bot est construit en C#

NOTE IMPORTANTE: Je ne suis pas développeur, simplement webdesigner (aïe ça m'aide très peu), j'ai fait tout un travail de recherche en amont pour comprendre les concepts. Même si tout n'est pas encore super clairs, je pense avoir trouvé une méthodologie.

#1 - trouver l'adresse IP du serveur Dofus, ainsi que son proxy.
J'ai utilisé Wireshark. J'arrive à capturer des paquets en ciblant le port --5555 ce qui m'a permis de trouver l'IP : 172.65.220.96. J'ai également fais la même chose pour trouver l'IP du Launcher : 162.159.133.234. J'ai lu ici qu'il n'était pas le même. Pour l'instant je ne sais pas comment l'exploiter mais j'en aurai besoin.

#2 - Installer l'environnement
Dans mon cas, j'utiliserai PacketDotNet et SharpPcap pour sniffer les paquets.

#3 - Démarrer le proxy MITM
Ici, mon code semble fonctionner, la console me renvoie bien "Proxy MITM en attente de connexions..."

#4 - Etablir la connexion avec le client D2fus.

Dans le code comme vous le voyez, je pensais que j'avais juste à exécuter mon script, le client D2fus par la suite (que fait-on du Launcher ?) et la console allait me renvoyer les paquets brut en hexadecimal comme le fait Whireshark. Or, rien ne semble se connecter.


Pour la suite des étapes je sais que je n'ai pour le moment implémenter aucune logique. J'ai bien décompiler le code source du jeu et j'ai lu a la lettre le Protocole ici dans ce forum. Je ne pense pas le maîtriser mais j'ai réalisé quelques exercices de conversion pour m'entrainer (ex: hexa vers binaire, identification du Hi-Header, Lenght etc), je pense pouvoir réussir par la suite. Cela dit, mon 1ER OBJECTIF, reste de sniffer les paquets bruts, établir la connexion et que ma console me renvoie enfin quelque chose de croustillant qui me redonnerait espoir !

Mes questions:

- Est-ce que mon code tient un peu la route et c'est carrément à côté de la plaque ?
- Est-ce que je suis bloqué (connexion au proxy MITM par le client) parce que précisément aucune logique n'est implémenter ?
- Ou bien parce que je ne tiens pas compte de l'Ankama Launcher ?
- Enfin, en décompilant le code source, j'ai failli avoir une demi-molle façon Mr Robot, c'était de courte durée quand j'ai vu tous les dossier et fichiers .AS. Je ne sais pas vraiment sur lesquels me concentrer pour réaliser mon objectif.

Bref, un grand merci à vous pour vos futures réponses. Et d'ailleurs, s'ils y en a, je propose d'épingler cette discussion et d'en faire un vrai Carnet de bord pour aider celles et ceux dans la détresse de la programmation.

Voici donc mon code (largement commenté pour suivre ma méthodologie)






BOT MITM:
using System;
using System.Net;
using System.Net.Sockets;
using PacketDotNet;
using SharpPcap;

public partial class Program
{
    public static void Main(string[] args)
    {
        Bot bot = new Bot();
        bot.Start();
    }
}

public class Bot
{
    private const string DofusServerIP = "172.65.220.96";
    private const int DofusServerPort = 5555;
    private const int ProxyPort = 5555;

    private TcpListener listener = new TcpListener(IPAddress.Any, ProxyPort);
    private TcpClient client = new TcpClient();


    public void Start()
    {
        // Démarrer le proxy MITM
        listener = new TcpListener(IPAddress.Any, ProxyPort);
        listener.Start();
        Console.WriteLine("Proxy MITM en attente de connexions...");

        // Accepter une connexion du client Dofus
        client = listener.AcceptTcpClient();
        Console.WriteLine("Connexion établie avec le client Dofus.");

        // Démarrer la boucle principale pour intercepter et manipuler les paquets
        while (true)
        {
            // Lire les données du client Dofus
            byte[] buffer = new byte[4096];
            int bytesRead = client.GetStream().Read(buffer, 0, buffer.Length);
            if (bytesRead == 0)
                break;

            // Traiter et manipuler les données du paquet
            byte[] processedData = ProcessPacket(buffer, bytesRead);

            // Envoyer les données traitées au serveur Dofus
            SendToDofusServer(processedData);
        }

        // Fermer la connexion avec le client Dofus et arrêter le proxy MITM
        client.Close();
        listener.Stop();
    }

    private byte[] ProcessPacket(byte[] data, int length)
    {
        // Implémenter ici la logique pour analyser et manipuler les paquets Dofus
        // en fonction des besoins du bot. Cela peut inclure la modification
        // des données, l'envoi de commandes personnalisées, la lecture des informations
        // du jeu, etc.

        // Exemple : renvoyer les données telles quel sans les modifier
        return data;
    }

    private void SendToDofusServer(byte[] data)
    {
        using (TcpClient server = new TcpClient(DofusServerIP, DofusServerPort))
        {
            server.GetStream().Write(data, 0, data.Length);
        }
    }
}
 
Inscrit
27 Juillet 2023
Messages
2
Reactions
0
#2
Afin de ne pas réitérer un post traitant du même sujet, j'ai préféré soumettre un commentaire en dessous :

En ce qui me concerne, j'aspire à développer un programme de type MITM en utilisant le langage Python. Mes compétences en Python sont avérées, mais en ce qui concerne les aspects liés aux réseaux, je dois avouer que je ne suis pas très à l'aise (n'ayant pas étudié cette discipline auparavant).

Après avoir examiné plusieurs projets MITM et avoir étudié de nombreux codes, je me suis rendu compte que la plupart d'entre eux ne fonctionnaient plus ou tout simplement ne donnaient pas les résultats escomptés.( Par mesure de prudence et dans la mesure du possible, j'évite d'installer des programmes que je n'ai pas préalablement examinés)

Certes, en consultant différents forums et dépôts Git, j'ai réussi à accumuler certaines connaissances, mais je n'ai pas le courage de tester directement un programme que je développerais moi-même, étant donné mon manque de familiarité avec les structures réseaux, les MITM opérationnels (qui fonctionnent) et les précautions prises par Ankama pour contrer les bots.

Je me tourne donc vers vous, chers contributeurs, pour solliciter votre aide.

Je serais reconnaissant de toute forme d'assistance, qu'il s'agisse de documents à étudier pour acquérir des connaissances, d'un code fonctionnel que je pourrais analyser, ou même d'une personne disposée à m'expliquer concrètement les concepts impliqués (ou tout autre type d'aide). Ce projet revêt une grande importance à mes yeux, car il me permettra de mieux comprendre les failles des structures réseaux, et cela s'inscrit dans ma démarche de poursuivre une carrière professionnelle dans ce domaine.
 
Inscrit
15 Decembre 2016
Messages
2
Reactions
0
#3
Salut as tu penser a utiliser chat gpt pour t'aider dans ta démarche ?
 
Inscrit
4 Decembre 2023
Messages
2
Reactions
0
#4
Bonjour à tous,

Avez-vous des news par rapport à votre problème, une avancé peut-être ?

Je m'explique, de mon côté j'arrive correctement à écouter les packets transitant entre mon client et le serveur.
Cependant, j'utilise la library pyshark (en python), en gros la library de wireshark pour python. Le problème étant que cette library ne fait que de l'écoute et ne peux rien envoyer (dites-moi si je me trompe). C'est pourquoi je vais essayer de passer par des libraries MITM comme celle que tu propose mais je rencontre le même soucis que toi.
 
Inscrit
4 Decembre 2023
Messages
2
Reactions
0
#5
Bonjour à tous,

Avez-vous des news par rapport à votre problème, une avancé peut-être ?

Je m'explique, de mon côté j'arrive correctement à écouter les packets transitant entre mon client et le serveur.
Cependant, j'utilise la library pyshark (en python), en gros la library de wireshark pour python. Le problème étant que cette library ne fait que de l'écoute et ne peux rien envoyer (dites-moi si je me trompe). C'est pourquoi je vais essayer de passer par des libraries MITM comme celle que tu propose mais je rencontre le même soucis que toi.
 
Haut Bas