VB/VB.Net Récupérer quelques informations

Inscrit
28 Mars 2015
Messages
38
Reactions
0
#1
Salut salut, je me demandais comment est-ce que je pourrais récupérer quelques informations tel que la vie du personnages, son pseudo, etc ?

Mon programme en vbnet sniff les packets qui transitent entre dofus et le client :




Le problème est que je n'ai aucune idée de comment savoir quel packet correspond à quoi ?

Merci de votre aide :)
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#2
Déjà, félicitations pour avoir fait ton programme :D (je suppose que tu as utilisé pcap)
Je te renvoie à mon tuto "De l'Analyse des Paquets" !!!
Et je te conseille d'afficher les data octet par octet en hexa, parce que quand un octet n'a pas de code ASCII, il affiche un point.

(P.S. : Je suis pas sûr que tu aies posté dans la bonne section, mais nobody cares)

Et tu devrais aussi filtrer, il n'y a que les derniers messages avec les ip 213.248.126._ qui correspondent à Dofus, ou tu peux utiliser le filtre de mon tuto.
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#3
Merci de ta réponse rapide je vais de suite voir ton tuto ;)

Pour ce qui est des bytes du coup oui j'ai fais un affichage comme tu me la dit ;)

 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#4
Leger problème de récupération de packet...

Je vous met directement l'image ci-dessous

La première récupération de packet est faite avec wireshark
La deuxième avec mon sniffer vb.net

Le packet dans les 2 cas correspond à la phrase << mdr bonjour gros >> qui se trouve bien dans la version texte de chacun des packets...

Cependant les bytes ne sont pas les même, quelqu'un a une idée ? :/

(wireshark et mon sniffer tournent en même temps, peut être le problème vient de la ? sa m'étonnerais..)

 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#5
C'est a cause du Hash_Function, ce paquet est crypté avec un Algorithme très spécifique et des Randoms qui proviennent du RawDataMessage.

Code:
override public function pack(param1:ICustomDataOutput) : void
      {
         var _loc2_:ByteArray = new ByteArray();
         this.serialize(new CustomDataWrapper(_loc2_));
         if(HASH_FUNCTION != null)
         {
            HASH_FUNCTION(_loc2_);
         }
         writePacket(param1,this.getMessageId(),_loc2_);
      }
Même si tu envois à chaque fois le même message tu auras des bytes différents.

Voilà la liste des paquets touchés par ce Hash_Function:

 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#6
Ah ouais d'accord, merci

Du coup on peut faire quelque chose pour ce hash_function ?

C'est assez embêtant si je ne peut pas récupérer un packet, sa veut dire dans ce cas que je ne peux pas obtenir l'ID concerné du packet quoi

Autre chose, est-ce normal que TOUT mes packets commencent par 45 00 00 :

 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#7
Je crois qu'on peut déduire du code qu'Alex t'a passé que l'id n'est pas modifié.
Je pense qu'avec pcap tu récupères tout le paquet, y compris le header (header de la trame TCP). Documente-toi sur la structure d'un paquet TCP, et tu auras juste à extraire les données.
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#8
Effectiement :

Code:
readlength = BitConverter.ToUInt16(Byteswap(bytedata, 2), 0)
            sourceport = BitConverter.ToUInt16(Byteswap(bytedata, 22), 0)
            destinationport = BitConverter.ToUInt16(Byteswap(bytedata, 24), 0)

            'Get Protocol Type
            If bytedata(9) = 6 Then
                Typez = "TCP"
            ElseIf bytedata(9) = 17 Then
                Typez = "UDP"
            Else
                Typez = "???"
            End If

            'Get IP from and to
            ipfrom = New IPAddress(BitConverter.ToUInt32(bytedata, 12))
            ipto = New IPAddress(BitConverter.ToUInt32(bytedata, 16))
On peut en déduire qu'il va déjà jusque 24 pour récupérer le port...
Le code à la base commençait à 26 :

Code:
For i = 26 To readlength - 1
                        If Char.IsLetterOrDigit(Chr(bytedata(i))) = True Then
                            stringBytes = stringBytes & Chr(bytedata(i))
                        Else
                            stringBytes = stringBytes & "."
                        End If
                        stringz = stringz & bytedata(i).ToString("X2") & " | "

                    Next
Cependant, en laissant 26 et en faisant un :

Code:
parsing.parsing(bytedata)
Eh bien j'ai un problème de taille .. :/
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#9
Merci de votre aidde, j'ai réussi à trouver le packet 861 qui correspond à la classe 'ChatClientMultiMessage'

Donc parfait, j'ai plus qu'a traduire la classe et la mettre dans mon programme vb avec un select case sur 861 et je pourrais lire le message.. :)
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#10
J'ai réussi à récupérer l'identifiant de la map (4,2 incarnam)
qui est : "Carte courante : 80218115."

J'ai donc cette valeur dans mon bot vbnet...
Cependant, comment je peux trouver la valeur <<4,2>> à partir de 80218115 ?

Il faut que je renseigne chaque map avec chaque id dans mon bot ou il y a plus simple ? x'(
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#11
Il faut récupérer les coordonnées depuis un gros dictionnaire, les d2o.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#13
Cela ne fonctionne pas à tout les coups, sachant que certaines cartes ont les même coordonées. Incarnam / Amakna par exemple
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#14
Ah ouais d'accord, merci à vous 2, je pense opter pour la solution de caramba, a voir, en tout cas dans un premier temps ;)
 
A

Anonymous

Invité
#15
BlueDream a dit:
Cela ne fonctionne pas à tout les coups, sachant que certaines cartes ont les même coordonées. Incarnam / Amakna par exemple
Elles ont les mêmes x,y mais pas le même worldId, non ?
 
Dernière édition par un modérateur:

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#16
Caramba a dit:
BlueDream a dit:
Cela ne fonctionne pas à tout les coups, sachant que certaines cartes ont les même coordonées. Incarnam / Amakna par exemple
Elles ont les mêmes x,y mais pas le même worldId, non ?
Effectivement , par exemple sur l'ile wabit , il peut y avoir une map genre (2,3) avec 2/3 MapId suite au SubAreas :) .
 
Dernière édition par un modérateur:
Haut Bas