Ist es möglich, eine Android .apk-Datei zu dekompilieren?


85

Können die Benutzer die APK-Datei meiner Anwendung wieder in den tatsächlichen Code konvertieren? Wenn ja - gibt es eine Möglichkeit, dies zu verhindern?


1
Es gibt verschiedene Methoden zum Dekompilieren von APK . Ich habe nur öfter APKTool, es ist das beste und mächtigste. Es ist sehr einfach, APK-Dateien damit zu ändern .
Taranfx

Ich habe hier einen Blog-Beitrag geschrieben: codexplo.wordpress.com/2012/03/15/… aber auch hier wäre es schwierig für verschleierten Code ...
Rokonoid


Antworten:


80

Erstens ist eine APK-Datei nur eine modifizierte JAR-Datei. Die eigentliche Frage ist also, ob sie die darin enthaltenen Dex-Dateien dekompilieren können. Die Antwort ist irgendwie. Es gibt bereits Disassembler wie Dedexer und Smali . Sie können erwarten, dass diese nur besser werden, und theoretisch sollte es irgendwann möglich sein, sie (zumindest manchmal) in die tatsächliche Java-Quelle zu dekompilieren. Siehe die vorherige Frage zum Dekompilieren von DEX in Java-Quellcode .

Was Sie sich merken sollten, ist, dass Verschleierung niemals funktioniert. Wählen Sie eine gute Lizenz und geben Sie Ihr Bestes, um sie gesetzlich durchzusetzen. Verschwenden Sie keine Zeit mit unzuverlässigen technischen Maßnahmen.


45
Sag niemals nie. Die Verschleierung wird einen entschlossenen Dieb nicht aufhalten, aber viele andere verlangsamen oder abschrecken. Die Verarbeitung mit Proguard ist eine einfache und ZUVERLÄSSIGE Möglichkeit, Ihren Code zu verschleiern, und als Bonus wird er auch optimiert. Und es ist im Android SDK enthalten, daher wird es von Google empfohlen.
Barry Fruitman

3
Die Verschleierung funktioniert definitiv, aber Sie müssen klarer definieren, was Ihr Ziel ist. Offensichtlich ist die einzige Möglichkeit, Ihren Quellcode jemals wirklich sicher zu halten, niemandem Zugriff, Server oder Client zu gewähren. Beachten Sie, dass Proguard bei Klassen mit Referenzen in XML-Dateien nicht gut funktioniert. Sie müssen die manuelle Verschleierung verwenden, um dies zu umgehen.
MattC

35

Eine Dekompilierung der APK-Datei ist möglich. Es kann jedoch schwierig sein, den Code zu verstehen, wenn er verschleiert ist.

ApkTool zum Anzeigen von Ressourcen in der APK-Datei

  • Extrahiert AndroidManifest.xml und alles im res-Ordner (Layout-XML-Dateien, Bilder, HTML-Dateien, die in der Webansicht verwendet werden usw.)
  • Befehl : apktool.bat d sampleApp.apk
  • HINWEIS: Sie können dies erreichen, indem Sie das Zip-Dienstprogramm wie 7-zip verwenden. Es extrahiert aber auch die .smali-Datei aller .class-Dateien.

Verwenden von dex2jar

  • Erzeugt eine JAR-Datei aus einer APK-Datei. Wir benötigen eine JD-GUI, um den Quellcode aus dieser JAR-Datei anzuzeigen.
  • Befehl : dex2jar sampleApp.apk

Dekompilieren von .jar mithilfe der JD-GUI

  • dekompiliert die .class-Dateien (verschleiert - in einem Fall der Android-App, aber in einem Fall einer anderen .jar-Datei wird ein lesbarer Originalcode erhalten). Das heißt, wir erhalten .java von der Anwendung zurück.

apktool spuckt keine Java-Quelldateien aus! Nur smali
IgorGanapolsky

1
Wie ich bereits in der Antwort sagte, erstellt apktool .jar aus .apk und wir müssen ein JD-GUI-ähnliches Tool verwenden, um .jar zu dekompilieren, um .java-Quelldateien zu erhalten.
gtiwari333

1
Du hast mir das Leben gerettet! Was für ein großartiger Beitrag! Ich habe die letzten zwei Tage Code aufgrund einer ausgefallenen SSD verloren (leider habe ich mich nicht zu Git verpflichtet). Allerdings hatte ich die apk und jetzt habe ich meine Quelle, wohlgemerkt, ein bisschen anders, aber Quelle!
Farcrats

2

Ich kann auch hinzufügen, dass es heutzutage möglich ist, Android-Anwendungen online zu dekompilieren, ohne dass Software benötigt wird!

Hier sind 2 Optionen für Sie:


decompileandroid.com ist offline (wenn Sie die apk hochladen, werden Sie Probleme haben, sie erneut herunterzuladen) und javadecompilers.com/apk hat meine apk für eine lange Zeit in eine Warteschlange gestellt. Ich ging offline, dann online, es war immer noch in einer Warteschlange. Ich habe den gesamten Browserverlauf gelöscht und jetzt befindet sich die apk, die ich zum zweiten Mal hochgeladen habe, in einer Warteschlange.
iOSAndroidWindowsMobileAppsDev

1

Laden Sie dieses Jadx-Tool https://sourceforge.net/projects/jadx/files/ herunter.

Entpacken Sie es und führen Sie dann im Ordner lib die Datei jadx-gui-0.6.1.jar aus. Durchsuchen Sie jetzt Ihre apk-Datei. Es ist fertig. Apk wird automatisch dekompiliert und gespeichert, indem Sie auf die Schaltfläche Speichern klicken. Hoffe es wird für dich funktionieren. Vielen Dank


0

Manchmal wird bei der Verwendung von dex2jar/ Code beschädigt apktool, insbesondere in Schleifen. Um dies zu vermeiden, verwenden Sie jadx , das Dalvik-Bytecode in Java-Quellcode dekompiliert, ohne zuvor eine .jar/ .class-Datei zu erstellen dex2jar(apktool verwendet dex2jar, glaube ich). Es ist auch Open Source und befindet sich in der aktiven Entwicklung. Es hat sogar eine GUI für GUI-Fanatiker. Versuch es!


0

Können die Benutzer die APK-Datei meiner Anwendung wieder in den tatsächlichen Code konvertieren?

Ja.

Menschen können verschiedene Werkzeuge verwenden, um:

  • Analyse: Ihre apk
  • dekodiere / hacke deine apk
    • Verwenden Sie FDex2, um die dexDatei zu sichern
      • dann verwenden dex2jar, um zu konvertierenjar
        • dann verwenden jadx, um zum javaQuellcode zu konvertieren

Wenn ja - gibt es eine Möglichkeit, dies zu verhindern?

Ja. Mehrere (kombinierte) Möglichkeiten, dies (bis zu einem gewissen Grad) zu verhindern:

  • niedrige Ebene: Code-Verschleierung
    • mit Android ProGuard
  • High Level: Verwenden Sie Android Harden Szenario

Weitere Details finden Sie in meinem chinesischen Tutorial: 安卓 应用 的 安全 和 破解


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.