Pokémon Go für Entwickler

Pokémon Go: Reverse Engineering am Beispiel des Mobile Games

Kypriani Sinaris

Das Ableiten eines bereits fertigen Softwareprodukts ist manchmal notwendig, manchmal spielt man aus Konkurrenzgründen Detektiv und manchmal macht es vielleicht einfach nur Spaß. Am Beispiel von Pokémon Go zeigen die Entwickler von Applidium, wie Reverse Engineering funktionieren kann.

Pokémon Go ist wohl der heißeste Anwärter zum Buzzword des Monats. Die App wird mehr genutzt als Twitter oder Facebook, die Server laufen mit den Pokémons um die Wette. Die Entwickler von Applidium haben nun in einem Blogpost anhand der Pokémon-Go-App gezeigt, wie man eine beliebige Android App via Reverse Engineering nachbauen kann.

Die Server-Kommunikation unter der Lupe

Um das Verhalten einer App nachzuvollziehen, kann man sich die Kommunikation mit dem Display, Sensoren oder dem Netzwerk ansehen. Gerade bei Pokémon Go ist die Server-Kommunikation eine wichtige Komponente, so die Applidium-Blogger. Sie schlagen vor, sich zunächst via Proxy zwischen die App und den Server zu schleichen. Da man so erst mal eher uninteressante Metadaten erhält, sollte man im Anschluss mit einer Man-in-the-middle-Attacke ran. So erscheint der Proxy für die App als Server und umgekehrt für den Server als App. Der Proxy wird zum Endpunkt für beide Kommunikationswege, ergo: Sie könne die Kommunikation jetzt entschlüsseln. Man beachte: Dies ist eine vereinfachte Darstellung. Im Blogpost gehen die Entwickler natürlich noch ins Detail. Für diesen Schritt empfehlen die Applidium-Blogger mitmproxy oder Charles.

In Ihrem Post gehen die Blogger außerdem detailliert auf die Rolle des APKs ein. Da das Interesse an Pokémon Go so gigantisch war, war das passende APK in der vergangenen Woche auf vielen Seiten zu finden. Natürlich ist der Download im Vergleich zum Play-Store-Download mit einigen Risiken verbunden, da dieses noch nicht die finale Google-Prüfung bestanden hat. Ein APK verhält sich wie eine zip-Archiv, es besteht aus Dateien und Ordnern, wie einem Ordner für native Bibliotheken oder einem für Metadaten.

Eine zentrale Rolle spielen die in APKs befindlichen und Android-typischen .dex Files. Diese sind nicht leicht zugänglich. In dem Blogpost raten die Entwickler daher zur Konvertierung in eine JAR-Datei, über die wiederum mit einem Decompiler Java-Code extrahiert werden kann. Aber Vorsicht: Diese Arbeit ist vergleichbar mit dem Google-Translator. Lässt man beispielsweise einen englischen Text ins Deutsche übersetzen und dann wieder ins Englische, so werden sich die englischen Texte unterscheiden – und das trifft dann hier auch auf den Code zu. Eine Eins-zu-Eins-Abbildung des originalen Codes ist dieser Weg also nicht.

Gilt das für jede App?

Jetzt fragen Sie sich als App-Entwickler vielleicht, ob man einem Nachbau ihrer App irgendwie entgegenwirken kann. Die Blogger von Applidium raten dazu, den Java-Code besser zu verschleiern bzw. zur Obfuskation – das geht beispielsweise mit Proguard. Ein weiterer Tipp ist das Minimieren des Codes. So könnte man beispielsweise kritische Teile der App in nativen Bibliotheken kompilieren. Damit nicht wie im gezeigten Beispiel via Proxy die Server-Kommunikation entschlüsselt werden kann, raten die Entwickler zum Key Pinning, das vor Man-in-the-Middle-Angriffen schützt.

Was das Reverse Engineering nicht kann

Will man ein bestehendes System nachvollziehen, dann sieht man natürlich nur das Ergebnis und nicht, welche Schritte und Entscheidungen auf dem Weg dorthin getroffen wurden. Das betrifft unter anderem das Testing oder die Continuous-Delivery-Pipeline. Welche Entscheidungen hier getroffen und welche Tests wann mit welchem Ergebnis durchgeführt wurden, ist dem fertigen Produkt nicht anzusehen. Daher kann man streng genommen nicht von einem Nachbau sprechen sondern eher von einem Nachempfinden oder Skizzieren einer Software, schließlich werden solche wichtigen Elemente des Entstehungsprozesses nicht abgebildet.

Nicht nur in der Software-Entwicklung, sondern vor allem auch im Maschinenbau wird Reverse Engineering eingesetzt. Software-Engineering-Anfänger erhalten hier eine Einführung in die Rolle des APK beim Reverse Engineering von Android Apps.

Das ganze Pokémon-Go-Projekt finden Sie auf GitHub.

Verwandte Themen:

Geschrieben von
Kypriani Sinaris
Kypriani Sinaris
Kypriani Sinaris studierte Kognitive Linguistik an der Goethe Universität Frankfurt am Main. Seit 2015 ist sie Redakteurin bei JAXenter und dem Java Magazin.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: