Slither.io : Chapitre 3.1

 

Chargement de la page

Avant de se lancer dans l'analyse du code JS ... il faut avoir le code et tout le code. Les développeurs ont peut-être mis en place quelques protections.

Encore un fois on lance notre console de développement Firefox (Ctrl + Maj + I). On recharge ensuite la page du jeu Slither.io et on regarde l'onglet "réseau" de la console. On désactive l'affichage des images, polices et autres médias qui nous importent peu pour l'instant.


Si on ignore les fichiers liés à la pub, les réseaux sociaux et autres fioritures il reste :
  • Le fichier html qui constitue le corps de notre application
  • Le fichier game7egig.js
  • Le fichier i33628.txt
  • Et enfin le navigateur établit des connections de type Websocket (fichiers type ptc) 
C'est tout, pas de CSS car les styles sont inclus dans le HTML ou générés en JS.

Cookies :


Il y a 3 cookies provenant du domaine slither.io, un seul cookie présente un intérêt : GED_PLAYLIST_ACTIVITY les autres sont ajoutés par le service cloudflare (CDN et DNS du domaine à priori). Ce Cookie va certainement permettre aux serveurs du jeu de suivre nos parties, histoire d'envoyer de la pub de temps en temps ou de faire des stats. En tout cas ce n'est qu'un cookie de session (il disparait à la déconnexion, donc le lendemain si on rejoue on a un autre identifiant).
Bizarre car le jeu se souvient de notre "skin", un autre mécanisme est surement à l'oeuvre.


Code JS

Le code JS peut se trouver à 3 emplacements uniquement : le corps de la page (html), le fichier game7egig.js et le fichier i33628.txt
  1. Le code JS inclus à la page ne fait pas grand chose, il définit des fonctions qui vont permettre de récupérer par la suite le fichier i33628.txt il faut comprendre le rôle de ce fichier car il peut contenir du code JS caché, sans décoder le contenu de ce fichier nous ne sommes pas sûr de disposer de l'ensemble du code JS. 
  2. Le fichier game7egig.js est inclus à la fin de la page, il est donc interprété après le code JS intégré à la page.
  3. Le contenu de ce mystérieux fichier change à chaque rechargement, ce n'est donc pas une image ou un code JS mais peut-être des paramètres du jeu.

i33628.txt

L'analyse du code JS par l'outil de développement de Firefox pose quelques soucis. Les développeurs ont un peu complexifié les choses pour rebuter les hackers. Le code JS n'apparait pas dans l'outil, alors on va utiliser firebug et poser un point d'arrêt à la première ligne, on redémarre, on clique sur le bouton de dé-formatage car le code est minifié :
 
Et on obtient la fenêtre suivante :


La dernière ligne du code "getData("./i33628.txt", o);" appelle la fonction getData, incluse dans le fichier HTML, qui elle-même appelle la fonction "loadSoS" avec comme argument le contenu de notre fichier "./i33628.txt".

Quelques points d'arrêts bien placés dans cette dernière fonction nous permettent de déduire que le fichier "./i33628.txt" contient les paramètres de connections aux multiples serveurs de Slither.io, dans la liste il y en a environ 150. Si cette liste n'est pas fournie en clair c'est certainement pour des raisons de sécurité, mais il est assez facile de la retrouver.

Dans cette liste le code JS choisit l'un des item au hasard et tente la connection websocket vers ce serveur : e = new WebSocket("ws://" + b + ":80/ptc")

On a maintenant l'ensemble de nos briques de "lego", reste plus qu'à les assembler et comprendre à quoi sert chaque brique.


Aucun commentaire :

Enregistrer un commentaire