VB/VB.Net Taille des packets reçus/envoyés?

A

Anonymous

Invité
#1
Salut Cadernis,

J'aimerais savoir quelles tailles font vos packets reçus/envoyés (les quelques premiers).. Juste pour être sûr que j'suis sur le bon chemin.

Je trouve ça moi (oui j'ai tout repris de zéro un nouveau bot) :

Code:
Packet Reçu : (Id = 1) | (Taille = 8)
Packet Reçu : (Id = 3) | (Taille = 330)
Packet Envoyer : (Id = 4) | (Taille = 290)
Merci d'avance.
 
Inscrit
13 Septembre 2011
Messages
37
Reactions
0
#2
[Reçu] ID = 1 | Taille = 8
[Reçu] ID = 3 | Taille = 330
[Envoyé] = 4 | Taille = 293
[Reçu] ID = 10 | Taille = 4

Le 4 change, c'est normal vu que le login et le mot de passe ne sont pas pareils.
 
A

Anonymous

Invité
#3
J'crois que j'suis sur la bonne voie, mais qu'entends-tu par "le login et le mot de passe ne sont pas pareils" ?
 
A

Anonymous

Invité
#4
Qu'en fonction du login et du mot de passe que tu envoies à partir du client, la longueur de ton packet change.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#5
Seulement le login change la taille , pour le pass ca change pas la taille du message
 
A

Anonymous

Invité
#6
D'accord! Merci à vous de m'avoir répondu clairement. Donc j'ai un p'tit problème, en sniffant, la taille de mon packet 3 (HelloConnectMessage) est de 334 alors que sur mon bot j'ai une taille de 330, bizarre.. Voilà mon code :

Code:
                ID_Message = New Messages.Connection.HelloConnectMessage
                ID_Message.Deserialize(PacketData)

                Dim account As String = XXX
                Dim password As String = XXX
                Dim salt As String = ID_Message.salt
                Dim key As List(Of Integer) = ID_Message.key
                Dim cryptedPassword = New RSAManager().Encrypt(salt + password, key)

                Dim version As Types.Version.Version = New Types.Version.Version
                version.initVersion(2, 8, 3, 65735, 1, 0)

                Dim message As Messages.Connection.IdentificationMessage = New Messages.Connection.IdentificationMessage
                message.initIdentificationMessage(version, "fr", account, cryptedPassword, 0, True, False, True)
                message.pack()
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#7
avec juste ca :
ID_Message = New Messages.Connection.HelloConnectMessage
ID_Message.Deserialize(PacketData)
j'ai du mal a voir ou ca va pas :mrgreen:
 
A

Anonymous

Invité
#8
J'ai ordonné un peu mes classes, donc petite mise à jour de mon code :

Code:
Case 3
                ID_Message = New Messages.Connection.HelloConnectMessage
                ID_Message.unpack(PacketReceived)

                Dim account As String = TextAccount.Text
                Dim password As String = TextPassword.Text
                Dim salt As String = ID_Message.salt
                Dim key As List(Of Integer) = ID_Message.key
                Dim cryptedPassword = New RSAManager().Encrypt(salt + password.Count + password + account, key)

                Dim version As Types.Version.Version = New Types.Version.Version
                version.initVersion(2, 9, 0, 67791, 1, 0)

                Dim message As Messages.Connection.IdentificationMessage = New Messages.Connection.IdentificationMessage
                message.initIdentificationMessage(version, "fr", cryptedPassword, 0, True, False, True)
                message.pack(PacketSend)

PacketReceived = D*fus.D*fusReader
PacketSend = D*fus.D*fusWriter

Ma classe HelloConnectMessage :

Code:
Namespace Messages.Connection

    Public Class HelloConnectMessage

        Public salt As String = ""
        Public key As New List(Of Integer)
        Public protocolId As UInteger = 3

        Public Function HelloConnectMessage()
            Me.key = New List(Of Integer)
            Return Me
        End Function

        Public Function unpack(ByVal param1 As D*fus.D*fusReader)
            Dim _loc_4 As Integer
            Me.salt = param1.ReadUTF()
            Dim _loc_2 As UShort = param1.ReadUnSignedshort()
            Dim _loc_3 As UInteger
            While (_loc_3 < _loc_2)
                _loc_4 = param1.ReadByte()
                Me.key.Add(_loc_4)
                _loc_3 += 1
            End While
            Return Me
        End Function

    End Class

End Namespace

Ma classe IdentificationMessage :

Code:
Namespace Messages.Connection

    Public Class IdentificationMessage

        Public version As Version
        Public lang As String = ""
        Public credentials As List(Of Integer)
        Public serverId As Integer = 0
        Public autoconnect As Boolean = False
        Public useCertificate As Boolean = False
        Public useLoginToken As Boolean = False
        Public protocolId As UInteger = 4

        Public Function IdentificationMessage()
            Me.version = New Version
            Me.credentials = New List(Of Integer)
            Return Me
        End Function

        Public Function initIdentificationMessage(ByVal param1 As Version, ByVal param2 As String, ByVal param3 As List(Of Integer), ByVal param4 As Integer, ByVal param5 As Boolean, ByVal param6 As Boolean, ByVal param7 As Boolean) As IdentificationMessage
            Me.version = param1
            Me.lang = param2
            Me.credentials = param3
            Me.serverId = param4
            Me.autoconnect = param5
            Me.useCertificate = param6
            Me.useLoginToken = param7
            Return Me
        End Function

        Public Function pack(ByVal param1 As D*fus.D*fusWriter)
            Dim _loc_2 As UInteger
            _loc_2 = BooleanByteWrapper.setFlag(_loc_2, 0, Me.autoconnect)
            _loc_2 = BooleanByteWrapper.setFlag(_loc_2, 1, Me.useCertificate)
            _loc_2 = BooleanByteWrapper.setFlag(_loc_2, 2, Me.useLoginToken)
            param1.WriteUInt32(_loc_2)
            Me.version.pack(param1)
            param1.WriteUTF(Me.lang)
            param1.WriteInt32(Me.credentials.Count)
            Dim _loc_3 As UInteger
            While (_loc_3 < Me.credentials.Count)
                param1.WriteByte(Me.credentials(_loc_3))
                _loc_3 = _loc_3 + 1
            End While
            param1.WriteShort(Me.serverId)
            Dofus.DofusWriter.Send(Me.protocolId)
            Return Me
        End Function

    End Class

End Namespace

Ma classe Version :

Code:
Namespace Types.Version

    Public Class Version

        Public major As UInteger = 0
        Public minor As UInteger = 0
        Public release As UInteger = 0
        Public revision As UInteger = 0
        Public patch As UInteger = 0
        Public buildType As UInteger = 0
        Public protocolId As UInteger = 11

        Public Function Version()
            Return Me
        End Function

        Public Function initVersion(ByVal param1 As UInteger, ByVal param2 As UInteger, ByVal param3 As UInteger, ByVal param4 As UInteger, ByVal param5 As UInteger, ByVal param6 As UInteger) As Version
            Me.major = param1
            Me.minor = param2
            Me.release = param3
            Me.revision = param4
            Me.patch = param5
            Me.buildType = param6
            Return Me
        End Function

        Public Function pack(ByVal param1 As Dofus.DofusWriter)
            param1.WriteByte(Me.major)
            param1.WriteByte(Me.minor)
            param1.WriteByte(Me.release)
            param1.WriteInt32(Me.revision)
            param1.WriteByte(Me.patch)
            param1.WriteByte(Me.buildType)
            Return Me
        End Function

    End Class

End Namespace

Ma classe RSAManager :

Code:
Public Class RSAManager

    Public Function Encrypt(ByVal Input As String, ByVal Key As List(Of Integer)) As List(Of Integer)
        Dim buffer4 As Byte() = New Byte(3 - 1) {}
        buffer4(0) = 1
        buffer4(2) = 1
        Dim buffer As Byte() = buffer4
        Dim buffer2 As Byte() = New Byte(256 - 1) {}
        Dim i As Integer
        For i = 33 To 289 - 1
            buffer2((i - 33)) = CByte(Key.Item(i))
        Next i
        Dim bytes As Byte() = Encoding.UTF8.GetBytes(Input)
        Dim parameters As New RSAParameters
        Dim provider As New RSACryptoServiceProvider
        parameters.Modulus = buffer2
        parameters.Exponent = buffer
        provider.ImportParameters(parameters)
        Dim list As New List(Of Integer)
        Dim num2 As Byte
        For Each num2 In provider.Encrypt(bytes, False)
            list.Add(num2)
        Next
        Return list
    End Function

End Class

Et j'obtient à présent cette erreur au moment de l'envoi de l'identification :

Code:
Packet Reçu : (Id = 1) | (Taille = 8)
Packet Reçu : (Id = 3) | (Taille = 341)
Parsing() ToDouble -> La conversion de la chaîne "hamkxpl2K1%N?}/,qz2@wQW2I+&dk0*}" en type 'Double' n'est pas valide.
 
A

Anonymous

Invité
#9
Cette erreur est réglé! J'ai partager la solution ici => https://cadernis.fr/index.php?threads/changements-de-la-29.829/

Mais il y a toujours un p'tit truc qui me tracasse, sur WPE PRO je sniffe et j'ai ça :

Packet Reçu : (Id = 1) | (Taille = 11)
Packet Reçu : (Id = 3) | (Taille = 345)
Packet Envoyé : (Id = 4) | (Taille = 280)

Et avec mon bot j'ai ça :

Packet Reçu : (Id = 1) | (Taille = 8)
Packet Reçu : (Id = 3) | (Taille = 341)
Packet Envoyé : (Id = 4) | (Taille = 281)

Pourtant mes packets (classes) sont à jours.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#10
c'est parceque ton parser ne compte pas le "header" (2 1er bytes + byte(s) de taille) , il doit afficher juste la taille
 
A

Anonymous

Invité
#11
Ah ouais un manque d'attention de ma part.. j'avais mis en commentaire pour un test. Merci!

Edit: c'est toujours pareil.. tu parlais bien de ceci :

Code:
0x000508000005CC00
Edit 2: Sinon y'a un truc de louche.. Je ne reçois pas le packet 20 (IdentificationFailedMessage) car si le mot de passe est mal encrypter alors l'identification échoue forcément. Vous avez une idée du pourquoi ? On m'a dit je doit le recevoir directe, qu'il n'y a pas besoin de code pour ça!
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#12
Bah tu ne recoi meme pas le paquet t'indiquant que la connexion est réussi donc xD
Sinon ta pas d'erreure apres la reception de ces paquets, car sur TV, tu avais déjà fais les paquets suivant. Donc ya quelque chose qui cloche dans ton paquet 3.
 
A

Anonymous

Invité
#13
Aucune erreur.. ce que je trouve vraiment bizarre!
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#14
Tu as traduit et echange le Version par VersionExtented ?
 
A

Anonymous

Invité
#15
Oui oui bien sûr, d'aillleurs à propos de ça, quel valeur on doit mettre à install et technology ?

Code:
                Dim version As Types.Version.VersionExtended = New Types.Version.VersionExtended
                version.initVersionExtended(2, 9, 1, 67926, 8, 0, 0, 0)
Code:
Namespace Types.Version

    Public Class VersionExtended
        Inherits Version

        Public install As UInteger = 0
        Public technology As UInteger = 0
        Public Overrides Property protocolId As UInteger = 393

        Public Function VersionExtended()
            Return Me
        End Function

        Public Function initVersionExtended(ByVal param1 As UInteger, ByVal param2 As UInteger, ByVal param3 As UInteger, ByVal param4 As UInteger, ByVal param5 As UInteger, ByVal param6 As UInteger, ByVal param7 As UInteger, ByVal param8 As UInteger) As VersionExtended
            MyBase.initVersion(param1, param2, param3, param4, param5, param6)
            Me.install = param7
            Me.technology = param8
            Return Me
        End Function

        Public Overrides Function pack(ByVal param1 As D*fus.D*fusWriter)
            MyBase.pack(param1)
            param1.WriteByte(Me.install)
            param1.WriteByte(Me.technology)
            Return Me
        End Function

    End Class
End Namespace

Sinon est-ce que ce que j'ai fait en dessous pose pas problème ? Enfin moi il ne m'en affiche pas mais on sais jamais.

Dans le parsing () j'ai modifié comme ceci :

Code:
DataCheck(packet_Id, New D*fus.D*fusReader(New IO.MemoryStream(packet)), New D*fus.D*fusWriter)
Et dans le DataCheck :

Code:
Private Sub DataCheck(ByVal ID As Integer, ByVal PacketReceived As D*fus.D*fusReader, ByVal PacketSend As D*fus.D*fusWriter)
Pour au final :

Code:
Dim message As Messages.Connection.IdentificationMessage = New Messages.Connection.IdentificationMessage
message.initIdentificationMessage(version, "fr", cryptedPassword, 0, True, False, True)
message.pack(PacketSend)
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#16
Masi ce que je comprend pas c'est que tu n'a ni réponse du serveur ni erreur. Le serveur devrait répondre quand même.

Tout ce qui concerne le datacheck a l'air bon.
IdentifictionMessage la même.

-> Cryptage ?
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#17
Montre nous ce que contient ton cryptedPassword.
 
A

Anonymous

Invité
#18
Quel valeur doit-on mettre à install et technology de la classe VersionExtended ?

Code:
Dim cryptedPassword = New RSAManager().Encrypt(salt & password.Count & password & account, key)
Code:
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography

Public Class RSAManager

    Public Function Encrypt(ByVal Input As String, ByVal Key As List(Of Integer)) As List(Of Integer)
        Dim buffer4 As Byte() = New Byte(3 - 1) {}
        buffer4(0) = 1
        buffer4(2) = 1
        Dim buffer As Byte() = buffer4
        Dim buffer2 As Byte() = New Byte(256 - 1) {}
        Dim i As Integer
        For i = 33 To 289 - 1
            buffer2((i - 33)) = CByte(Key.Item(i))
        Next i
        Dim bytes As Byte() = Encoding.UTF8.GetBytes(Input)
        Dim parameters As New RSAParameters
        Dim provider As New RSACryptoServiceProvider
        parameters.Modulus = buffer2
        parameters.Exponent = buffer
        provider.ImportParameters(parameters)
        Dim list As New List(Of Integer)
        Dim num2 As Byte
        For Each num2 In provider.Encrypt(bytes, False)
            list.Add(num2)
        Next
        Return list
    End Function

End Class
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#19
Code:
public var install:uint = 0;
        public var technology:uint = 0;
->

Code:
Public Install as Uinteger = 0
Public technology as Uinteger = 0
Tout ce qu'il y a de basique.

Je ne saurais pas te dire si ton cryptage est correct, il faudrait que tu nous donne la valeur de ton cryptedPassword.
 
A

Anonymous

Invité
#20
Elle retourne 256 éléments. Je suis pressé j'éditerais ce message à mon retour pour plus de précision..
 
Haut Bas