Développeur front-office, Drupal themeur en Auvergne
+ Todo list

Récit d'un hacker à Travel IQ challenge, un jeu en flash sur facebook.

3

Facebook offre de nombreuses applications parmi lesquels des jeux en flash où sont sauvegardés les scores des participants. Il est intéressant de voir sa position par rapport à ses amis mais aussi parmi tous les utilisateurs de Facebook.

Ainsi, le jeu Traveler IQ consiste à placer le plus rapidement et précisément possible sur une carte du monde une ville, un monument célèbre où encore un événement historique. Les meilleurs en géographie se disputent les premières places. C'est ce qu'on pourrait se dire. Mais en réalité ce sont une fois n'est pas coutume les informaticiens, ces génies du monde moderne qui dominent le monde de leur beauté et leur savoir.

traveler iq challenge facebook

Mon meilleur ami Jérémie Paviet qui est dans les 300 premiers mondiaux, qui est une bombe en géographie, qui avoisine les 700 000 points et qui sent merveilleusement bon a tenu à savoir comment faisaient les meilleurs pour obtenir autant de points. Il a reçu un mail d'un mec faisant parti des 25 premiers mondiaux du jeu.


Le crack de mon premier jeux flash

Je suis chez moi, sur mon compte facebook et decide de relever le defi d'une amie sur Travel IQ challenge,
elle m'avait présenté le jeu la semaine passée et j'avais bien accroché, le jeu est bien construit, esthétique et fun.
malheureusement pour lui, il fait partie des jeux à score ... Une certaine frustration m'envahie
lors de mon n ieme essai à franchir le niveau 8 (12 au total). Je relativise, chacun ses compétances, eux c'est la géo moi
c'est l'informatique gniark gniark

pour ce crack j'ai utilisé:

  • Trillix (décompilateur Flash de qualité !!)
  • Firefox (pratique pour avoir des infos sur les pages)
  • Ethereal (sniffeur)
  • Flash 8 (pour compiler le crack)
  • UltraEdit (traitement de texte avec coloration syntaxique)
  • quelques heures de mon we
  • trouver ma cible
    ----------------

    1ere chose: je regarde grace a firefox les medias de ma page, les anims flash sont considérés comme des médias "embarqués".
    Là, pas de confusion possible il n'y en a qu'un sur la page, par contre il est mini rikiki (5ko), son nom "container" et sa taille
    me font penser que ce n'est que l'outil graphique de téléchargement du jeu. Je lance mon ethereal et rafraichis la page.
    le jeu se charge à nouveau. je regarde dans les traces et je vois un autre swf passer provenant du meme serveur ...
    hum interessant, je prends son adresse et le telecharge, je le lance ... c'est le bon !!! Ou est passé mon Décompilo ??!!

    je décompile le swf (grace à TRILLIX), je garde l'ensemble des scripts sur une unique feuille d'UltraEdit pour pouvoir
    faire des recherches de texte.
    j'essaie de voir a quel moment le jeu publie les scores. en cherchant "score" je remarque que l'anim appelle une methode ***SendAndLoad***
    de l'objet DataSource pour publier le score final ... je rentre dans l'objet et cette méthode,
    je vois des appels à d'autres methodes (de la classe) et l'utilisation d'un autre objet
    assez lourd: Fusee (package d'une dizaine de classes). je jette un rapide coup d'oeil à cette fusée,
    elle n'a pas l'air de faire grand chose à part garder une trace, je la met au placard pour me
    concentrer sur l'autre partie du code ...
    Je remarque qu'arrivé au moment de la sauvegarde du score, la classe est deja initialisée,
    et j'aurai besoin de trouver l'initialisation de gameID et de GameSessionID pour aller plus loin.
    En les recherchant dans tout l'AS je les voit s'initialiser grace à de l'XML ...
    Je reprend ma log Ethereal pour scrutter un petit xml mais le choix n'est pas judicieux,
    la chaine xml apparait tres souvent dans les logs (car compris dans les entetes HTML).
    Je profite de cette petite impasse pour me concentrer sur mes besoins reels et sur la technique d'envoi des scores.
    J'ai besoin de 5 valeurs entre crochets et séparées par des deux points.

    -gameID
    -SessionGameID
    -"1" codé en dur (peut etre l'identifiant du type de jeu)
    -le niveau atteind
    -le score.

    Cette chaine est ensuite passée
    à une classe RC4 puis cryptée par une méthode de la classe ou l'inverse **********************************************
    à la fin de ce traitement nous obtenons une chaine qui sera ajoutée à l'url ... Messieurs, nous touchons au but:
    Il suffit de générer cette chaine avec les bonnes valeurs.
    Quleques tests me montrent que gameID et SessionGameID sont indispensables,
    mais aucune trace d'url xml dans le flash, comment le recupere-t-il? Hummm, voyons un peu le source de la page ...
    Je vois bien l'appel au container avec qques variables dont ...(roulement de tambour)...
    gamexml qui contient une url contenant une clé de session, je regarde ce qui se trouve à cette adresse => c'est tout crypté,
    et ca c'est plutot bon signe ^^.
    En fouillant un peu dans la classe DataSource je ne repere qu'une méthode de cryptage, DataSource contient également
    une clé en statique j'en déduit que la méthode doit etre opérationnelle telle quelle...
    Je croise les doigts et passe le contenu crypté de l'adresse gamexml à la méthode de cryptage
    et qu'est ce que je recois en échange ??? le xml de la partie entière !!! XML qui contient non seulement gameID et SessionGameID
    mais aussi tous les lieux à découvrir ainsi que leurs coordonnées.
    Nous avons tout ce qu'il faut pour construire l'url de sauvegarde du score ...

    Après coup je me suis rendu compte que le sessionID est écrit en clair dans le source de la page
    (pas vraiment besoin de le chercher) et que le gameid est "game1" (pour cette partie du jeu)...
    cela dit je préconise d'utiliser le décrptage de l'XML pour valider la clé de cryptage
    (qui pourrait changer ...).

    Peut on cracker le score d'un autre utilisateur ? On peut se le demander, en effet les concepteurs
    proposent de jouer au jeu sans etre connecté à facebook, l'id du joueur étant renseigné dans une
    variable de l'anim...

    NB:
    Pour ceux qui ne comprennent pas ma démarche je m'explique:

    Je suis une bille en géo, grace au jeu j'ai pu combler un peu mes lacunes, mais
    le defi informatique est plus interessant pour moi que celui que le jeu propose.
    Et puis en regardant le code (bien pensé il faut le reconnaitre ...), j'apprends des techniques.
    tout comme le but du recit de mon expérience :)

    Repié

    Jetman, l'application facebook la plus intéressante au monde

    3

    Ci-dessous une capture d'écran démontrant à quel point jetman est un jeu difficile.

    Syndiquer le contenu