Verlauf
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.
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.
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.
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.
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.