• Général
  • [Retro] Nouvelle signature \xc3\xb9 dans les packets envoyés

Bonjour,

Je reprends mon MITM pour Retro et je vois que maintenant chaque packet envoyé par le client est "signé" par une chaine de caractère encodée commencant par "\xc3\xb9".

Il semble qu'on puisse tout de même envoyer des packets sans cette chaine.

Je voulais savoir si certains en savaient plus sur ça (anti bot ?). Et si quelqu'un sait comment elle est générée ça m'interesse !

Merci

Quelques petites précisions si ça intéresse quelqu'un :

- Il s'agit d'une chaine encodée en base64 (aucune correspondance ASCII)

- Elle est toujours composée d'une première sous chaine de 16 bytes suivie d'une autre de 208

- Elle est encapsulée par le caractère "ù" (\xc3\xb9 )

- Tous les packets envoyés par le client au serveur de jeu sont précédés de cette "signature".

- On peut quand même envoyer des packets sans signature et tout marche normalement.

- Version Retro : 1.39.9 ( je ne sais pas de quand date cet ajout mais c'est relativement récent)

- Toujours différente

Donc à quoi sert cette chaine, comment est-elle générée/encodée, comment la décoder ?

Merci !

Salut,

Quand tu examines le loader.swf, cette key est creee par une fonction js de la partie electron du client.

Cette partie electron est codee dans main.jsc qui est du byte code javascript. Pas evident a decompiler.

J'ai l'impression que cette key est plus ou moins random et doit soit surement contenir des donnees de telemetrie.

A+

ils ont chiffré les paquets AI et HT avec un clé qui est dans le code compilé mais quasi impossible à décompiler donc impossible de récupérer la clé. Avant c'était juste obfusqué donc simple à bypass.

Avant ça fonctionnait comme ça :

https://github.com/krm35/dofus-retro-telemetry

maintenant ils ont juste rajouté un chiffrement sur la donnée en sortie.

Merci beaucoup pour vos réponses !

Mais du coup pourquoi le serveur accepte des paquets même sans cette clé chiffrée ? Vous pensez que c'est temporaire ?

  • anon a répondu à ça.

    Eleko

    Merci beaucoup pour vos réponses !

    Mais du coup pourquoi le serveur accepte des paquets même sans cette clé chiffrée ? Vous pensez que c'est temporaire ?

    C'est seulement le client electron pour jouer sur boune qui chiffre les paquets, le client legacy 32 bits qui est le plus opti ne chiffre rien du tout c'est pour ça, risque de ban sur boune si tu chiffres pas.

    Okaaay je comprends mieux !

    Merci :)

    8 jours plus tard

    Salut @anon merci beaucoup pour ces éléments, c'est un peu chasse gardé sur les mesures anti bot, on trouve pas beaucoup d'info quand on est rookie .

    Du coup d'après tes explications les paquets générés via le client officiel devraient être bon. Pourrais tu expliquer pourquoi en mitm le serveur coupe la connexion même si les paquets qui transitent possèdent l'en-tête ? C'est systématique, j'ai dû virer les en-têtes pour continuer à me log.

    - Je lance le jeu sans le launcher officiel

    - Je hook avec frida

    Merci

    6 mois plus tard

    t'as pu trouver comment décryter les packets ?

    2 mois plus tard

    aucune info sur le forum concernant ces signatures entre les "\xc3\xb9" (ù) en utf-8 quelq'un a réussi à trouver comment les créer? ça ban si on ne les inclus pas? :(

    4 mois plus tard

    De nouvelles infos sur ce packet ? Je serai bien intéressé !

      8 mois plus tard

      Bobby

      De nouvelles infos sur ce packet ? Je serai bien intéressé !

      me too je suis intéréssé

      Aux dernières nouvelles tout le code permettant de signer les paquets envoyés était contenu dans le fichier jsc. Ils pré-compilent leur code en bytecode V8 en utilisant un tool qui s’appelle bytenode (qui lui même utilise une fonction native de V8). Une solution envisageable semble être de développer un décompilateur en utilisant les ops codes de la version V8 incluse dans le NodeJs qu’ils utilisent.

      Il semble qu’il existe des solutions en MITM permettant d’utiliser le mode débug d’électron afin d’utiliser les fonctions sans avoir à les connaître (ou du moins seulement leur signature).

      En full socket il est évident qu’il faut pouvoir accéder à ce code.

      On voit bien qu’il y a des bots IG sur Boune qui by-pass tout ça donc avec un peu de travail ça doit être faisable.

        7 jours plus tard

        bl0odlaw

        Aux dernières nouvelles tout le code permettant de signer les paquets envoyés était contenu dans le fichier jsc. Ils pré-compilent leur code en bytecode V8 en utilisant un tool qui s’appelle bytenode (qui lui même utilise une fonction native de V8). Une solution envisageable semble être de développer un décompilateur en utilisant les ops codes de la version V8 incluse dans le NodeJs qu’ils utilisent.

        Il semble qu’il existe des solutions en MITM permettant d’utiliser le mode débug d’électron afin d’utiliser les fonctions sans avoir à les connaître (ou du moins seulement leur signature).

        En full socket il est évident qu’il faut pouvoir accéder à ce code.

        On voit bien qu’il y a des bots IG sur Boune qui by-pass tout ça donc avec un peu de travail ça doit être faisable.

        En supposant que personne n'a réussi à reverse la vm V8 pour la version node de retro:

        - Ton MITM doit être écrit avec node.js/electron et que ça doit matcher la version de retro obviously

        - Load le main.jsc et appeler les fonctions qui permettent de signer (packetCallbackSignature j'ai oublié le nom). Les symboles sont toujours présents donc tu peux retrouver les fonctions exposées à la scope globale par ce module V8

        L'alternative la plus simple et la plus safe c'est d'injecter ton propre SWF sur le client et de hook/patch à ta guise tout ce dont tu as besoin. Si tu cherches bien, tu peux même accéder au debugger electron et faire ce que tu veux du jeu, marshal/faire des bindings AS<->JS et ecrire ton bot en JS sans t'emmerder en actionscript.

          dhelm

          En supposant que personne n'a réussi à reverse la vm V8 pour la version node de retro:

          - Ton MITM doit être écrit avec node.js/electron et que ça doit matcher la version de retro obviously

          - Load le main.jsc et appeler les fonctions qui permettent de signer (packetCallbackSignature j'ai oublié le nom). Les symboles sont toujours présents donc tu peux retrouver les fonctions exposées à la scope globale par ce module V8

          L'alternative la plus simple et la plus safe c'est d'injecter ton propre SWF sur le client et de hook/patch à ta guise tout ce dont tu as besoin. Si tu cherches bien, tu peux même accéder au debugger electron et faire ce que tu veux du jeu, marshal/faire des bindings AS<->JS et ecrire ton bot en JS sans t'emmerder en actionscript.

          Interessant. Comment accedes-tu au debuger electron?