MITM - Changement de serveur après réception paquet 6469.

Inscrit
25 Octobre 2018
Messages
9
Reactions
0
#1
Bonjour Cadernis!

C'est encore moi... Un jour on y arrivera!

Ce que le sniffeur fait (lorsque l'authentification est réussite):
  • Il se connecte au serveur d'auth.
  • S >> 1 = ProtocolRequired
  • S >> 3 = HelloConnectMessage
  • C << 4 = IdentificationMessage
  • C << 5607 = ClientKeyMessage
  • S >> 10 = LoginQueueStatusMessage
  • S >> 6314 = CredentialsAcknowledgementMessage
  • S >> 22 = IdentficiationSuccessMEssage
  • S >> 6469 = SelectedServerDataExtendedMessage
  • Changement de serveur par celui deserializé dans le message précédent.
  • C << 110 = AuthenticationTicketMessage


J'ai donc tenté de reproduire ces procédures, le MITM que j'ai actuellement permet d'aller jusqu'au paquet 6469 (SelectedServerDataExtendedMessage), de deserializer les données reçus dedans.
Ainsi, une fois que je reçois le paquet en question, je close la connexion de mon MITM au serveur d'auth, je destroy le socket actuel et le remplace par un nouveau que je connecte immédiatement au serveur reçus dans le paquet:

JavaScript:
// index.js

// lorsque l'on recoit des données
server.on("s-data", (datas) => {
  let message = new Message(datas, 65565, true); // on itinit la classe Message
  message.execProtocol(); // on le deserialize (ce qui créer la variable message.var avec toutes les vars deserializés)
  console.log(colors.fg.Yellow, message.vars, colors.Reset); // debug
  if (client.linked){
    client.send(datas); // si le client est accessible, on lui envoit
  }else {
    console.warn("Client not linked yet");
  }

  if (message.headerId == 6469){ // Si le message est SelectedServerDataExtendedMessage on switch la connection
    server.switchConnectionTo(message.vars.address)
  }
})
JavaScript:
// la méthode switchConnectionTo de la class Server
switchConnectionTo(ip){
     this.linked = false; // on rend le serveur inaccessible pour le moment
     this.client.destroy(); // on détruit la connexion au serveur
     console.debug("destroyed the old connection!");
     this.client = new net.Socket(); // on en créer une nouvelle
     this.client.connect(5555, ip, () => {  // que l'on connecte à l'ip passé en paramètre
       console.debug("Changed the connection to ", ip, ".");
       this.linked = true; // on le rend accessible
     });
     this.client.on('data', (data) => { // lorsque l'on reçoit des données, on fait passer
       this.launchQueue(data)
     });

     this.client.on('close', () => {
         console.log(colors.bg.Black, colors.fg.Red,"Ank@m@ server closed the connection.", colors.Reset);
       this.linked = false;
     });
   }

Le problème, c'est que quand j’exécute le programme, je reçois tous les paquets jusqu'au 6469, puis on change la connexion au serveur donné dans la paquet en question, et mon client n’envoie jamais le paquet 110 = AuthenticationTicketMessage, j'ai premièrement essayé de le construire, mais avec toutes l'encryption du ticket et tout ça serait bien plus simple que le client le fasse comme il le ferait nativement. Je vous laisse une trace d’exécution du programme.

Code:
  Waiting for client!
----------------
API function hooked !
Process: Dofus (PID=196)
"connect" add: 0x778C5EE0
Continue add: 0x05D80000
Hook add: 0x05D90000
----------------

  [CLIENT]:  02 d9 00 00 00 01 01 01
{ headerId: 182,
  messageLen: 0,
  headerMessageLen: 1,
  messageName: 'BasicPingMessage',
  headerLen: 3 }
message Length = 0
MITM linked to Ank@m@ server.
  [SERVEUR]:  00 05 08 00 00 07 57 00 00 07 62
{ headerId: 1,
  messageLen: 8,
  headerMessageLen: 1,
  messageName: 'ProtocolRequired',
  headerLen: 3 }
{ requiredVersion: 1879, currentVersion: 1890 }
  [SERVEUR]:  00 0e 01 55 00 20 6a 6e 75 6a 38 73 6e 64 73 4d 77 37 35 57 3b 21 39 5e 5f 49 3a 78 5a 79 70 35 3c 50 39 7d 6d 27 b1 02 56 6a c7 d8 d4 64 5b a9 43 95 ca 85 f8 f1 2a 26 72 84 ce 61 c8 05 6f 28 9c 3a 2b 07 7d 11 f2 67 28 a2 3d 8b 1d 54 94 ee 9c e0 8b 43 52 c4 2f 66 93 45 82 b0 32 c8 0a 50 8b 3b 98 ca 35 71 8a 24 15 42 41 76 f9 c4 b8 da f9 60 31 7d cc cf d9 e9 d2 aa 91 cb 02 f3 e4 0c 5a d5 00 7e ea 94 cc 77 37 42 f9 40 e1 2e a9 46 55 f6 a1 a5 58 d5 e1 e2 6d a6 ee d0 4c d6 37 86 45 e9 0a b9 d2 8a 5c 95 d6 cf 37 0f 10 c0 27 c2 f3 ef b8 3b 96 9e 52 32 86 30 36 27 b5 24 5f 0b 44 1e a2 ab e1 7c 69 4f b4 e1 9f 0e eb 8e 96 2a 93 95 0f 2e 61 7f b4 39 bd ab 16 93 81 ab 44 bc 98 bc 75 4d 30 0e c9 3d 47 8d d7 e5 e7 4e 9c cd 6a 51 3a e0 58 25 f0 5f a2 b2 ab 45 db 29 e9 10 29 54 92 1a bc b0 9c f2 c7 28 b9 bc 5a a2 15 c1 68 fe 00 e4 91 7c f6 9a 65 db 94 3a 98 f1 8f 94 4f 92 43 87 ce b6 50 6b 85 24 bb a7 e0 e1 4c 80 8e ae ab e7 0e 20 ff 3d 52 6d 84 c5 f4 47 54 86 9b 7e 8f 21 f1 61 d3 3a 72 2a c9 f0 0d 31 08 29 fc ab bb d1 09 a9 f6 dd 0f
{ headerId: 3,
  messageLen: 341,
  headerMessageLen: 2,
  messageName: 'HelloConnectMessage',
  headerLen: 4 }
{ salt: 'jnuj8sndsMw75W;!9^_I:xZyp5<P9}m\'',
  keyLength: 305,
  key:
   [ 86,
     106,
     -57,
     -40,
     -44,
     100,
     91,
     -87,
     67,
     -107,
     -54,
     -123,
     -8,
     -15,
     42,
     38,
     114,
     -124,
     -50,
     97,
     -56,
     5,
     111,
     40,
     -100,
     58,
     43,
     7,
     125,
     17,
     -14,
     103,
     40,
     -94,
     61,
     -117,
     29,
     84,
     -108,
     -18,
     -100,
     -32,
     -117,
     67,
     82,
     -60,
     47,
     102,
     -109,
     69,
     -126,
     -80,
     50,
     -56,
     10,
     80,
     -117,
     59,
     -104,
     -54,
     53,
     113,
     -118,
     36,
     21,
     66,
     65,
     118,
     -7,
     -60,
     -72,
     -38,
     -7,
     96,
     49,
     125,
     -52,
     -49,
     -39,
     -23,
     -46,
     -86,
     -111,
     -53,
     2,
     -13,
     -28,
     12,
     90,
     -43,
     0,
     126,
     -22,
     -108,
     -52,
     119,
     55,
     66,
     -7,
     64,
     ... 205 more items ] }
  [SERVEUR]:  02 dd 01 01
{ headerId: 183,
  messageLen: 1,
  headerMessageLen: 1,
  messageName: 'BasicPongMessage',
  headerLen: 3 }
{ quiet: true }
  [CLIENT]:  00 12 00 00 00 05 01 17 01 02 30 0f 0f 36 2e 17 01 00 01 01 00 02 66 72 80 02 77 30 f0 d9 e5 c7 e7 2c ee 38 9d bb 50 dd c4 b7 a1 c7 48 15 57 d3 fc f3 11 27 38 01 ff 22 75 85 21 cd 15 9c 94 77 c6 a5 36 78 6f 70 38 4e f0 f1 b4 c2 dc 95 15 41 cb bb 22 69 7b 0a ce 05 70 41 f7 f4 25 6f 2c 24 f5 e6 0c 8c 7b a4 ac 96 6b 7f 31 3a d9 01 1f b8 11 4a ef 52 6a 62 3b 33 36 e8 f0 e7 84 c1 fe 31 4a 9d 66 39 63 c5 3f 8a 02 96 7f 74 a9 ae 9e 24 62 15 87 44 db 5e 98 12 6c 78 31 f3 94 b9 02 ed 64 b4 16 56 e7 13 31 7d 7b a0 e9 12 ce 8c 6c 45 05 e4 53 0f 8d aa f1 05 3e b3 07 eb 0e 98 33 ea 48 ff d9 3e e2 4d df ce d5 7f c0 06 8b 06 b1 52 70 7f 72 76 ae a7 91 38 8c af 70 30 f9 64 c9 2a c1 95 29 73 80 e3 7f 73 9c 66 25 1a e5 73 67 c8 10 45 c7 b1 5c 5d 97 c1 24 8f 8e de 1e e5 8e 2e 1c 40 b0 09 16 9d 9c c8 13 a2 dc 3a 79 43 d2 77 70 99 9c 9b eb 09 fa ee 89 ab 00 00 00 00 00
{ headerId: 4,
  messageLen: 0,
  headerMessageLen: 2,
  messageName: 'IdentificationMessage',
  headerLen: 4 }
message Length = 0
  [CLIENT]:  57 9d 00 00 00 06 17 00 15 35 37 37 79 51 59 76 37 66 35 6a 57 79 31 70 36 38 37 23 30 31
{ headerId: 5607,
  messageLen: 0,
  headerMessageLen: 1,
  messageName: 'ClientKeyMessage',
  headerLen: 3 }
message Length = 0
  [SERVEUR]:  00 29 04 00 13 00 13
{ headerId: 10,
  messageLen: 4,
  headerMessageLen: 1,
  messageName: 'LoginQueueStatusMessage',
  headerLen: 3 }
{ position: 19, total: 19 }
  [SERVEUR]:  62 a8
{ headerId: 6314,
  messageLen: 0,
  headerMessageLen: 0,
  messageName: 'CredentialsAcknowledgementMessage',
  headerLen: 2 }
message Length = 0
{}
  [SERVEUR]:  00 29 04 00 00 00 10
{ headerId: 10,
  messageLen: 4,
  headerMessageLen: 1,
  messageName: 'LoginQueueStatusMessage',
  headerLen: 3 }
{ position: 0, total: 16 }
  [SERVEUR]:  00 59 62 00 00 06 69 7a 69 6f 33 38 00 09 49 7a 69 6f 33 38 36 31 30 03 66 f0 ae 00 00 2e 51 75 65 6c 20 65 73 74 20 6d 6f 6e 20 6a 6f 75 65 75 72 20 64 65 20 62 61 73 6b 65 74 62 61 6c 6c 20 70 72 c3 a9 66 c3 a9 72 c3 a9 20 3f 42 73 6f f6 c1 0b 00 00 41 68 cc ad c0 00 00 00 42 76 72 fb 64 a5 80 00 01
{ headerId: 22,
  messageLen: 98,
  headerMessageLen: 1,
  messageName: 'IdentificationSuccessMessage',
  headerLen: 3 }
{ hasRights: false,
  wasAlreadyConnected: false,
  login: '********',
  nickname: '******',
  accountId: 57077934,
  communityId: 0,
  secretQuestion: '*******',
  accountCreation: 1335725134000,
  subscriptionElapsedDuration: 13002094,
  subscriptionEndDate: 1542693735000,
  havenbagAvailableRoom: 1 }
  [SERVEUR]:  65 16 01 4a de 01 00 0c 33 34 2e 32 34 32 2e 34 38 2e 39 37 00 02 00 00 15 b3 00 00 01 bb 00 20 2e 5d 5f c2 c5 ac 90 58 c3 bc 75 77 94 42 f8 6b 1b 34 12 1b 7b f9 4b a3 f0 75 6b f7 e5 42 ba ce 00 11 02 32 04 03 00 00 05 00 00 00 00 00 00 00 00 02 d2 01 00 03 00 00 00 00 00 00 00 00 00 00 00 00 cb 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 ce 01 00 03 00 03 03 42 76 6a 66 7c 7b 20 00 02 d1 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 d4 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 24 00 03 00 00 00 00 00 00 00 00 00 00 00 00 c9 01 00 03 00 00 00 00 00 00 00 00 00 00 00 00 cc 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 cf 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 16 01 03 00 02 05 42 73 ee ce eb 80 a0 00 03 de 01 00 03 00 02 02 42 76 6c 0a 57 cc a0 00 00 63 03 03 00 00 05 00 00 00 00 00 00 00 00 00 ca 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 cd 01 00 03 00 01 01 00 00 00 00 00 00 00 00 02 d0 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 d3 01 00 03 00 01 01 00 00 00 00 00 00 00 00
{ headerId: 6469,
  messageLen: 330,
  headerMessageLen: 2,
  messageName: 'SelectedServerDataExtendedMessage',
  headerLen: 4 }
{ serverId: 222,
  address: '34.242.48.97',
  portsLength: 2,
  ports: [ 5555, 443 ],
  canCreateNewCharacter: false,
  ticketLength: 32,
  ticket:
   [ 46,
     93,
     95,
     -62,
     -59,
     -84,
     -112,
     88,
     -61,
     -68,
     117,
     119,
     -108,
     66,
     -8,
     107,
     27,
     52,
     18,
     27,
     123,
     -7,
     75,
     -93,
     -16,
     117,
     107,
     -9,
     -27,
     66,
     -70,
     -50 ],
  serversLength: 17,
  servers:
   [ { isMonoAccount: false,
       id: 50,
       type: 4,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 5,
       date: 0 },
     { isMonoAccount: false,
       id: 210,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 203,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 206,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 3,
       charactersSlots: 3,
       date: 1540390111154 },
     { isMonoAccount: false,
       id: 209,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 212,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 36,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 201,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 204,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 207,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 22,
       type: 1,
       status: 3,
       completion: 0,
       charactersCount: 2,
       charactersSlots: 5,
       date: 1369774667786 },
     { isMonoAccount: true,
       id: 222,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 2,
       charactersSlots: 2,
       date: 1540830362826 },
     { isMonoAccount: false,
       id: 99,
       type: 3,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 5,
       date: 0 },
     { isMonoAccount: false,
       id: 202,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 205,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 1,
       charactersSlots: 1,
       date: 0 },
     { isMonoAccount: false,
       id: 208,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 211,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 1,
       charactersSlots: 1,
       date: 0 } ] }
destroyed the old connection!
  Connection to Ank@ma@ stopped
Changed the connection to  34.242.48.97 .
  [SERVEUR]:  00 05 08 00 00 07 62 00 00 07 62
{ headerId: 1,
  messageLen: 8,
  headerMessageLen: 1,
  messageName: 'ProtocolRequired',
  headerLen: 3 }
{ requiredVersion: 1890, currentVersion: 1890 }
  [SERVEUR]:  01 94
{ headerId: 101,
  messageLen: 0,
  headerMessageLen: 0,
  messageName: 'HelloGameMessage',
  headerLen: 2 }
message Length = 0
{}


N'importe quel type aide sera apprécié, si vous avez besoin de plus d'informations, je suis là! :)

Merci d'avance,

Izio
 

tazman59

Contributeur
Inscrit
20 Decembre 2012
Messages
149
Reactions
27
#2
Ton App doit changer l'ip contenue dans le SelectedServerDataExtendedMessage avant de le renvoyer au client. Parce que là ton client se connecte à 34.242.48.97 et plus en 127.0.0.1 :teeth:
 
Inscrit
25 Octobre 2018
Messages
9
Reactions
0
#3
Du coup il faudrait que mon MITM se connecte d'abord au serveur 34.242.48.97, puis que j'envois le paquet au client?
Je vais essayer cette voie là, sachant que l'ip est black listé dans le hooker:

C#:
            WinsockHook winsockHook = new WinsockHook("Dofus");
            winsockHook.SourceIPs = new List<System.Net.IPAddress>
            {
                System.Net.IPAddress.Parse("34.252.21.81"),
                System.Net.IPAddress.Parse("52.17.231.202"),
                System.Net.IPAddress.Parse("34.242.48.97"),
            };
EDIT: J'ai le même en soucis en faisant cela:
Je recois le paquet 6469, je ne transmet pas encore au client, je change la connexion, puis j'envois le paquet en question au client

EDIT2: A moins que tu parlais de changer le paquet que je reçois pour mettre 127.0.0.1, mais à quoi bon? Le hooker n'est-il pas sensé le faire de lui même?
 
Dernière édition:

tazman59

Contributeur
Inscrit
20 Decembre 2012
Messages
149
Reactions
27
#4
Tu reçois le paquet, tu changes l’ip en 127.0.0.1, tu envoies au client, tu fermes la connexion avec le serveur, tu fermes la connexion avec le client (de tête, le client ne se connectera pas au deuxième serveur tant qu’il ne sera pas déconnecté du premier).
Le client se connecte à ton bot, tu te connectes au serveur et tu recommences un échange classique.

As-tu vérifié que tu avais un serveur ouvert sur le port indiqué dans le paquet ? Je parle de changer l’ip du serveur mais tu peux très bien changer le port aussi.

Pour répondre à ta question, apparement ça ne fonctionne pas en hookant (peut-être une question de port encore une fois) alors essaye comme ça :)

Edit: en y repensant, ta méthode fonctionne sûrement, mais en commençant par te connecter au serveur tu reçois 2 paquets : le 1 et le 101 que tu dois sûrement ignorer, du coup quand le client se connecte il ne reçoit rien et attend ..
 
Inscrit
25 Octobre 2018
Messages
9
Reactions
0
#5
Si je comprend bien, il faut que j'attende le paquet en question, je ferme la connexion serveur, je l’envoi au client en ayant modifié l'ip par 127.0.0.1, je ferme la connexion client.

Je vais essayer cela je reviens vers toi.

Mon écoute client reste ouvert du début à la fin, c'est seulement le client que je déconnecterait.

Pour répondre à ton Edit, je ne les ignore pas, mais c'est comme si en faisant cela le client oublie de pack le paquet 110... Je ne sais pas ^^
 
Inscrit
10 Mai 2017
Messages
26
Reactions
30
#6
Récemment j'avais fait mon bot en MITM aussi avec le NoAnkama , et le problème si on met toutes les ip du jeu c'est justement le problème qui t'arrive maintenant.
Tu as 2 solutions pour palier à ce problème.
Tu peux retirer directement l'ip de l'authentification du NoAnkama , dans ce cas la tu auras forcément l'authentification du serveur officiel et lorsque tu te connecteras à un serveur de Dofus ton MITM va se lancer. ( Mais attention si tu utilise ça , les ips de chaque serveur de Dofus sont toute différente )

La 2ème solution , qui nécessitera un peu plus de travaille , c'est de modifier le message SelectedServerDataMessage lorsque ton MITM tu le reçois , tu met 127.0.0.1 comme ip et 443 comme port. ( C'est le serveur qui envoye ce message au client )

J'espère t'avoir aider ^^
 
Inscrit
25 Octobre 2018
Messages
9
Reactions
0
#7
@MrPot J'ai essayé la deuxième solution...

Au départ j'ai ce buffer pour le SelectedServerDataMessage
65 16 01 4a de 01 00 0c 33 34 2e 32 34 32 2e 34 38 2e 39 37 00 02 00 00 15 b3 00 00 01 bb 00 20 18 a4 f5 fc a6 17 83 54 96 e5 ff 6c d2 b6 f0 79 c4 9e 4a e6 d4 40 0f 45 f9 44 97 5d f9 07 ab 47 00 11 02 32 04 03 00 00 05 00 00 00 00 00 00 00 00 02 d2 01 00 03 00 00 00 00 00 00 00 00 00 00 00 00 cb 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 ce 01 00 03 00 03 03 42 76 6a 66 7c 7b 20 00 02 d1 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 d4 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 24 00 03 00 00 00 00 00 00 00 00 00 00 00 00 c9 01 00 03 00 00 00 00 00 00 00 00 00 00 00 00 cc 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 cf 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 16 01 03 00 02 05 42 73 ee ce eb 80 a0 00 03 de 01 00 03 00 02 02 42 76 6c 0a 57 cc a0 00 00 63 03 03 00 00 05 00 00 00 00 00 00 00 00 00 ca 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 cd 01 00 03 00 01 01 00 00 00 00 00 00 00 00 02 d0 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 d3 01 00 03 00 01 01 00 00 00 00 00 00 00 00

Que je transforme en
65 16 01 4a de 01 00 09 31 32 37 2e 30 2e 30 2e 31 00 02 00 00 15 b3 00 00 01 bb 00 20 18 a4 f5 fc a6 17 83 54 96 e5 ff 6c d2 b6 f0 79 c4 9e 4a e6 d4 40 0f 45 f9 44 97 5d f9 07 ab 47 00 11 02 32 04 03 00 00 05 00 00 00 00 00 00 00 00 02 d2 01 00 03 00 00 00 00 00 00 00 00 00 00 00 00 cb 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 ce 01 00 03 00 03 03 42 76 6a 66 7c 7b 20 00 02 d1 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 d4 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 24 00 03 00 00 00 00 00 00 00 00 00 00 00 00 c9 01 00 03 00 00 00 00 00 00 00 00 00 00 00 00 cc 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 cf 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 16 01 03 00 02 05 42 73 ee ce eb 80 a0 00 03 de 01 00 03 00 02 02 42 76 6c 0a 57 cc a0 00 00 63 03 03 00 00 05 00 00 00 00 00 00 00 00 00 ca 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 cd 01 00 03 00 01 01 00 00 00 00 00 00 00 00 02 d0 01 00 03 00 00 00 00 00 00 00 00 00 00 00 02 d3 01 00 03 00 01 01 00 00 00 00 00 00 00 00

Si je le deserialize, je tombe sur ces valeurs:

Code:
{ headerId: 6469,
  messageLen: 330,
  headerMessageLen: 2,
  messageName: 'SelectedServerDataExtendedMessage',
  headerLen: 4 }
{ serverId: 222,
  address: '127.0.0.1',
  portsLength: 2,
  ports: [ 5555, 443 ],
  canCreateNewCharacter: false,
  ticketLength: 32,
  ticket:
   [ 24,
     -92,
     -11,
     -4,
     -90,
     23,
     -125,
     84,
     -106,
     -27,
     -1,
     108,
     -46,
     -74,
     -16,
     121,
     -60,
     -98,
     74,
     -26,
     -44,
     64,
     15,
     69,
     -7,
     68,
     -105,
     93,
     -7,
     7,
     -85,
     71 ],
  serversLength: 17,
  servers:
   [ { isMonoAccount: false,
       id: 50,
       type: 4,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 5,
       date: 0 },
     { isMonoAccount: false,
       id: 210,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 203,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 206,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 3,
       charactersSlots: 3,
       date: 1540390111154 },
     { isMonoAccount: false,
       id: 209,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 212,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 36,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 201,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 204,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 207,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 22,
       type: 1,
       status: 3,
       completion: 0,
       charactersCount: 2,
       charactersSlots: 5,
       date: 1369774667786 },
     { isMonoAccount: true,
       id: 222,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 2,
       charactersSlots: 2,
       date: 1540830362826 },
     { isMonoAccount: false,
       id: 99,
       type: 3,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 5,
       date: 0 },
     { isMonoAccount: false,
       id: 202,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 205,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 1,
       charactersSlots: 1,
       date: 0 },
     { isMonoAccount: false,
       id: 208,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 0,
       charactersSlots: 0,
       date: 0 },
     { isMonoAccount: false,
       id: 211,
       type: 0,
       status: 3,
       completion: 0,
       charactersCount: 1,
       charactersSlots: 1,
       date: 0 } ] }

Malheureusement, le client ne revient pas vers moi, même si je coupe sa connexion...


EDIT: Si en fait ça fonctionne quand je coupe le client! Je n'envoyais pas de FIN paquet, mais c'est tout bon!

Maintenant je m'attaque au SelectedServerDataMessage
J'ai cru comprendre qu'il faudrait encore changer l'ip quel galère!

EDIT2: En fait ça le fais une fois sur 2...

Voilà les logs, je crois qu'il y a vraiment un soucis


A bientôt
 
Dernière édition:

tazman59

Contributeur
Inscrit
20 Decembre 2012
Messages
149
Reactions
27
#8
Apparement il y a deux ports (Ça à changé depuis la dernière fois que j’ai mis le nez dedans), es-tu sûr d’avoir ouvert un serveur sur les deux ports ?
SelectedServerDataExtendedMessage Hérite de SelectedServerDataMessage donc si tu serializes SelectedServerDataExtendedMessage tu serializes forcément SelectedServerDataMessage ;)
 
Inscrit
25 Octobre 2018
Messages
9
Reactions
0
#9
Oui c'est un enfant de la classe, j'ai fais gaffe, mais les données restent bonnes :)
Enfin, il n'y a pas de soucis à se faire au niveau des données, et j'ai bien ouvert deux serveurs, mais peut être que je devrais forcer le port sur 443 histoire qu'il n'y ai pas de conflit... Je vais essayer cette piste là (le forçage :) )

JavaScript:
this.netServer = net.createServer((socket) => {
      socket.on('data', (chunk) => {
        this.launchQueue(chunk)
        // this.emit("c-data", chunk);
      })
  
      socket.on('end', () => {
        console.log("Client ended")
      })

      socket.on('close', (hadError) => {
        if (hadError){
          console.error("[ERROR]: Connection closed MITM/Client with error: ", hadError);
        }
        this.linked = false;
      })

      socket.on('error', (err) => {
        throw new Error(err);
      })

      this.socket = socket;
      this.linked = true;

      console.log("SOMEONE JOINED US!!!!")

    });

this.netServer.listen(5555, '127.0.0.1', function(){
      console.log(colors.bg.Black, colors.fg.Green, "Waiting for client!", colors.Reset);
    });
this.netServer.listen(443, '127.0.0.1', function(){
      console.log(colors.bg.Black, colors.fg.Green, "Waiting for client!", colors.Reset);
    });
EDIT: Il a l'air de détecter mon forcage de port:

Et pourtant il ne souhaite pas me connecter, comme si le serveur était inaccessible? Comment je pourrais tester mon serveur TCP localement? (Je vais essayer avec une autre instance NodeJs je pense).
Le soucis est qu'il reçoit bien mon ServerExtended en parsé puisque si je change le port en 5556 ça le met bien dans les logs Dofus (mais ça ne se connecte pas pour autant :/).

Je reviens vers vous si j'ai du nouveau

EDIT2: Je confirme, le serveur TCP port 443 est accessible, je ne comprend vraiment pas what's going on

JavaScript:
var test = new net.Socket();
test.connect(443, '127.0.0.1', () => {

});

test.write("D2 and his bro Ank@m@ suck balls");
 
Dernière édition:

tazman59

Contributeur
Inscrit
20 Decembre 2012
Messages
149
Reactions
27
#10
Il me semble que Reg est l'outil pour le son du jeu ? Si tu lances ton client sans passer par le launcher alors je pense que c'est normal qu'il te mette des warnings, étant donné que l'outil de son se lance en même temps que le launcher
 
Haut Bas