A priori non puisque les données sont renvoyées tel quel, mais tu peux essayer de deserialize puis serialize le message vers le serveur.

Ta classe est correcte.

Je viens d’implémenter une classe authentificationticketmessage, quand je la déserialized je trouve une valeur bizard du ticket, qui ne ressemble pas du tout à un ticket.

Je lis le Ticket avec un readString "U!" & ChrW(134) & vbBack & "ÄÍ" & ChrW(1) & "x[" & ChrW(158) & "Ùé?íÑI" & ChrW(150) & "²ó$" & vbCr & "Cå" & ChrW(141) & "-0" & ChrW(134) & "s,§ÉÎ".

    Modifies tu le identifications message en y ajoutant un clef différente de celle du client Dofus ?

      asaki

      Je viens d’implémenter une classe authentificationticketmessage, quand je la déserialized je trouve une valeur bizard du ticket, qui ne ressemble pas du tout à un ticket.

      Je lis le Ticket avec un readString "U!" & ChrW(134) & vbBack & "ÄÍ" & ChrW(1) & "x[" & ChrW(158) & "Ùé?íÑI" & ChrW(150) & "²ó$" & vbCr & "Cå" & ChrW(141) & "-0" & ChrW(134) & "s,§ÉÎ".

      Le tiquet est une liste de bytes et non un string. Pourtant ta classe network est correcte.

      Brizze

      Modifies tu le identifications message en y ajoutant un clef différente de celle du client Dofus ?

      Non, il me semblais que l'on n’étais pas obliger comme c'est un MITM.

      Visiblement, il me semble ce sont tes IO, je te conseil un breakpoint tu le place apres le désérialise du paquet 42 tu regardes les variables qui te semble étrange et tu les mets à jour.

      J'ai une petite information qui pourrais peut être nous aider, des fois par chances le paquets passe et je peux passer à l'écran des personnages. Peut être le parseur ?

       Dim index As Integer ' pour savoir ou on est
                  Dim id_and_length As UShort ' les 2 premiers octets (16 bits)
                  Dim packet_id As UShort ' les 14 premiers bits des 16
                  Dim packet_length_of As Byte ' les 2 derniers bits des 16
                  Dim packet_length As Integer ' la longueur du packet
                  Dim Packet_Start As Integer
                  Dim Packet_End As Integer
      
                  If Waiting > 1 Then ' le buffer etait trop petit ?
                      Dim data_temps(data.Length + Data_Out.Length - 1) As Byte ' on créé un tableau de byte temporaire
                      Array.Copy(Data_Out, 0, data_temps, 0, Data_Out.Length) ' on met le debut du paquet trop long dans le tableau temporaire
                      Array.Copy(data, 0, data_temps, Data_Out.Length, data.Length) ' on met la reception a la suite
                      data = data_temps ' on met le tableau temporaire dans le tableau de travail
                  End If
      
                  Do Until index = data.Length ' on traite jusque la fin
                      Packet_Start = index
                      id_and_length = data(index) * 256 + data(index + 1) ' les 2 premiers octets
                      packet_length_of = id_and_length And 3 ' on veut les 2 derniers bits donc on masque (and) avec 11 en binaire (3 en decimal)
                      packet_id = id_and_length >> 2 ' on veut les 14 premiers bits donc on decale les 16 bits de 2 bits vers la droite
                      index += 2 + packet_length_of  ' on avance des 2 octets de id_and_length + du nombre d'octets de la taille de taille
      
                      Select Case packet_length_of ' on lit le bon nombre d'octet pour connaitre la taille des données
                          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 ' buffer trop petit ?
                          Waiting = packet_length + index - Packet_Start ' alors on le signale
                          ReDim Data_Out(data.Length - Packet_Start - 1) ' on redimensionne le tableau de debut du paquet trop long
                          Array.Copy(data, Packet_Start, Data_Out, 0, data.Length - Packet_Start) ' on copie le debut du paquet trop long
                          Exit Sub ' on sort
                      End If
                      Dim packet(0) As Byte ' on prepare le paquet
                      If packet_length > 0 Then ' si sa taille est plus grande que 0 on redimensionne
                          ReDim packet(packet_length - 1)
                          Array.Copy(data, index, packet, 0, packet_length) ' et on copie les donnée
                      End If
      
                      If IsServer = True Then
                          MyLog.WritePaquet(packet_id, packet_length, True)
                          Dim PI As New PacketIdentificator
                          Console.WriteLine("Reception id -> " & packet_id & ", Class Name -> " & PI.GetClasseName(packet_id) & ", Lenght -> " & packet_length)
                          ReceiveId(packet_id, New BigEndianReader(New System.IO.MemoryStream(packet)))
                      Else
                          MyLog.WritePaquet(packet_id, packet_length, False)
                          Dim PI As New PacketIdentificator
                          Console.WriteLine("Envoi id -> " & packet_id & ", Class Name -> " & PI.GetClasseName(packet_id) & ", Lenght -> " & packet_length)
                          ReceiveId(packet_id, New BigEndianReader(New System.IO.MemoryStream(packet)))
                      End If
      
                      index += packet_length ' on met l'index a jour
                      Packet_End = index
                      If Packet_End = data.Length Then ' si ca tombe pile poil alors le buffer etait assez grand
                          Waiting = 0 ' on reset
                          ReDim Data_Out(0) ' on reset
                      End If
                  Loop

      Je viens de faire quelque test je ne pense pas que cela vienne de la.

      Dit toi que le ticket que tu recois est crypté en AES si tu ne le décrypte pas tu auras des problèmes ^^

      grace à la clé que tu as envoyé à la connexion avec les identifiants

        Fallen

        Dit toi que le ticket que tu recois est crypté en AES si tu ne le décrypte pas tu auras des problèmes ^^

        grace à la clé que tu as envoyé à la connexion avec les identifiants

        Mais c'est un MITM pas besoin non ?

          Edit : Essaye de renvoyer le packet 42 sans passer par le parser renvoi directement ce que tu recois pour voir si ça te connecte ou pas

            Fallen

            Edit : Essaye de renvoyer le packet 42 sans passer par le parser renvoi directement ce que tu recois pour voir si ça te connecte ou pas

            Non cela ne me connecte pas.

              asaki

              Non cela ne me connecte pas.

              à la connexion du jeu tu en fait quoi la clé AES qui est envoyé par le client dans les credentials ?

              moi rien mais le client en lui même sans occupe à ma place.

                asaki

                moi rien mais le client en lui même sans occupe à ma place.

                si tu ne touche à rien u niveau packet pour le ticket c'est qu'il y a un problème de transfert des données à un moment donné les logs du client donne quoi ?

                aussi pourquoi c'est l'ip 127.0.0.1 ? tu es pas censé renvoyé les données tel quel ? ensuite pourquoi tu ferme la connexion comme c'est e client qui le fait à ta place ?

                il y a beaucoup de choses que je comprends pas bien dans ton code ^^"

                asaki

                l'ip 127.0.0.1 c'est simplement, que comme c'est un mitm, le serveur reçois cette ip, et il demande une connexion à l'ip 127.0.0.1:443 --> mon socket.

                Ensuite je ferme la connexion ou alors il ne demanderas pas la connexion.

                Log : https://www.dropbox.com/s/v2cnj76ma8r0ifa/dofus_bug_report_14-8-2016_23h26m36s.html?dl=1

                var reader = new BigEndianReader(Encoding.ASCII.GetBytes(message.ticket));

                var count = reader.ReadByte();

                var ticket = reader.ReadUTFBytes(count);

                ça c'est ce que fait Stump quand il recoit le Ticket avec le AuthenticationTicketMessage

                et ça quand il doit envoyer e SelectedServerData

                var writer = new BigEndianWriter();

                writer.WriteByte((byte)client.Account.Ticket.Length);

                writer.WriteUTFBytes(client.Account.Ticket);

                client.Send(new SelectedServerDataMessage((ushort)world.Id, world.Address, world.Port, true, Cryptography.AESEncrypt(writer.Data, client.AesKey)));

                Je sais pas si ça peut t'aider ^^"

                C'est très gentil mais je ne pense pas tout sa dois se faire dans le client ou alors identification message je bloquerais aussi à mon avis.

                  asaki

                  C'est très gentil mais je ne pense pas tout sa dois se faire dans le client ou alors identification message je bloquerais aussi à mon avis.

                  pour moi ça vient du fait que la clé AES n'est pas correcte donc c'est mal crypté et quand vient le décyptage par le client bah il doit y avoir un problème ^^"