Erreur lors de la connexion en MITM

Inscrit
28 Juillet 2016
Messages
13
Reactions
5
#1
Bonsoir à tous !

Cela fait maintenant 4 jours que j'essaie en vain de me connecter en MITM a Dofus. Après avoir suivi à peu près tous les tutos de la section tutoriel, j'ai décidé de me lancer !
Pour ne pas partir de zéro, j'ai décidé de reprendre ces sources, surtout qu'elles sont issues de tutoriels présents sur le forum :teeth:

Malheureusement, à chaque fois que j'essaie de me connecter sur Dofus, j'ai une exception qui est levée sur cette ligne de code :
Code:
 Array.Copy(DataToParse, index + packet_lenght_type, packet_content, 0, packet_lenght);
Le message d'erreur :
System.ArgumentException : 'Le tableau source n'est pas assez long. Vérifiez srcIndex et la longueur, ainsi que les limites inférieures du tableau.'
Voici les différentes données que j'ai lors du crash :
upload_2018-5-9_22-38-44.png

Y-a-t-il eu des changements concernant la gestion des paquets entre l'année dernière et cette année par rapport à ce qui a été fait dans le projet dont j'ai repris les sources ?

Désolé, je sais que ce n'est pas grand chose, mais je ne sais pas quoi vous fournir d'autre :'(

Merci pour votre aide !
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#2
salut ,
public static void Copy(
Array sourceArray,
int sourceIndex,
Array destinationArray,
int destinationIndex,
int length
)
Array sourceArray, ca , bon ... ca va (287 octets , on va garder ca pour plus tard)
int sourceIndex, ca , pareil , y'a pas de raison que ca aille pas (9 dans ce cas , on va voir ca apres ...)
Array destinationArray, ca , tu as de la marge (trop de marge)
int destinationIndex, bon ... ca tu vas poser a l'index 0 donc au debut du tableau ... tout va bien
int length , le probleme est ici ,

tu veux donc copier 71424 octets alors que ton tableau source en contient que 287 , j'imagine que tu voudrais copier seulement 287-9 octets ou meme peut etre simplement 287 octets

length
Type: System.Int32

Entier 32 bits qui représente le nombre d'éléments à copier
ca serait d'ailleurs mieux de creer donc un array "message_content" (parceque ca c'est un message , pas un packet) de 287 (ou 287-9) octets , ca sera plus simple pour plus tard et ca evite de monopoliser de la memoire pour rien , meme si avec nos ordi modernes (de 1990 dans mon cas , soyez pas jaloux) on est pas a 72Mo pret
 
Dernière édition:
Inscrit
28 Juillet 2016
Messages
13
Reactions
5
#3
Merci pour ta réponse. Je vais essayer de modifier la boucle qui permet de traiter les paquets reçus. Ce n'est pas évident sachant que je viens seulement de me lancer dans ce projet. Je trouve ça quand même bizarre d'avoir 71424 octets. C'est l'incrémentation de l'index qui doit merder, sachant que je suis seulement au début de la connexion et que je reçoit seulement les paquets d'id 1,3,4.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#4
les trucs en rouge , je suis pas sur , ca va dependre de ce que tu fais derriere
tu as juste a changer ca :
Array.Copy(DataToParse, index + packet_lenght_type, packet_content, 0, packet_lenght);
par ca
Array.Copy(DataToParse, index + packet_lenght_type, packet_content, 0, taille_du_message+taille_encodée+2); # taille du message et taille encodée que tu peux facilement trouver , https://cadernis.fr/index.php?threads/de-lanalyse-des-paquets.1056/

mais juste avant tu creais ton tableau packet_content (enfin plutot message_content , ca fait mieu) avec un nombre de bytes egale a taille_du_message+taille_encodée+2 ,

une fois que tu as traité ca , tu regardes si il y'a un autre message dans le packet , si index+taille_du_message+taille_encodée+2<DataToParse alors index=index+taille_du_message+taille_encodée+2 et tu recommences jusque index+taille_du_message+taille_encodée+2=DataToParse ou que index+taille_du_message+taille_encodée+2>DataToParse ,
si c'est = alors c'est tres bien y'a plus rien a faire pour ce packet
si c'est > alors tu as pas encore recu la fin du message , tu gardes ce que tu as en memoire (a partir du dernier index jusque la fin de DataToParse) et quand tu auras recu un autre packet alors il faudra ajouter ce que tu as gardé en memoire au debut du nouveau DataToParse
 
Dernière édition:
Inscrit
28 Juillet 2016
Messages
13
Reactions
5
#5
Je pense que tu auras une meilleur visibilité en visualisant le code source directement ici : https://github.com/Rtxx1/MyBot/blob/master/Protocol/PackManager.cs
Comme tu peux le voir, je bloque actuellement dans la fonction ParsePacket (à partir de la ligne 48), qui elle va appeler la fonction TreatPacket (ligne 107). Je pense qu'en visualisant le code ce sera plus simple pour toi de m'aider :teeth:

D'après toi je peux me baser sur ces sources comme base, ou je devrais partir de zéro ?
 
Haut Bas