Bonjour,
Je suis entrain de réaliser un petit bot Mitm afin de comprendre la logique auth de Dofus notamment, mais je bloque dès les premiers messages :'( ...
Je n'arrive pas à comprendre, pourquoi j'ai le droit à cette erreur de la part du client Dofus :


Je ne fait que Forward le ProtocolRequiredMessage et le HelloConnectMessage recu par le serveur auth au client ?
Cmd :
![img]()
(Le message recu par le client d'id 182 est un problème dont je ne trouve pas la source ..., est-il normal que le serveur me relance du coup le ProtocolRequiredMessage ?)
En pensant que ces erreurs peuvent venir de la manière dont je parse les données, voici le code :
/// <summary>
/// <see cref="PacketParser"/> parses a packet when local server receiving data.
/// </summary>
public static class PacketParser
{
public static IPacket ParsePacket(byte[] message, int packetOriginEnum)
{
IHeader header;
byte[] payload;
DofusReader reader = default;
try
{
reader = new DofusReader(new MemoryStream(message));
header = ParseHeader(ref reader, packetOriginEnum);
payload = reader.ReadBytes(header.PacketLength);
return new Packet(payload, header);
}
finally
{
reader.Dispose();
}
}
private static IHeader ParseHeader(ref DofusReader reader, int packetOriginEnum)
{
short header;
int packetId;
uint instanceId;
LengthTypeEnum lengthType;
byte[] dataLengthRead;
int packetLength;
header = reader.ReadInt16();
packetId = header >> BinaryConstants.BIT_RIGHT_SHIFT_LEN_PACKET_ID;
instanceId = (packetOriginEnum == 0) ? reader.ReadUInt32() : default;
lengthType = (LengthTypeEnum)(header & BinaryConstants.BIT_MASK);
dataLengthRead = reader.ReadBytes((int)lengthType);
packetLength = ParseDataLength(dataLengthRead, lengthType);
return new Header(packetId, lengthType, packetLength)
{ InstanceId = instanceId };
}
private static int ParseDataLength(byte[] dataLengthReader, LengthTypeEnum lengthType)
{
int len = 0;
for (int i = (int)lengthType - 1, j = 0; i >= 0; i--, j++)
len |= dataLengthReader[j] << (i * 8);
return len;
}
public void ForwardMessage(byte[] buffer,PacketDestinationEnum dst, IHeader header)
{
string origin = dst == PacketDestinationEnum.Client ? "SERVER" : "CLIENT";
if (dst == PacketDestinationEnum.Client)
base.ClientPipe.Output.Write(buffer);
else
base.ServerPipe.Output.Write(buffer);
Console.WriteLine($"[{header.ToString()}] forward from {origin}");
}