VB/VB.Net Problème IdentificationMessage

Inscrit
16 Aout 2011
Messages
184
Reactions
0
#1
Bonsoir à tous, je me suis lancé dans la création d'un bot pendant les grandes vacances 2011, cependant, ayant trouvé le travail long, j'ai abandonné. Cet après midi, quand j'ai voulu reprendre mes sources ( connexion fonctionnelle du mois d'août ), beaucoup de choses avaient changées. Tout d'abord, le cryptage du mot de passe et de la clef. Et c'est là que je pense se trouve mon premier problème. Voici mon petit bout de code

Code:
ID_Message = New Messages.Connection.HelloConnectMessage
                ID_Message.Deserialize(PacketData)
                Dim key = ID_Message.key
                Dim Account As String = NDC.Text
                Dim Password As String = MDP.Text
                Dim Encryptage As String = RSACrypt.Encrypt(key & Password)
                Dim Version_ As New Types.Version.Version
                Version_.initVersion(2, 5, 3, 53948, 2, 0)
                Dim certificate As New List(Of TrustCertificate)
                Dim Message As New Messages.Connection.IdentificationMessage
                Message.initIdentificationMessage(Version_, Account, EncryptedPassword, certificate, True)
                Message.pack()
Ce morceau de code se situe dans mon form1.
Lorsque je test mon bot et que je met WPE, les paquets s'arrêtent au paquet 3 ( HelloConnectMessage ) c'est donc qu'il y a un problème avec mon code, et je pense du côté du cryptage. Je ne vois pas l'erreur pourtant ><

Voici la classe complète :
Code:
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading
Imports client.Network.Messages.Connexion

Public Class Form1

    Public Shared _socket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    Public Shared _socket_Jeu As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    Dim buffer(8191) As Byte
    Dim Ecoute_Connexion_thread As New Thread(New ThreadStart(AddressOf Ecoute_Connexion))
    Dim Ecoute_Jeu_thread As New Thread(New ThreadStart(AddressOf Ecoute_Jeu))
    Sub Ecoute_Connexion()
        While _socket.Connected
            Dim i = _socket.Receive(buffer)
            Dim data(i - 1) As Byte
            Array.Copy(buffer, data, i)
            parsing(data)
        End While
    End Sub

    Sub Ecoute_Jeu()
        While _socket_Jeu.Connected
            Dim i = _socket_Jeu.Receive(buffer)
            Dim data(i - 1) As Byte
            Array.Copy(buffer, data, i)
            parsing(data)
        End While
    End Sub
    Dim Data_Out(0) As Byte
    Dim Waiting As Integer

    Public Sub parsing(ByVal data() As Byte)
        Try
            Dim index As Integer
            Dim id_and_length As UShort
            Dim packet_id As UShort
            Dim packet_length_of As Byte
            Dim packet_length As Integer
            Dim Packet_Start As Integer
            Dim Packet_End As Integer

            If Waiting > 1 Then
                Dim data_temps(data.Length + Data_Out.Length - 1) As Byte
                Array.Copy(Data_Out, 0, data_temps, 0, Data_Out.Length)
                Array.Copy(data, 0, data_temps, Data_Out.Length, data.Length)
                data = data_temps
            End If

            Do Until index = data.Length
                Packet_Start = index
                id_and_length = data(index) * 256 + data(index + 1)
                packet_length_of = id_and_length And 3
                packet_id = id_and_length >> 2
                index += 2 + packet_length_of

                Select Case packet_length_of
                    Case 0
                        packet_length = 0
                    Case 1
                        packet_length = data(index - 1)
                    Case 2
                        packet_length = 256 * data(index - 2) + data(index - 1)
                    Case 3
                        packet_length = 65536 * data(index - 3) + 256 * data(index - 2) + data(index - 1)
                End Select

                If index + packet_length > data.Length Then
                    Waiting = packet_length + index - Packet_Start
                    ReDim Data_Out(data.Length - Packet_Start - 1)
                    Array.Copy(data, Packet_Start, Data_Out, 0, data.Length - Packet_Start)
                    Exit Sub
                End If

                Console.WriteLine("recu : id = " & packet_id & " taille = " & packet_length)

                Dim packet(0) As Byte
                If packet_length > 0 Then
                    ReDim packet(packet_length - 1)
                    Array.Copy(data, index, packet, 0, packet_length)
                End If
                index += packet_length
                Packet_End = index
                If Packet_End = data.Length Then
                    Waiting = 0
                    ReDim Data_Out(0)
                End If
            Loop

        Catch e As Exception
            Console.WriteLine("parsing() " & e.TargetSite.Name & " -> " & e.Message)
        End Try
    End Sub

    Private Sub connexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles connexion.Click


        _socket.Connect("213.248.126.180", 5555)
        Ecoute_Connexion_thread.Start()
        While Ecoute_Connexion_thread.IsAlive
            Application.DoEvents()
        End While

    End Sub

    Dim ip As String
    Dim Ticket As String
    Dim Suivre As Boolean
    Dim PassBot As String = "ano"
    Dim Chef As String = " "
    Dim ID_Chef As Int32
    Dim ID_Map As UInteger
    Dim ID_Cell As UInteger

    Private Sub DataCheck(ByVal ID As Integer, ByVal PacketData As Dofus.DofusReader)
        Dim ID_Message As Object = Nothing
        Select Case ID
            Case 0
                Beep()
            Case 1
                Beep()
            Case 3
                ID_Message = New Messages.Connection.HelloConnectMessage
                ID_Message.Deserialize(PacketData)

                Dim key = ID_Message.key

                Dim Account As String = NDC.Text
                Dim Password As String = MDP.Text
                Dim EncryptedPassword As String = RSACrypt.Encrypt(key & Password)

                Dim Version_ As New Types.Version.Version
                Version_.initVersion(2, 5, 3, 54146, 1, 0)
                Dim certificate As New List(Of TrustCertificate)


                Dim Message As New Messages.Connection.IdentificationMessage
                Message.initIdentificationMessage(Version_, Account, EncryptedPassword, certificate, True)
                Message.pack()

        End Select




    End Sub
End Class
IdentificationMessage

Code:
Imports client.Network.Messages.Connexion
Imports client.Types.Version

Namespace Messages.Connection

    Public Class IdentificationMessage
        Private _isInitialized As Boolean = False
        Public version As Types.Version.Version
        Public login As String = ""
        Public password As String = ""
        Public certificate As New List(Of TrustCertificate)
        Public autoconnect As Boolean = False
        Public protocolId As UInteger = 4
        Public Function IdentificationMessage()
            Me.Version = New Version()

            Return Me
        End Function
        Public Function get_isInitialized() As Boolean

            Return Me._isInitialized
        End Function
        Public Function getMessageId() As UInteger

            Return ProtocolId
        End Function
        Public Function initIdentificationMessage(ByVal param1 As Types.Version.Version, ByVal param2 As String, ByVal param3 As String, ByVal param4 As List(Of TrustCertificate), ByVal param5 As Boolean) As IdentificationMessage
            Me.version = param1
            Me.login = param2
            Me.password = param3
            Me.certificate = param4
            Me.autoconnect = param5
            Me._isInitialized = True
            Return Me
        End Function
        Public Function reset()
            Me.version = New Version()
            Me.password = ""
            Me.autoconnect = False
            Me._isInitialized = False

            Return Me
        End Function
        Public Function pack()
            Dim _loc_2 As New Dofus.DofusWriter
            Me.serialize(_loc_2)
            Dofus.DofusWriter.Send(protocolId)
            Return Me
        End Function

        Public Function unpack(ByVal param1 As Dofus.DofusReader)
            Me.deserialize(param1)

            Return Me
        End Function
        Public Function serialize(ByVal param1 As Dofus.DofusWriter)
            Me.serializeAs_IdentificationMessage(param1)
            Return Me
        End Function
        Public Function serializeAs_IdentificationMessage(ByVal param1 As Dofus.DofusWriter)
            Me.version.serializeAs_Version(param1)
            param1.writeUTF(Me.login)
            param1.WriteUTF(Me.password)
            param1.writeShort(Me.certificate.Count)
            Dim _loc_2 As UInteger = 0
            param1.writeBoolean(Me.autoconnect)
            Return Me
        End Function
        Public Function deserialize(ByVal param1 As Dofus.DofusReader)
            Me.deserializeAs_IdentificationMessage(param1)

            Return Me
        End Function
        Public Function deserializeAs_IdentificationMessage(ByVal param1 As Dofus.DofusReader)
            Me.version = New Version()
            Me.version.deserialize(param1)
            Me.login = param1.ReadUTF()
            Me.password = param1.ReadUTF()
            Me.autoconnect = param1.ReadBoolean()

            Return Me
        End Function

        Private Function Sock() As Object
            Throw New NotImplementedException
        End Function

    End Class

End Namespace
En vous remerciant de votre lecture, à bientôt.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#2
Salut , ca veut aussi surtout dire que message.pack envoie rien si wpe s'arrete au 3 (a moins que tu as bien un "send" ?)
edit : peux tu poster la class IdentificationMessage complete stp ?
 
Inscrit
16 Aout 2011
Messages
184
Reactions
0
#3
La classe n'est pas complète ? Je dis ça parce que je viens de voir ton edit donc
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#4
heu , je ne vois rien d'anormal , essai de mettre un point d'arret ici (sur la ligne du Send(protocolId) ) :
Code:
Public Function pack()
            Dim _loc_2 As New D..D.
            Me.serialize(_loc_2)
            D..D..Send(protocolId)
            Return Me
        End Function
puis une fois arrivé au point d'arret tu executes en pas a pas en regardant si il y'a bien des données dans BytesToWrite (voir meme dans m_Bytes si il y'a rien dans BytesToWrite) au moment du Form1._socket_Connexion.Send(BytesToWrite)
 
Inscrit
16 Aout 2011
Messages
184
Reactions
0
#5
J'ai mis le point d'arrêt mais comment exécuter pas à pas ?
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#7
Le serveur ne renvoit rien parce que tu es déconnecté ! Médite là-dessus ! :D

(ou sinon vérifie ta classe RSAEncrypt qui est fausse puisqu'elle ne prend pas la clef de cryptage donnée dans HelloConnectMessage... Non, cette parenthèse n'est pas là pour t'aider !)
 
Inscrit
3 Février 2012
Messages
13
Reactions
0
#8
Tu as réussi a régler ton problème ? Car j'ai le même ^^'
 
Inscrit
3 Février 2012
Messages
13
Reactions
0
#10
Je n'ai pas encore bien bien trifouillé, mais avec overedge, en modifiant la version, je stop au packet 3 aussi
 
A

Anonymous

Invité
#11
Les sources ne sont pas à jour, il y a des post qui t'explique tres clairement comment mettre a jour ta connexion. Va voir dans question reponse.
 
Inscrit
3 Février 2012
Messages
13
Reactions
0
#12
Hello, j'ai lu les différents posts en rapport avec mon problème et aussi le "mini" tutoriel de overedge expliquant comment mettre à jour, mais je suis toujours aussi perdu...

J'aimerais bien écrire sur le post d'overedge où tu expliques qu'overedge mache trop le travail... Mais je ne peux pas :s je ne sais pas pourquoi.

Donc je pense que ce n'est pas vrai. Surtout pour un débutant qui essai de se mettre à niveau, c'est toujours plus simple de comprendre avec un support qui fonctionne que de modifier un support passé de date...

J'ai lu à peu près tous les posts, et personne ne post un message "J'ai trouvé le problème ! Le problème est ça et la solution est ça..."

En espérant que tu m'aideras, merci d'avance.
 
A

Anonymous

Invité
#13
Tu ne peux pas poster un réponse sur les tutos car tu es "Apprenti(e)".
D'un côté cela aide les débutant et d'un autre côté tu vas t'habituer a attendre les mise à jour et tu ne sauras même pas comment faire.
La solution est donné dans question/réponse, a toi de relire les posts, des codes sont tout faits, tu n'as quasiment rien a modifier.
 
Inscrit
3 Février 2012
Messages
13
Reactions
0
#14
Après avoir vu un code qui fonctionne et après avoir fait une première mise à jour, je devrais être capable d'en faire d'autre, car je maîtriserai mieux le code.

Enfin bon, merci quand même :)
 
A

Anonymous

Invité
#15
Ce n'est pas en voyant la solution une fois que tu y arrivera la prochaine fois.
Si cela marche comme sa regarde les sources de overedge tu as au moins une 30aine de MAJ qui ont était faites.
La réponse est donné dans les postes, c'est du copier/coller !
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#16
Se qu'il veux en fait il veux qu'on lui face la Maj est puis il essaye de comprendre mais Cue sa ne fonctionne pas comme sa tu doit dire se que ta compris est dire ou tu bloque est nous nous somme la pour t'aider autrement sa sera très difficile.
 
A

Anonymous

Invité
#17
On a eu une discution par mp et quand il cherche un peu il peut.
Si tu as un probleme poste ici.
 
Haut Bas