Reverse Engineering von April Fool von Google



Vielleicht hat einer von Ihnen bemerkt, dass Google am 1. April das interaktive Spiel "Snake" zur Google Maps-Anwendung für Android und iOS hinzugefügt hat.

Check Point-Spezialisten sind normalerweise damit beschäftigt, die neuesten Cyber-Bedrohungen zu erforschen, aber sie waren sehr an diesem Spiel interessiert, obwohl sie von den Verlusten sehr verärgert waren ... daher entstand ein logischer Gedanke: Warum nicht knacken?

Daher begannen unsere schelmischsten Mitarbeiter, über die umgekehrte Entwicklung der Anwendung mithilfe von Remote-Debugging nachzudenken. Im Allgemeinen haben sie es geschafft, und bald haben wir die Aufgabe, nie zu verlieren, erfolgreich abgeschlossen - und sogar eine einfache KI hinzugefügt, die das Spiel selbst spielt.





In diesem Hinweis beschreiben wir detailliert den Hack.

Zuerst haben wir die Anwendung auf dem virtuellen Gerät über Genymotion geöffnet und die „Schlange“ gestartet, die sich im Menü in der oberen rechten Ecke befindet.

Es sieht so aus, als würde das Spiel in WebView angezeigt, daher haben wir mit dem Remote-Debugging in den Chrome-Entwicklertools begonnen:



Dann gingen sie zur Site und fanden die Datei v18.js auf der Registerkarte Quelle, die mehrere interessante Funktionen enthielt.

Zunächst initiiert die Funktion fa () ein 20 × 20-Feld:

this.height = this.width = 20; 

Unser Hauptziel ist es, eine Funktion zu finden und zu ändern, die bestimmt, wann eine Schlange gegen eine Wand oder gegen sich selbst stößt, um die Möglichkeit des Verlusts zu deaktivieren. Die Variablen width und height stellen die Abmessungen des Spielfelds dar. Daher haben wir im Quellcode nach Breite und Höhe gesucht und die Funktion F (a, b) gefunden :



Es sieht so aus, als würde F (a, b) prüfen, ob die Koordinaten des Körpers der Schlange innerhalb des Feldes liegen. Eine Möglichkeit besteht darin, die Bedingungen in der Funktion vollständig zu entfernen, damit sie immer die Wahrheit zurückgibt, und uns so zum „Regime Gottes“ zu überführen, wo wir durch Wände gehen können, ohne zu sterben.

Dazu haben wir die Inspect- Taste in der Remote-Konsole gedrückt und die Funktion F (a, b) wie folgt geändert:



Jetzt können wir durch die Wände gehen:


Abb. 1. Gott-Modus

Das ist alles sehr gut, aber wir müssen immer noch spielen und die Leute selbst einsammeln, um Punkte zu verdienen. Der nächste Hack wird dieses Problem lösen.

Es gibt viele Aufrufe von wa (a) im Aufrufstapel. Wenn wir diese Funktion untersuchen, werden wir feststellen, dass sie rekursiv ist und für die Abfrage von Animationsframes verantwortlich ist. wa (a) ruft die Funktionen xa (a, b) und ya (a) auf , die Spielsteine ​​(Zug, Personen) bzw. Feld anzeigen.

Betrachten Sie die Funktion xa (a, b) :



Es werden zwei Argumente benötigt: 'a' und 'b'. Die erste ist Teil der globalen Variablen Q, die interessante Informationen über unser Spiel enthält, einschließlich eines Arrays, das ein Spielfeld darstellt (Abb. 2), in dem wir einen Zug (M), Personen und Objekte (K) sehen. Die Funktion berechnet auch die Punktzahl und speichert sie in ci, was ebenfalls Qb entspricht


Abb. 2. Das Array des Spielfelds

Dieses Array entspricht diesem Feld:


Abb. 3. Das Spielfeld

xa (a) bezieht sich auch auf die Funktion sa (a) in Fig. 4, die jedes Mal, wenn eine neue Person erstellt wird, zufällige Koordinaten erzeugt. Wenn Sie die Funktion mehrmals aufrufen, können Sie so viele Personen erstellen, wie Sie möchten (Abb. 5).


Abb. 4. Rufen Sie die Funktion sa (a) auf

Wie hier:


Abb. 5. Funktionsaufruf mit der Erstellung einer beliebigen Anzahl von Personen auf der Karte

Bitte beachten Sie, dass sich die Punktzahl nicht ändert, auch wenn Sie sa (a) mehrmals anrufen und die Person nehmen. Bei der Auswahl eines Passagiers wird die Funktion ka (a, b) in Abb. 6. Daher muss es geändert werden, damit sie bei jedem Anruf 10 Punkte hinzufügt und die Punktzahl auf dem Bildschirm aktualisiert.


Abb. 6. Aktualisierte Funktion

Die Koordinaten jedes Teils des Zuges sind in Qbob angegeben, wobei das erste Element der erste Anhänger im Zug ist.


Abb. 7. Wagenreihe

Dies wird benötigt, um eine einfache KI zu erstellen. Beginnen wir mit seiner Logik:


Abb. 8. KI-Logik

Eine Schlange ist eine Zustandsmaschine (Zustandsmaschine):

  1. Bei X = 19 gehen wir runter bis wir zu Y = 19 kommen.
  2. Gehen Sie bei X = 19 und Y = 19 nach links zu X = 0.
  3. Wir übergeben die Zustandsmaschine für Zickzacke:
    1. Eine Zelle nach oben und rechts nach X = 18.
    2. Eine Zelle hoch und links auf X = 0.
    3. Zurück zu Schritt A.
  4. Gehen Sie bei Y = 0 nach rechts zu X = 19.
  5. Gehen Sie zurück zu Schritt 1.

Der vollständige Code wird auf GitHub veröffentlicht .

Video:

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


All Articles