Reverse Engineering von einer APK-Datei zu einem Projekt


244

Ich habe mein Projekt versehentlich aus Eclipse gelöscht und alles, was ich übrig habe, ist die APK- Datei, die ich auf mein Telefon übertragen habe. Gibt es eine Möglichkeit, den Vorgang des Exportierens einer Anwendung in die APK-Datei umzukehren, damit ich mein Projekt zurückerhalten kann?



2
Sie wissen, dass Eclipse einen eigenen Versionsverlauf hat?
Eis


4
Wenn Sie etwas schreiben, das Ihnen wichtig ist, sollten Sie ein VCS verwenden. Bitbucket verfügt über kostenlose private Repositories.
lxknvlk

Antworten:


287

Es gibt zwei nützliche Tools, die Java-Code (grob, aber gut genug) aus einer unbekannten APK-Datei generieren.

  1. Laden Sie das Tool dex2jar von dex2jar herunter .
  2. Verwenden Sie das Tool, um die APK-Datei in JAR zu konvertieren :

    $ d2j-dex2jar.bat demo.apk
    dex2jar demo.apk -> ./demo-dex2jar.jar
  3. Verwenden Sie nach dem Generieren der JAR-Datei die JD-GUI , um die JAR-Datei zu öffnen. Sie sehen die Java-Dateien.

Die Ausgabe ist ähnlich wie:

JD GUI


6
Wie bekomme ich die Ressourcendateien
Srini

26
cmd ist veraltet, verwenden Sie d2j-dex2jarstattdessen (v0.0.9.15).
Fredrick Gauss

1
@sri benenne einfach die apk-Datei um, um sie zu komprimieren und zu extrahieren. Du hast die Ressourcendateien im resOrdner
Hoang Huynh

8
@ HoangHuynh Sie haben einen resOrdner mit unlesbaren XML-Dateien
S.Thiongane

6
In Macwenn Sie nicht verwenden dex2jar kann: permission denieddann tun , um diese $sudo chmod +x d2j-dex2jar.sh
Min2

81

Zuallererst empfehle ich thisVideo, damit dies alle Ihre Zweifel beseitigt

Wenn nicht, gehen Sie es bitte durch

Procedure for decoding .apk files, step-by-step method:

Step 1:

Erstellen Sie einen neuen Ordner und legen Sie die APK-Datei darin ab (die Sie dekodieren möchten). Benennen Sie nun die Erweiterung dieser .apkDatei in um .zip(z. B.: Von filename.apk in filename.zip umbenennen) und speichern Sie sie.

Bei Problemen bei der Konvertierung in .zip wird bitte verwiesen link

Nachdem Sie jetzt .zip erhalten haben, erhalten Sie classes.dex-Dateien usw. In diesem Stadium können Sie zeichnbare, aber keine XML- und Java-Dateien sehen. Fahren Sie also fort. Wenn die Erweiterungen nicht angezeigt werden, überprüfen Sie die Konfiguration

Step 2:

Extrahieren Sie nun diese zip apk-Datei im selben Ordner. Laden Sie jetzt dex2jar von diesem herunterlink

und extrahieren Sie es in den gleichen Ordner. Öffnen Sie nun die Eingabeaufforderung und wechseln Sie in diesen Ordner.

Dann schreiben Sie dex2jar classes.dexund drücken Sie die Eingabetaste. Jetzt erhalten Sie die classes.dex.dex2jarDatei im selben Ordner.

Laden Sie dann den Java-Dekompiler herunter

Und jetzt doppelklicken Sie auf jd-gui und klicken Sie auf Datei öffnen. Öffnen Sie dann die classes.dex.dex2jarDatei aus diesem Ordner. Jetzt erhalten Sie Klassendateien und speichern alle diese Klassendateien (klicken Sie auf Datei und dann auf "Alle Quellen speichern" in jd-gui) nach src-Namen. Extrahieren Sie diese Zip-Datei (classes_dex2jar.src.zip)und Sie erhalten alle Java-Dateien der Anwendung.

Zu diesem Zeitpunkt erhalten Sie eine Java-Quelle, aber die XML-Dateien sind noch nicht lesbar. Fahren Sie also fort.

Step 3:

Öffnen Sie nun einen weiteren neuen Ordner und legen Sie diese Dateien ab

  1. Legen Sie die APK-Datei ab, die Sie dekodieren möchten

  2. Laden Sie Apktool für windows v1.xAndApktool

Installieren Sie das Fenster mit Google und legen Sie es in demselben Ordner ab

  1. lade die Datei framework-res.apk mit Google herunter und lege sie in denselben Ordner (Nicht alle apk-Dateien benötigen die Datei framework-res.apk).

  2. Öffnen Sie ein Befehlsfenster

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

Der obige Befehl sollte ergeben Framework installed ....

  1. apktool d "appName" .apk ("appName" bezeichnet die Anwendung, die Sie dekodieren möchten) Jetzt erhalten Sie einen Dateiordner in diesem Ordner und können jetzt auch problemlos XML-Dateien lesen.

Step 4: Schließlich haben wir den res/Java-Code des Projekts erhalten, der unser Startziel ist.

P.S. Wenn Sie den Ordner res nicht mit den oben genannten Schritten abrufen können, installieren Sie bitte new apktool

  • Ist Java 1.7 installiert? Installieren Sie Apktool 2.x.
  • Ist Java 1.6 oder höher installiert? Installieren Sie Apktool 1.x.

Enjoy and happy coding


wirklich nützlich. Nur etwas, das Sie nicht erwähnt haben: Das apktool.jarist nicht im selben Paket, ich habe es aus einem früheren Paket erhalten und es im selben Verzeichnis wie eingefügt apktool.
S.Thiongane

1
Ich habe den Code rückgängig gemacht, aber warum ist der Name der Klasse, Variable sind wie aa, bc usw. und auch viele Fehler
user2934930

1
nicht in der Lage, das in
cmd

Wie könnte man das anders machen?
Meghal Agrawal

2
@ user2934930 Dies bedeutet, dass der Code mit ProGuard verschleiert wurde.
Cascal

58

Keine Software & keine zu vielen Schritte ..

Laden Sie einfach Ihre APK hoch und holen Sie sich alle Ressourcen von dieser Seite.

https://www.apkdecompilers.com/

Diese Website dekompiliert den in APK-Dateien eingebetteten Code und extrahiert alle anderen Assets in der Datei.

Hinweis: Ich dekompiliere meine APK-Datei und erhalte Code innerhalb einer Minute von dieser Website

Update 1 :

Ich habe eine andere Online-Dekompiler-Site gefunden.

http://www.javadecompilers.com/apk/ - Funktioniert nicht ständig und fragt nach Popup-Blockierung

Update 2:

Ich fand apk Dekompiler App im Play Store,

https://play.google.com/store/apps/details?id=com.njlabs.showjava

Wir können die apk-Dateien in unserem Android-Handy dekompilieren. Außerdem können wir die Java- und XML-Dateien in dieser Anwendung anzeigen

Update 3:

Wir können eine andere Option verwenden, um die APK- Funktion aus der Android Studio 2.2-Version zu analysieren

Erstellen -> APK analysieren -> Wählen Sie Ihre APK aus -> Sie erhalten Ergebnisse

Geben Sie hier die Bildbeschreibung ein


3
In der letzten Methode können wir die Java-Klasse nicht öffnen, sondern zeigen nur Methodennamen an
Choletski

@Choletski probierst du das ShowJava aus? Wenn nicht, versuchen Sie es und aktualisieren Sie mich
Ranjith Kumar

@RanjithKumar ist auf 50 MB APK begrenzt. Ich habe eine 85 MB APK zu dekompilieren.
Ravi Sharma


1
Wie führe ich dieses dekompilierte Projekt in Android Studio aus? kann jemand bitte darüber schreiben.
Mayur Kukadiya


4

Nicht wirklich. Es gibt eine Reihe von Dex-Disassembler / Decompiler-Suiten wie smali oder dex2jar , die eine semi-humanreadable Ausgabe erzeugen (im Fall von dex2jar können Sie Java-Code mithilfe von JD-GUI erhalten, aber der Prozess ist es nicht perfekt und es ist sehr unwahrscheinlich, dass Sie Ihren Quellcode zu 100% neu erstellen können. Möglicherweise erhalten Sie jedoch einen Ort, an dem Sie mit der Neuerstellung Ihres Quellbaums beginnen können.


@MAC: Er braucht Quelle nicht die APK-Datei !!
Shashank Kadne

2
@ ShashankKadne kann sein, dass ich meine Worte nicht zurücknehme
MAC

3

Ja, Sie können Ihr Projekt zurückerhalten. Benennen Sie die yourproject.apkDatei einfach in um yourproject.zip, und Sie erhalten alle Dateien in dieser ZIP-Datei. Wir ändern die Dateierweiterung von .apk in .zip. Extrahieren Sie aus dieser ZIP-Datei die classes.dexDatei und dekompilieren Sie sie folgendermaßen.

Zunächst benötigen Sie ein Tool, um alle (kompilierten) Klassen im DEX in eine JAR zu extrahieren. Es gibt eine namens dex2jar , die von einem chinesischen Studenten hergestellt wird.

Anschließend können Sie die Klassen in der JAR mithilfe der JD-GUI in Quellcode dekompilieren. Der resultierende Quellcode sollte gut lesbar sein, da dex2jar einige Optimierungen anwendet.


3

Für die Android-Plattform können Sie ShowJava ausprobieren , das im Play Store erhältlich ist.

Sie können den generierten Code über die App-Oberfläche abrufen. Die generierten Java-Dateien und die ShowJavaOrdnerstruktur /sdcardwerden neben der .jaraus der Konvertierung resultierenden Datei im Ordner gespeichert .

Die App ist kostenlos mit einem Werbebanner am unteren Rand der Hauptansicht, es gibt jedoch eine In-App-Kaufoption (3,99 $), um sie zu entfernen. Beim In-App-Kauf werden neben dem Entfernen des Werbebanners keine weiteren Funktionen hinzugefügt.

Offenlegung: Ich bin weder der Entwickler der App noch in irgendeiner Weise mit ihm verbunden.


Ich benutze es normalerweise für ... Schöne App
Rahul Kushwaha

2

Befolgen Sie dazu die folgenden Schritte oder verwenden Sie einfach apkToJava gem für diesen Prozess. Es kümmert sich sogar um die Installation der erforderlichen Tools, damit es funktioniert.

  • konvertiere apk Datei in zip
  • entpacke die Datei
  • extrahiere classes.dex daraus
  • Verwenden Sie dex to jar, um classes.dex in eine jar-Datei zu konvertieren
  • Verwenden Sie jadx gui, um die JAR-Datei als Java-Quellcode zu öffnen

2

Wenn Sie nach einer professionellen Alternative suchen, schauen Sie sich JEB Decompiler von PNF Software an.

Es gibt eine Demoversion, mit der Sie den größten Teil des Codes dekompilieren können.


2

Im Folgenden finden Sie einige Tools, mit denen Sie das Reverse Engineering von einer APK-Datei zum Quellcode durchführen können:

  1. Dex2jar
  2. Java-Dekompiler
  3. Apktool
  4. Apk Analyzer

2

In Android Studio 3.5 ist es so einfach, dass Sie es in einer Minute erreichen können. Das Folgende ist ein schrittweiser Prozess.

1: Android Studio öffnen, Fenstertaste drücken -> Android Studio eingeben -> auf das Symbol klicken, um den Android Studio-Begrüßungsbildschirm zu öffnen, der so aussieht.

Geben Sie hier die Bildbeschreibung ein

2: Hier sehen Sie eine Option "Profil oder APK debuggen". Klicken Sie darauf und wählen Sie Ihre APK- Datei aus und drücken Sie OK.

Geben Sie hier die Bildbeschreibung ein

3: Es öffnet alle Ihre Manifest- und Java-Klassen in einer Minute, abhängig von der Größe der apk.

Geben Sie hier die Bildbeschreibung ein

Das ist es.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.