Rétro-ingénierie du poisson d'avril de Google



Peut-être que l'un d'entre vous a remarqué que le 1er avril, Google a ajouté le jeu interactif "Serpent" à l'application Google Maps pour Android et iOS.

Les spécialistes de Check Point sont généralement engagés dans la recherche des dernières cybermenaces, mais ils étaient très intéressés par ce jeu, cependant, ils étaient très contrariés à cause des pertes ... il y avait donc une pensée logique: pourquoi ne pas le casser!

Ainsi, nos employés les plus espiègles ont commencé à penser au développement inverse de l'application à l'aide du débogage à distance. En général, ils l'ont fait, et bientôt nous avons réussi à ne jamais perdre - et même ajouté une IA simple qui joue le jeu lui-même.





Dans cette note, nous décrivons en détail le hack.

Tout d'abord, nous avons ouvert l'application sur l'appareil virtuel via Genymotion et lancé le «Serpent», qui se trouve dans le menu dans le coin supérieur droit.

Il semble que le jeu soit affiché dans WebView, nous avons donc commencé le débogage à distance dans les outils de développement Chrome:



Ensuite, ils sont allés sur le site et ont trouvé le fichier v18.js sur l'onglet source, et il contenait plusieurs fonctions intéressantes.

Tout d'abord, la fonction fa () initie un champ 20 × 20:

this.height = this.width = 20; 

Notre objectif principal est de trouver et de changer une fonction qui détermine quand un serpent s'écrase sur un mur ou sur lui-même pour désactiver la possibilité de perdre. Les variables de largeur et de hauteur représentent les dimensions du terrain de jeu, nous avons donc cherché la largeur et la hauteur à l'intérieur du code source et trouvé la fonction F (a, b) :



Il semble que F (a, b) vérifie si les coordonnées du corps du serpent sont dans le champ. Une option consiste à supprimer complètement les conditions de la fonction afin qu'elle renvoie toujours la vérité, nous transférant ainsi au «régime de Dieu», où nous pouvons traverser les murs sans mourir.

Pour ce faire, nous avons appuyé sur le bouton Inspecter de la console distante et changé la fonction F (a, b) comme suit:



Maintenant, nous pouvons traverser les murs:


Fig. 1. Mode Dieu

Tout cela est très bien, mais nous devons encore jouer, ramasser des gens nous-mêmes pour gagner des points. Le prochain hack résoudra ce problème.

Il existe de nombreux appels à wa (a) dans la pile des appels. Si nous étudions cette fonction, nous verrons qu'elle est récursive et responsable de l'interrogation des frames d'animation. wa (a) appelle les fonctions xa (a, b) et ya (a) , qui affichent respectivement les pièces de jeu (train, personnes) et le terrain.

Considérons la fonction xa (a, b) :



Il prend deux arguments: «a» et «b». La première fait partie de la variable globale Q, qui contient des informations intéressantes sur notre jeu, y compris un tableau qui représente un terrain de jeu (Fig.2), où nous voyons un train (M), des personnes et des objets (K). La fonction calcule également le score et le stocke dans ci, qui est également équivalent à Qb


Fig. 2. Le tableau du terrain de jeu

Ce tableau correspond à ce champ:


Fig. 3. Le terrain de jeu

xa (a) fait également référence à la fonction sa (a) de la Fig. 4, qui génère des coordonnées aléatoires chaque fois qu'une nouvelle personne est créée. Si vous appelez la fonction plusieurs fois, vous pouvez créer autant de personnes que vous le souhaitez (Fig. 5).


Fig. 4. Fonction d'appel sa (a)

Comme ici:


Fig. 5. Appel de fonction avec création d'un nombre illimité de personnes sur la carte

Veuillez noter que même si vous appelez sa (a) plus d'une fois et prenez la personne, le score ne change pas. Lors de la sélection d'un passager, la fonction ka (a, b) de la Fig. 6. Ainsi, il doit être modifié de sorte qu'à chaque appel, elle ajoute 10 points et met à jour le score à l'écran.


Fig. 6. Fonction mise à jour

Les coordonnées de chaque partie du train sont indiquées dans Qbob, où le premier élément est la première remorque du train.


Fig. 7. Tableau de wagons

Cela sera nécessaire pour créer une IA simple. Commençons par sa logique:


Fig. 8. Logique de l'IA

Un serpent est une machine d'état (machine d'état):

  1. À X = 19, nous descendons jusqu'à ce que nous arrivions à Y = 19.
  2. À X = 19 et Y = 19, allez à gauche jusqu'à X = 0.
  3. Nous passons à la machine d'état pour les zigzags:
    1. En haut d' une cellule et à droite jusqu'à X = 18.
    2. En haut d' une cellule et à gauche jusqu'à X = 0.
    3. Retour à l'étape A.
  4. À Y = 0, allez à droite jusqu'à X = 19.
  5. Revenez à l'étape 1.

Le code complet est publié sur GitHub .

Vidéo:

Source: https://habr.com/ru/post/fr446920/


All Articles