Jan
5

APK – Reverse Engineering

By Fabi  //  Android, PC, Programmieren  //  No Comments

Google verpackt Anwendungen fuer Android ins APK-Format. Manchmal moechte man gerne in eine APK-Datei hineinschauen. Gerade, wenn man selbst programmiert interessiert einen vielleicht wie ein anderer Autor bestimmte Dinge programmiert hat. Vielleicht will man aber in Sicherheitsfragen anderen Programmierern auch nur auf die Finger schauen.
Es gibt also zahlreiche Gruende warum man sogenanntes “Reverse Engineering” betreiben will.

Fuer APK-Dateien gibt es dabei unterschiedliche Ansaetze. Ein Ansatz, der sehr viel ueber den Quellcode verraet, sich aber nicht gut zum Manipulieren von APKs eignet will ich im Folgenden kurz beschreiben.

Zunaechst liegt uns also eine APK-Datei vor. Bei dieser Datei handelt es sich um ein zip-Archiv, welches zusaetzlich noch signiert worden ist. Diese Signatur weist den Autor der APK-Datei aus und ist sicherheitsrelevant fuer Android. Will man eine APK-Datei manipulieren, dann kann man dies zwar tun, kann die neue Datei aber nicht mit der gleichen Signatur versehen – es sei denn man verfuegt ueber den privaten Schluessel des Autors. Dies ist in der Regel nicht der Fall und das ist auch gut so!

Die Signatur braucht uns aber nicht weiter interessieren, wenn wir uns lediglich den Quellcode anschauen und keine manipulierte APK-Datei erstellen wollen.

Der Quelltext wird beim Erstellen einer APK-Datei kompiliert, so dass wir diesen Schritt zunaechst wieder rueckgaengig machen muessen. Mittels dem Programm dex2jar ist dies moeglich.
Nehmen wir an unsere APK-Datei heisst “Test.apk”, dann koennen rufen wir unter Linux dex2jar wie folgt auf: sh /path/to/dex2jar.sh /path/to/Test.apk
Unter Windows und Mac OSX sind die Aufrufe aehnlich und koennen der Webseite des Programmierers entnommen werden.

Der Befehl erzeugt eine jar-Datei, die dann lautet “Test.apk.dex2jar.jar”. In dieser Datei finden sich nun die class-Dateien, welche jedoch zunaechst ebenfalls nicht zu lesen sind. Um diese Dateien lesen zu koennen brauchen wir noch einen Java Decompiler, wie beispielsweise JD. Mittels diesem koennen wir uns den Quellcode ansehen.

Auf der oben verlinkten Seite gibt es beispielsweise JD-Gui, welches gleich eine komplette Oberflaeche mitbringt. Damit koennen wir nun das jar-Archiv einlesen und bekommen sogleich die Anwendung in leserlichem Code. Abstriche muessen wir bei den Kommentaren und einigen Variablennamen machen, welche beim Kompilieren automatisch verloren gehen. Alles in allem sollte der Code dennoch recht leserlich sein, so dass wir diesen benutzen koennen um die APK-Dateien zu analysieren.

Beispielseweise koennte eine APK-Datei, die damit wieder leserlich gemacht wurde dann im Programm JD-Gui so aussehen:
jd-gui-apk-reverse-engineering

Damit ist es nun moeglich die Struktur des Programms zu untersuchen und Algorithmen nachzuvollziehen.

Vielleicht noch ein Hinweis an dieser Stelle: Diese Anleitung dient nicht dazu irgendwelchen Schabernack zu treiben! Es geht hier einzig um die Moeglichkeit APKs auf deren Sicherheit zu untersuchen und ggfs. schaedliche Anwendungen ausfindig zu machen.

Analytics

Gemaess den Richtlinien des deutschen Datenschutzes weisen wir darauf hin, dass dieser Blog persoenliche Daten des Besuchers zu Analysezwecken sammelt. Dem kann hier widersprochen werden.

Werbung