Die Überarbeitung von der existierenden APK der Android-App

Die Expertise von SCAND in Code-Wiederherstellung und Manipulationen in Reverse Engineering mit Android APK.

Herausforderung

Die Aufgabe bestand darin, die Arbeit der Android-Anwendung des Kunden zu verbessern und die zusätzlichen Funktionen hinzuzufügen.

  • Die Verbesserung der Anwendung.
  • Die Arbeit an den neu entstandenen Plattformen.
  • Die Beseitigung von Fehlern.

Herangehen

Die Schwierigkeit entstand, weil der Quellcode und die Server-Dokumentation versehentlich verloren gegangen sind. Der einzige verfügbare Teil des Codes war der ursprüngliche Java-Code, der vor vielen Jahren geschrieben wurde und die erste Hälfte der App dargestellt hat. Natürlich könnte der einfachste Weg sein, den Code von Grund auf neu zu schreiben, aber diese Option kam nicht in Frage. Dabei wollte der Kunde das Geld sparen. Also haben wir entschieden, eine APK Reverse-Engineering-Lösung zu entwickeln.

Beschreibung

Das mobile Entwicklungsteam von SCAND stand vor der Herausforderung, kreativ zu sein und verschiedene Kombinationen von Tools und Herangehen zu verwenden, um den vorhandenen Teil des Codes zu untersuchen und zu versuchen, APK in den Quellcode umzukehren, die App und die Serverkommunikation wieder zu verbinden und sie auf ein qualitativ neues und einwandfreies Niveau zu bringen.

Verlauf

Schritt 1

Der erste Schritt besteht darin, die APK-Datei der Anwendung herunterzuladen. Das Paket der Android-Anwendung sieht wie eine gewöhnliche ZIP-Datei aus und es ist ziemlich einfach, es zu überprüfen und zu sehen, was drin ist. Zum Beispiel, Linux unzip könnte verwendet werden. Nach dem Entpacken der APK-Datei wird folgende Struktur sichtbar:

  • META-INF/ enthält das digitale Zertifikat der Anwendung. Es enthält die Informationen über seinen Ersteller und die Prüfsumme der Paketdateien.
  • res/ stellt verschiedene Ressourcen, die von der App verwendet werden, z. B. Bilder, dar.
  • AndroidManifest.xml enthält die Beschreibung der Anwendung. Man kann dort die Liste der angeforderten Berechtigungen und die Zielversion von Android finden.
  • classes.dex ist ein kompilierter Byte-Code der Anwendung für die virtuelle Maschine Dalvik.
  • resource.arsc sind Ressourcen anderer Art, meistens sind das die Code-Strings.
  • Assets ist eine Entsprechung der Ressourcen-Repository. Um Zugriff zu erhalten, muss man die ID angeben.
  • lib sind native Bibliotheken, die mit NDK geschrieben wurden.
  • Es gibt mehrere Möglichkeiten, die APK-Datei der Anwendung aus ihrem bestehenden Formular in Play Market auf Ihren PC zu übertragen:
  • Man kann die Erweiterung APK Downloader für Chrome verwenden;
  • Die Anwendung Real APK Leecher oder ihre Entsprechungen verwenden;
  • Verschiedene Share-Seiten verwenden;
  • Online-Dienste nutzen
  • Den Zugriff auf Root für das Gerät zu erhalten und mit Hilfe der Android-Anwendung lädt Root Explorer  die APK aus dem Ordner auf Ihrem Gerät: data/app.  herunter.

Das Team handelte auf dem Gerät mit den Root-Rechten, deswegen war die zuletzt erwähnte Option definitiv unsere Auswahl.

Schritt 2

Nachdem die APK-Datei auf den PC übertragen wurde, benötigt sie Android Reverse Engineering, um ein leicht steuerbares Format zu erhalten. Es war nicht erforderlich, mit dem Smali-Code (den Sie mit Hilfe von apktool erhalten) zu arbeiten, um die kleinen Verbesserungen vorzunehmen und die Anwendung wieder in das APK-Format zu packen. Aus diesem Grund haben wir Dex-Code  Java-Code geändert. Es war für uns klar, dass wir nicht den ursprünglichen Java-Code bekommen werden und es unmöglich sein wird, ihn zurück zu kompilieren, aber das war auch nicht eines der Ziele. Das Java-Format hat den Code lesbar und die Logik der Funktionsweise der Anwendung leicht nachvollziehbar gemacht.

Es waren zwei Haupt-Tools von Reverse-Engineering, die wir verwendet haben:

  • Dex2jar wandelt den Bytecode-Dalvik in den Bytecode-JVM um. Der Letzte dient als eine Grundlage, um den nötigen Java-Code zu erhalten;
  • Jd-gui ist ein Decompiler, der hilft, aus JVM-Byte-Code einen lesbaren Java-Code zu bekommen. Alternativ kann man Jad verwenden, auch wenn es schon ziemlich alt ist. In einigen Fällen kann es einen lesbareren Code als Jd-gui generieren.

Schritt 3

Nachdem der Java-Code empfangen wird, liest und analysiert ihn das Team sorgfältig. Dann wird er verlegt und sein größter Teil wird modifiziert. Die wiederhergestellten Ressourcen und der Code der Anwendung werden in ein neues Projekt übertragen, das in Android Studio erstellt wurde.

Schritt 4

Der nächste Schritt bestand darin, herauszufinden, wie der Code mit dem Server kommuniziert, unter der Bedingung, dass keine Server-Dokumentation mehr vorhanden ist. Es waren zwei Proxy-Server installiert: Fiddler ging zu Windows und Charles-Testversion ging zu MacOS. Diese Tools funktionieren auf unterschiedliche Weise, sodass es möglich ist, alle von ihnen erhaltenen Informationen zu sammeln und besser zu analysieren. Nach der Verwendung des Reverse-Engineering-APKs wurde es schließlich möglich, die Logik der Client-Server-Kommunikation der Anwendung zu verstehen, und die Routen wurden sorgfältig aufgeschrieben, um die Back-End-API zu dokumentieren.

Schritt 5

Den größten Teil der Zeit haben wir dafür verwendet, die Fehler zu beheben, den Code zu bereinigen, den Code wiederherzustellen und neue Codezeilen, die schließlich der gesamten Anwendung neue Funktionen angeben, hinzuzufügen. Das Ziel war es, die Quell-APK in eine funktionierende und zuverlässige APK zu verwandeln.

Wir haben es geschafft, den ursprünglichen Quellcode innerhalb von 14 Arbeitstagen wiederherzustellen. Es dauerte noch einige Wochen, bis neue Funktionen implementiert wurden und die Anwendung gemäß den Wünschen des Kunden verbessert wurde.

Time Spent on Reverse Engineering part, %% (14 full days)

Ergebnis

Die Expertise von SCAND in Code-Wiederherstellung und Manipulationen in Reverse Engineering mit Android APK.

Schließlich konnte das mobile Entwicklungsteam von SCAND innerhalb von 14 Arbeitstagen eine Reihe von komplexen Manipulationen durchführen: Das dekompilierte Android-APK hat den ursprünglichen Code erhalten und ihn, sowie die Kommunikation mit dem Server-Teil der Anwendung, wieder analysiert.

Schließlich wurde es möglich, den Code der Anwendung zu aktualisieren und neue Funktionen zum Leben zu erwecken. Es war eine ziemlich aufregende Herausforderung für uns, das Brainstorming durchzugehen und die erforderlichen Tools und Maßnahmen zu ergreifen, um die Arbeit zu erleichtern.

Benötigen Sie Unterstützung bei einem ähnlichen Projekt?