Quellcode aus einer .apk-Datei abrufen? [geschlossen]

Gibt es eine Möglichkeit, mit einer .apk-Datei an den Quellcode zu kommen?

Haben Sie vorher überprüft, ob das Paket Open Source ist?
Eine .apk ist einfach eine .zip-Datei. Aber leider wird wahrscheinlich jede App, die für die 'Veröffentlichung' erstellt wird, durch ProGuard geschützt .
@MatthewRead Der Op fragt, ob er den Code von einer API bekommen könnte, und ich antwortete, wie dieses Phänomen heißt und wie man zumindest verhindern kann, dass eine ähnliche App erstellt wird. Er sagt nicht, wie er verhindern kann, dass er den Code erhält. Also ja, es beantwortet die Frage.

Antworten (3)

Auch wenn ProGuard verwendet wurde, können Sie immer noch einige interessante Einblicke erhalten. Hier ist eine StackOverflow-Frage mit einer ausführlichen Erklärung: Android: Quellcode aus einer APK-Datei abrufen . YouTube-Video mit ausführlicher Anleitung . Und ein Blog-Eintrag dazu: So rufen Sie den Quellcode einer Android-APK-Datei ab .

Wenn Sie Glück haben und Ihre .apkDatei nicht durch Proguard oder Analog geschützt wurde, können Sie das APK-Tool verwenden . Es ist ein Tool zum Reverse Engineering geschlossener, binärer Android-Apps von Drittanbietern.

Apktool generiert nur Smali-Code, keinen Java-Code - das ist ein großer Unterschied.

Aus einem der Community-Wikis von Parnkul Garg in SO :


Vorgehensweise zum Entschlüsseln von .apk-Dateien, Schritt-für-Schritt-Methode:

Schritt 1:

  1. Erstellen Sie einen neuen Ordner und kopieren Sie die .apk-Datei, die Sie dekodieren möchten.

  2. Benennen Sie nun die Erweiterung dieser .apk-Datei in .zip um (z. B. von Dateiname.apk in Dateiname.zip umbenennen) und speichern Sie sie. Jetzt können Sie auf die Classes.dex-Dateien usw. zugreifen. In diesem Stadium können Sie Drawables sehen, aber keine XML- und Java-Dateien, also fahren Sie fort.

Schritt 2:

  1. Extrahieren Sie nun diese .zip-Datei in denselben Ordner (oder NEUEN ORDNER).

  2. Laden Sie dex2jar herunter und extrahieren Sie es in denselben Ordner (oder NEUEN ORDNER).

  3. Verschieben Sie die Datei "classes.dex" in den Ordner "dex2jar".

  4. Öffnen Sie nun die Eingabeaufforderung und ändern Sie das Verzeichnis in diesen Ordner (oder NEUEN ORDNER). Dann schreiben d2j-dex2jar classes.dexund Enter drücken. Sie haben jetzt die Datei "classes.dex.dex2jar" im selben Ordner.

  5. Laden Sie den Java-Decompiler herunter , doppelklicken Sie auf jd-gui, klicken Sie auf Datei öffnen und öffnen Sie die Dateiclasses.dex.dex2jar aus diesem Ordner: Jetzt erhalten Sie Klassendateien.

  6. Speichern Sie alle diese Klassendateien (klicken Sie in jd-gui auf Datei -> Alle Quellen speichern) nach Quellennamen. In diesem Stadium erhalten Sie die Java-Quelle, aber die .xml-Dateien sind immer noch nicht lesbar, also fahren Sie fort.

Schritt 3:

Öffnen Sie nun einen weiteren neuen Ordner

  1. Legen Sie die .apk-Datei ein, die Sie decodieren möchten

  2. Laden Sie die neueste Version von apktool UND das apktool-Installationsfenster herunter (beide können über denselben Link heruntergeladen werden) und legen Sie sie im selben Ordner ab

  3. Laden Sie framework-res.apk herunter und legen Sie es in denselben Ordner (Nicht alle APK-Dateien benötigen diese Datei, aber es schadet nicht)

  4. Öffnen Sie ein Befehlsfenster

  5. Navigieren Sie zum Stammverzeichnis von APKtool und geben Sie den folgenden Befehl ein:apktool if framework-res.apk

  6. apktool d myApp.apk(wobei myApp.apk den Dateinamen angibt, den Sie entschlüsseln möchten)

Jetzt erhalten Sie einen Dateiordner in diesem Ordner und können die XML-Dateien der APK problemlos lesen.

Schritt 4:

Es ist kein Schritt, nur den Inhalt beider Ordner (in diesem Fall beide neuen Ordner) in den einzigen zu kopieren

und genießen Sie den Quellcode ...