Bonjour à tous , je suis entrain d'essayé de faire un bot MITM , seulement voilà je n'arrive pas a me connecter a mon serveur .
J'ai cru comprendre qu'une fois le Paquet 42 , il fallait le bloquer , le modifier et l'envoyer au Serveur ( qui va se connecter au Serveur de Jeux ) , mais voila une fois que je fais ça , le client ne se connecte pas au Serveur de jeux .
Voici mon code :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using RaidBot.Protocol.Messages;
using RaidBot.Common.IO;
using System.Net.Sockets;
namespace MITM_Omar
{
public partial class Form1 : Form
{
IPEndPoint connection_serveur;
public Form1()
{
InitializeComponent();
}
public void button1_Click(object sender, EventArgs e)
{
this.textBox1.Text += "En attente de Connexion .... " +"\r\n";
Listener _listenerAuthentification = new Listener(5555); // Listener s'occupant du Seveur d'Authentification
Listener _listenerGame = new Listener(443); // Listener so'ccupant du Serveur du Jeux
_listenerAuthentification.startListening(); // On lance le Thread d'ecoute sur le Serveur d'authentification
_listenerGame.startListening(); // On lance le Thread d'ecoute sur le Serveur du Jeux
_listenerGame.onClientConnected += gameconnect;
_listenerAuthentification.onClientConnected += clientconnect;
}
public void gameconnect(Client client)
{
SetText("Client connecté au Serveur du Jeux \r\n");
Client server = new Client(connection_serveur);
client.associated = server;
server.associated = client;
client.onReception += forwardtoserver; // on créer les règles de redirection
server.onReception += forwadtoclient;
server.connect(); // on connect le client
}
public void clientconnect(Client client)
{
SetText("Client connecté au Serveur d'Authentification \r\n");
Client server = new Client(new IPEndPoint(IPAddress.Parse("213.248.126.39"), 5555)); // on initialise le client
client.associated = server;
server.associated = client;
client.onReception += forwardtoserver; // on créer les règles de redirection
server.onReception += forwadtoclient;
server.connect(); // on connect le client
}
private void forwadtoclient(Client sender, byte[] buffer)
{
ParseData(buffer, sender);
}
private void forwardtoserver(Client sender, byte[] buffer)
{
sender.associated.send(buffer);
}
private void ParseData(byte[] DataToParse, Client sender)
{
byte [] buffer = DataToParse ;
// Déclaration des variables qui seront utilisées
int index = 0;
short id_and_packet_lenght_type, packet_id, packet_lenght_type;
Int32 packet_lenght = 0;
byte[] packet_content;
// Lecture jusqu'à la fin de byte[] data
while (index != DataToParse.Length)
{
// Décodage du header
id_and_packet_lenght_type = (short)(DataToParse[index] * 256 + DataToParse[index + 1]); // Selection des 2 premiers octets du paquet
packet_id = (short)(id_and_packet_lenght_type >> 2); // Récupérer l'ID du paquet
packet_lenght_type = (short)(id_and_packet_lenght_type & 3); // Récupérer la taille de la taille de la longueur du paquet
index += 2; // On se déplace 2 octets plus loin
// Récupération de la taille du paquet
switch (packet_lenght_type)
{
case 0:
packet_lenght = 0;
break;
case 1:
packet_lenght = DataToParse[index];
break;
case 2:
packet_lenght = DataToParse[index] * 256 + DataToParse[index + 1];
break;
case 3:
packet_lenght = DataToParse[index] * 65536 + DataToParse[index + 1] * 256 + DataToParse[index + 2];
break;
}
// Récupération du contenu du paquet
packet_content = new byte[(int)packet_lenght];
Array.Copy(DataToParse, index + packet_lenght_type, packet_content, 0, packet_lenght);
// Création de la variable contenant le contenu du paquet en héxadécimal
string content_hex = string.Empty;
int huit_bytes = 0;
foreach (byte b in packet_content)
{
if (huit_bytes == 8)
{
content_hex += "\r\n";
huit_bytes = 0;
}
content_hex += b.ToString("X2") + " ";
huit_bytes++;
}
// Jounalisation
SetText("[Reçu] ID = " + packet_id +"\r\n" );
// Traitement du paquet
TreatPacket(packet_id, packet_content,sender,buffer);
// Définition de l'index qui démarre le paquet suivant
index += packet_lenght + packet_lenght_type;
}
}
private void TreatPacket(int PacketID, byte[] PacketContent, Client sder,byte[] DataToParse)
{
if ( PacketID == 42) {
// On modifie le Paquet avant de l'envoyer
SelectedServerDataMessage Data = new SelectedServerDataMessage();
CustomDataReader Reader = new CustomDataReader(PacketContent);
Data.Deserialize(Reader);
connection_serveur = new IPEndPoint(IPAddress.Parse(Data.address), Data.port);
Data.address = "127.0.0.1";
Data.port = 443;
CustomDataWriter Writer = new CustomDataWriter();
Data.Serialize(Writer);
sder.associated.send(Writer.Data);
}else {
sder.associated.send(DataToParse);
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
delegate void SetTextCallback(string text);
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text += text;
}
}
}
}
Les IO utilisés sont ceux d'Alex
Merci de votre aide !