2013-06-29

État de l'art de la triche sur Ruzzle… et plus encore !

mise à jour 2/07 : Présentation de Ruzzle+GIF et synthèses des manipulations des vidéos.

Intro

What you must learn is that these rules are no different than the rules of a computer system...some of them can can be bent. Others...can be broken. Understand?  - Morpheus

Cette réplique de Matrix illustre assez bien ma conception de l'informatique en général et dans les jeux vidéos en particulier. Je triche, je cheat, je n'ai acun esprit de fair play, je ne respecte pas les règles du ou des développeurs mais je respecte les miennes : utiliser, comprendre, détourner, retourner. Bref … corrompre !

La première modification que j'ai apporté au Ruzzle concernait l'horloge. Mes manches durent 4 minutes, celles de l'adversaire 2. Malgré cet avantage mes adversaires arrivaient à taper des scores équivalents aux miens. Diable ! MAIS TOUT LE MONDE TRICHE !!!

C'est quoi Ruzzle ?

Ruzzle est un jeu vidéo basé sur la rapidité et le vocabulaire, il est disponible sur smartphone/tablettes et vous pouvez le télécharger ici (Android) et ici (iOS).

Vous avez 2 minutes pour réaliser le plus de mots possibles en reliant les lettres entre elles sans repasser sur la même. Les mots vont de 2 lettres à 16 (très peu probable) et doivent être dans le dictionnaire. Notez que vous avez droit aux conjugaisons.

Pour pimenter le jeu, certaines lettres ont des coefficients pour augmenter le nombre de points inscrit dans le coin supérieur droit : mot compte double, mot compte triple, double lettre… comme au scrabble d'ailleurs.

Réalisé avec trucage… :)

La limite de temps : jouez aussi longtemps que vous voulez.

(Ne fonctionne plus ... cf commentaire de Anonyme)

La minuterie de Ruzzle ne décompte pas les secondes une par une comme le laisse croire le décompte de temps. Erreur de débutant ou pas, l'application n'utilise pas d'horloge interne et attendra sagement le début de la partie +2 minutes pour arrêter le score.



Soit :
  • Lancez une partie Ruzzle, attendre quelques secondes
  • Revenez sur l'écran d’accueil de votre smartphone
  • Ouvrez l'application des paramètres
  • Reculez votre horloge de (par exemple) 5 minutes
  • Validez
  • Revenez à Ruzzle : et voilà vous avez 5 minutes de plus pour jouer. 

Maintenant que vous avez tout le temps que vous voulez, vous pouvez utiliser un solveur en ligne au hasard celui là.

Recommencez une partie : le mode hors ligne

Vous l'avez joué Lance Armstrong, vous avez fait un max de mots mais… drame ! L'adversaire a fait 3 mots à 200 points chacun. Vous avez mal de n'être qu'un Richard Virenque. Et si vous recommenciez la partie ? hein ?

Si l'astuce de l'horloge est très connue, le mode hors ligne est plus confidentiel. Je ne sais même pas si d'autres l'utilisent.

J'ai passé beaucoup de temps à traquer où Ruzzle cachait les informations affichées. La solution était pourtant sous mon nez, pour éviter de se faire pwned trop facilement, l'application garde TOUT en mémoire. A part le token pour s'authentifier au démarrage du jeu, quasiment rien n'est stockée sur le téléphone.
Donc tout est stocké en RAM. Donc si on dégomme l'application, elle perd toutes ses informations non sauvegardées.

C'est là qu'entre en jeu le mode avion. Si vous êtes content de la partie vous désactivez le mode avion, si vous êtes mécontent, vous dégommez. Notez que j'utilise "Advanced Task Killer" avec cet émulateur, mais l’arrêt d'une application est natif dans Android ou à la main :
adb shell am force-stop se.maginteractive.rumble
ou
adb shell am force-stop se.maginteractive.rumble.free




Soit :
  • Sélectionnez un adversaire
  • Passez en mode avion
  • Lancer la partie et jouez
  • Si vous n'êtes pas satisfait, tuez l'application Ruzzle (plusieurs méthodes)
  • Désactivez le mode avion
  • Relancez la partie et essayez de gagner cette fois :)
  • Si vous êtes satisfait de la partie : désactivez le mode avion
  • Appuyez sur "Fait"

Pour ceux qui me suivent sur Twitter, c'est sensiblement celle que j'avais publié une nuit, tard, d'avril. Après quelques mois d'utilisation j'ai pu la perfectionner en la réduisant au minimum de clic.

Obtenez le score d'un adversaire avant de jouer

Vous savez définir votre propre minuterie, vous collez des headshots à 4000 points d'écarts, mais comme vous ne connaissez pas le niveau de l'adversaire, c'est le dernier qui joue qui a l'avantage. Hic, c'est seulement une fois la partie finie que vous pouvez le savoir. Fatalité ? Oh que non !

Comme dit précédemment, toutes les informations importantes sont stockées uniquement en mémoire et obtenues via une requête http auprès du serveur principal de Ruzzle https://davincigameserver.appspot.com.

Problème, le flux est chiffré. Le contenant (HTTPS) est chiffré mais aussi le contenu. Comme beaucoup d'application Android, le HTTPS de Ruzzle est très simple à contourner (voir ce billet), mais vous n'obtiendrez rien.

Ce qu'il vous faut retenir c'est que le chiffrement du contenu a été fait un peu rapidement. La chaine de chiffrement à une faiblesse triviale. Bref, c'est assez simple à casser et voici la démo :
Soit:
  • Tuez l'application Ruzzle (fait avec ADB dans la vidéo)
  • Lancez l'application (dans la vidéo le script "attend" que Ruzzle soit lancé)
  • Interceptez la "discussion" entre Ruzzle et les serveurs de MagInteractive
  • Repérez le score de l'adversaire.
Comment ça marche ? Je vais détourner les propos de Snowden :

"Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that (everybody) can frequently find ways around it."

Outro : la preuve

C'est en cherchant "Ruzzle+triche" dans un moteur de recherche que j'ai découvert, avec une navrance inhabituelle, la trivialité de la faille de l'horloge. Donc mes parties contre ce top-tener ne durent que 4 minutes de mon côté et a priori 2 minutes du sien. Reste qu'il fait plus de mots que moi en 2 fois moins de temps. Comme j'ai la version payante de Ruzzle, je m’aperçois qu'il trouve systématiquement les mots qui rapportent le plus de points.

Je me suis fait marave à la première partie. Marave méchant. Comme je suis du genre revanchard j'élabore un plan "stressant" pour l'adversaire. Cet adversaire est conscient de sa triche (moi aussi donc balle au centre) mais semble attacher assez d'importance à ce jeu pour y participer avec suffisamment de régularité pour se hisser au top-10.

Le plan : perdre la première manche de 10 points. Juste 10 points. Perdre la 2 de 5 points. Gagner la 3 avec quasiment autant de point dans cette manque que l'adversaire dans les 3. Challenge !

Pourquoi perdre ? Ce que vous devez savoir, c'est qu'une partie de Ruzzle est assortie d'un contrat. Si j'ai plus de karma que vous et que vous me gagnez : jackpot pour vous et baisse de mon score. Si j'ai moins de karma que vous, vous gagnerez moins. Au final, perdre c'est pas top, mais contre un sous-classé c'est la claque.
Mon objectif est de rester suffisamment proche pour lui laisser miroiter du gain de point (donc il restera dans le classement). Si j'abats trop vite mes cartes, il préférera annuler la partie et perdre juste 300 points.

Partie 1 : oh "sauternes" … quelle surprise, le mot le plus long de la partie. Par contre ton dictionnaire ne connaissait pas pustules… Objectif 956, réalisé (en 4 minutes) 944 … pas facile de viser juste 10 points de moins. Allons pour 12.


Partie 2: collage au train : je me suis payé le luxe de faire le même score que lui, avec moins de mots et en me retenant d'utiliser TANNERIE(S) ! 1323 de part et d'autres. Cool !

La partie 3, celle du coup de grâce. Ses 3 parties cumulées font 5393. J'ai 4 minutes pour faire approchant. Ce sera 5046. C'est un score qui peut impressionner les joueurs honnêtes, mais comme ils n'arrivent jamais à ce stade là de la compétition…

Tada ! J’espère F!esta que tu as apprécié ma réponse circonstanciée. En 4 minutes j'ai fait sensiblement le même score que toi sur 3 parties. Au plaisir :-) 


Moralité, mon niveau de triche >>>>>>>>>>>>>>>>>>>>> celui de f!esta.

Et pour les rares à qui le jeu de mot avait échappé : Lesly PANCUIR (NSFW)

2 commentaires:

Anonyme a dit…

Salut ô Robin des Bois de la triche, juste pour faire remarquer que la technique du changement de l'heure ne fonctionne pas, Ruzzle ayant du le modifier. Ce que je me demande c'est si ta manipulation qui te donne 4mn à chaque fois, et que tu n'as pas expliquée, est toujours possible ?

Personnellement j'aime bien Matrix, mais je citerais plutôt le Cid de Corneille. A vaincre sans péril, on triomphe sans gloire...

Toutefois ta démarche est d'une très grande honnêteté. Ce que je souhaite, c'est savoir si ces techniques fonctionnent toujours, pour pouvoir me dire si je perds, que l'autre a probablement triché... ;)

Merci d'avance !

Unknown a dit…

Merci pour l'information sur la première astuce ! Je viens de corriger l'article.

Si tu veux de nouveau l'utiliser, il faut retourner à une ancienne version de l'application (et bloquer la mise à jour). Soit-dit en passant, les nouvelles versions n'apportent pas grand chose.

Le rejeu de partie est toujours fonctionnel AVEC le dictionnaire à la fin, ouf !, que la triche continue !

En ce qui concerne le changement du nombre de minutes de départ et l'interception du score de l'utilisateur j'ai été obligé de redresser quelques bits par-ci par-là : quelques 0x78 sont devenus 0xf0.
C'est quasi pareil pour trouver les clefs pour déchiffrer la communication.

Pour les tricheurs qui tombent sur plus tricheurs qu'eux, un peu de Voltaire s'impose : "Tricher au jeu sans gagner est d'un sot".