Dekompilieren Sie eine APK, ändern Sie sie und kompilieren Sie sie erneut

74

Ich muss eine vorhandene APK ändern, die Quellen ändern und sie dann neu kompilieren.

  • Ich kann es mit dex2jar oder apktool dekompilieren, es funktioniert großartig
  • Aus der JAR-Datei kann ich die Java-Quellen erhalten (mit jd-gui)
  • Dann kann ich die Java-Dateien ändern

Aber jetzt möchte ich wissen, wie man die Java-Dateien neu kompiliert und wieder in eine JAR-Datei legt! (Der JAR-Teil sollte einfach sein, das Hauptproblem scheint zu sein, wie man die Java-Dateien für Android neu kompiliert)

Ich weiß, dass eine andere Lösung darin besteht, apktool zu verwenden und dann die smali-Dateien zu ändern, aber es scheint wirklich kompliziert zu sein, wenn wir viel Code hinzufügen wollen!

Meine Anwendung ist eine grundlegende HelloWorld ohne Verschleierung.

darkheir
quelle
7
Sicherlich würden Sie die Java-Dateien mit dem Android SDK genauso erstellen wie jeder Android-Entwickler.
Chris Jester-Young

Antworten:

44

Dank Chris Jester-Young habe ich es geschafft, dass es funktioniert!

Ich denke, die Art und Weise, wie ich es geschafft habe, wird nur bei wirklich einfachen Projekten funktionieren:

  • Mit Dex2jar habe ich das Glas erhalten.
  • Mit jd-gui konvertiere ich mein Jar zurück in Java-Dateien.
  • Mit apktool habe ich das Android Manifest und die Ressourcendateien bekommen.

  • In Eclipse erstelle ich ein neues Projekt mit den gleichen Einstellungen wie das alte (überprüfe alle Informationen in der Manifestdatei).

  • Wenn das Projekt erstellt wird, ersetze ich alle Ressourcen und das Manifest durch diejenigen, die ich mit apktool erhalten habe
  • Ich füge die Java-Dateien, die ich aus dem Jar extrahiert habe, in den src-Ordner ein (unter Berücksichtigung der Pakete).
  • Ich ändere diese Dateien mit dem, was ich brauche
  • Alles kompiliert!

/! \ stelle sicher, dass du die alte apk vom Gerät entfernt hast. Es wird ein Fehler ausgegeben, der besagt, dass die apk-Signatur nicht mit der alten identisch ist!

darkheir
quelle
6
Dies funktioniert bei komplexen Anwendungen nicht (Dex2jar ist nicht perfekt - auch einige Entwickler schaffen es, ihre Anwendungen mithilfe von Proguard- oder ähnlichen Techniken zu sperren). Aber für einige könnte es funktionieren
Ahmad
Ja, Sie haben Recht, deshalb sagte ich: "Ich denke, die Art und Weise, wie ich es geschafft habe, wird nur bei wirklich einfachen Projekten
funktionieren
3
Ich habe es geschafft, diese Methode für eine wirklich große App zu verwenden. Ich denke, sie funktioniert auch perfekt für einige komplexe Anwendungen
Muhammed Refaat
@MuhammedRefaat Hast du es auf deiner riesigen App zum Laufen gebracht?
Loveisbug
@loveisbug Ja, ich habe es getan, die App war nicht meine, und auf diese Weise gelang es, die apk zu dekompilieren, aber der Code war fehlerhaft, da die App mit einer Hybridtechnik codiert wurde, die keine native Codierung ist. Wenn ich sie also in native konvertiere, erhalte ich nicht das perfekte Ergebnis aber zumindest konnte ich Klassen und Methoden sehen, die ich sehen wollte
Muhammed Refaat
34

Ich weiß, dass diese Frage immer noch beantwortet wird. Ich möchte eine Information weitergeben, wie man Quellcode von apk ohne Dexjar erhält.

Es gibt einen Online-Dekompiler für Android-Apks

  1. Laden Sie apk vom lokalen Computer hoch
  2. Warten Sie einige Momente
  3. Laden Sie den Quellcode im Zip-Format herunter

Ich weiß nicht, wie zuverlässig das ist.

@darkheir Antwort ist die manuelle Methode zum Dekompilieren von apk. Es hilft uns, verschiedene Phasen in der Apk-Erstellung zu verstehen.

Wenn Sie den Quellcode haben, befolgen Sie den in der akzeptierten Antwort genannten Schritt

Ein weiterer Online-Apk-De-Compiler @Andrew Rukin : http://www.javadecompilers.com/apk

Immer noch wert. Hut ab vor den Schöpfern.

Edwin
quelle
28
But now I would like to know how to recompile the java files and put them back into a jar file!War die Kernfrage richtig? Das beantwortet es nicht.
C4d
10
  1. Laden Sie zuerst das Tool dex2jar über den folgenden Link herunter: http://code.google.com/p/dex2jar/downloads/list

  2. Extrahieren Sie die Datei, die der dex2jarOrdner erstellt

  3. Nun wählen Sie Ihre APK - Datei und ihre Erweiterung APK nach Erweiterung .zip ändern zu ändern scheint es zip zu sein Datei dann diese Zip - Datei extrahiert gefunden Sie classes.dexDatei

  4. Wählen Sie nun die Datei classes.dex aus und legen Sie sie in einem dex2jarOrdner ab

  5. Öffnen Sie nun das cmd-Fenster und geben Sie den Pfad des dex2jarOrdners ein

  6. dex2jar.bat classes.dexGeben Sie nun den Befehl ein und drücken Sie die Eingabetaste

  7. Öffnen dex2jarSie nun den Ordner, in dem Sie die classes_dex2jar.jarDatei gefunden haben

  8. Als nächstes laden Sie das Java-Dekompiler-Tool über den folgenden Link herunter: http://java.decompiler.free.fr/?q=jdgui

  9. Letzter Schritt Öffnen Sie die Datei classes_dex2jar.jarim Java Decompiler Tool, jetzt können Sie Apk-Code sehen

Vikram Wadhwa
quelle
3
9. Letzter Schritt Öffnen Sie die Datei classes_dex2jar.jar im Java-Dekompiler-Tool. Jetzt können Sie den Apk-Code sehen. Wie gehe ich von hier aus zurück, um die Apk-Datei nach dem Ändern der Klassendatei zu erstellen
Dario Dias
1
@DarioDias Ich denke, es kann
Loveisbug
3
@ Loveisbug DarioDias fragt wie, nicht ob es möglich ist
Denny
5

Die Antworten sind bereits veraltet oder nicht vollständig. Dies funktioniert möglicherweise für nicht geschützte Apks (kein Proguard), aber heutzutage stellt niemand eine ungeschützte Apk bereit. Die Art und Weise, wie ich eine (meine) gut geschützte apk (Proguard, Sicherheitsüberprüfung, die nach "Hacking-Tools" sucht, Sicherheitsüberprüfung, die prüft, ob die App im Debug-Modus neu gepackt wurde, ...) ändern konnte, erfolgt über apktool as bereits von anderen hier erwähnt. Aber niemand hat erklärt, dass man die App erneut signieren muss.

apktool d app.apk
//generates a folder with smali bytecode files. 

//Do something with it.

apktool b [folder name] -o modified.apk
//generates the modified apk.

//and then
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore modified.apk androiddebugkey
//signs the app the the debug key (the password is android)

//this apk can be installed on a device.

In meinem Test hatte die ursprüngliche Version apk keine Protokollierung. Nachdem ich mit apktool dekompiliert hatte, tauschte ich eine vollständige Bytecodedatei ohne Protokollierung durch eine vollständige Bytecodedatei mit Protokollierung aus, kompilierte sie neu und signierte sie und konnte sie auf meinem Gerät installieren. Danach konnte ich die Protokolle in Android Studio sehen, als ich die App damit verband.

Meiner Meinung nach ist das Dekompilieren mit dex2jarund JD-GUInur hilfreich, um besser zu verstehen, was die Klassen tun, nur zu Lesezwecken. Aber da alles sicher ist, bin ich mir nicht sicher, ob Sie diesen halbgebackenen Java-Code jemals zu einer funktionierenden apk neu kompilieren können. Wenn ja, lassen Sie es mich bitte wissen. Ich denke, die einzige Möglichkeit besteht darin, den Bytecode selbst zu manipulieren, wie in diesem Beispiel erwähnt.

Bevor
quelle
2

dex2jar mit jd-gui gibt alle Java-Quelldateien an, aber sie sind nicht genau gleich. Sie sind fast gleichwertige .class-Dateien (nicht 100%). Wenn Sie also den Code für eine APK-Datei ändern möchten:

  • dekompilieren mit apktool

  • apktool generiert für jede Java-Datei mit demselben Namen eine smali- Datei (Assembly-Version von dex).

  • smali ist für den Menschen verständlich, nimmt Änderungen in der entsprechenden Datei vor und kompiliert mit demselben apktool ( apktool b Nw.apk <Folder Containing Modified Files>) neu

Pradeep Tiwari
quelle
2

Ich weiß, dass diese Frage beantwortet wurde und ich versuche hier keine bessere Antwort zu geben. Ich werde nur meine Erfahrungen in diesem Thema teilen.

Einmal habe ich meinen Code verloren und ich hatte nur die apkDatei. Ich habe es mit dem Tool unten dekompiliert und es hat meinen Tag gemacht.

Diese Tools MÜSSEN in einer solchen Situation verwendet werden, da dies sonst unethisch und manchmal sogar illegal ist (Diebstahl der Bemühungen eines anderen). Also bitte mit Bedacht einsetzen.

Das sind meine Lieblingswerkzeuge dafür:

javadecompilers.com

und um die apk von google play zu bekommen, kannst du sie googeln oder dir diese seiten ansehen:

Zum Zeitpunkt der Veröffentlichung dieser Antwort habe ich alle Links getestet und es hat perfekt für mich funktioniert.

HINWEIS: Die Apk-Dekompilierung ist im Fall von geschütztem Code nicht wirksam. Weil Proguard den Code verkleinert und verschleiert und Klassen in unsinnige Namen umbenennt, die es ziemlich schwierig machen, den Code zu verstehen.

Bonus:

Grundlegendes Tutorial zur Verwendung von Proguard :

MBH
quelle
-1

Dies ist ein Weg:

  1. Verwenden apktoolzum Dekodieren:

     $ apktool d -f {apkfile} -o {output folder}
    
  2. Verwenden Sie anschließend JADX (unter github.com/skylot/jadx).

     $ jadx -d {output folder} {apkfile}
    

2 Tools extrahieren und dekompilieren in denselben Ausgabeordner.

Einfacher Weg: Verwenden des Online APK Decompilers

quyet
quelle
Vorsichtig! Flag -flöscht den gesamten Ordner.
mrek
-2

Ich weiß, dass diese Frage immer noch beantwortet wird und ich versuche hier nicht, klug zu sein. Ich möchte nur eine andere Methode zu diesem Thema vorstellen.

Laden Sie Anwendungen mit apk grail herunter

APK Grail stellt die kostenlose Zip-Datei der Anwendung zur Verfügung.

Thomas P. Wilt
quelle