dekompilacja DEX ' a do kodu źródłowego Javy

Jak można dekompilować Pliki Android Dex (vm bytecode) do odpowiedniego kodu źródłowego Javy?

Author: vitaut, 2009-08-08

17 answers

It ' s easy

Pobierz te narzędzia:

  1. Dex2jar do tłumaczenia plików dex na pliki jar

  2. Jd-gui aby wyświetlić pliki Javy w jar

Kod źródłowy jest dość czytelny, ponieważ dex2jar dokonuje pewnych optymalizacji.

Procedura:

A oto procedura jak dekompilować:

Krok 1:

Konwertuj klasy.dex w test_apk-debug.apk do test_apk-debug_dex2jar.jar

d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex

Uwaga 1: w komputerach z systemem Windows wszystkie skrypty .sh są zastępowane przez .bat Skrypty

Uwaga 2: na Linuksie/Macu nie zapomnij o sh lub bash. Pełna komenda powinna brzmieć:

sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk 

Uwaga 3: Pamiętaj również o dodaniu uprawnień execute do katalogu dex2jar-X.X np. sudo chmod -R +x dex2jar-2.0

Dex2jar documentation

Krok 2:

Otwórz słoik w JD-GUI

Dekompilowane źródło

 903
Author: Dheeraj Bhaskar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-27 10:24:16

Aby nieco wyjaśnić, istnieją dwie główne ścieżki, które możesz wybrać w zależności od tego, co chcesz osiągnąć:

Dekompilacja bajtowego kodu Dalvika (dex) do czytelnego Źródła Javy. Możesz to zrobić łatwo z dex2jar i JD-gui, Jak wspomina fred. Wynikowe źródło jest przydatne do odczytu i zrozumienia funkcjonalności aplikacji, ale prawdopodobnie nie wytworzy 100% użytecznego kodu. Innymi słowy, możesz przeczytać źródło, ale tak naprawdę nie możesz go modyfikować i przepakowywać. Uwaga że jeśli źródło zostało zaciemnione za pomocą proguard, uzyskany kod źródłowy będzie znacznie trudniejszy do rozplątania.

Inną ważną alternatywą jest demontaż kodu bajtowego do smali , języka asemblacji zaprojektowanego właśnie do tego celu. Odkryłem, że najprostszym sposobem na to jest apktool . Po zainstalowaniu apktool możesz po prostu skierować go na plik apk, a otrzymasz plik smali dla każdej klasy zawartej w podanie. Możesz czytać i modyfikować smali lub nawet całkowicie zastępować klasy generując smali z nowego źródła Javy (aby to zrobić, możesz skompilować swoje .java source to .pliki klas z javac, a następnie przekonwertować swoje.pliki klas do .pliki dex z kompilatora DX Androida, a następnie użyć baksmali (smali disassembler) do konwersji .dex to .pliki smali, jak opisano w to pytanie . Tu może być Skrót). Po zakończeniu możesz łatwo spakować kopię zapasową apk za pomocą apktool jeszcze raz. Zauważ, że apktool nie podpisuje wynikowego apk, więc musisz się tym zająć , podobnie jak każda inna aplikacja na Androida .

Jeśli przejdziesz trasę smali, możesz spróbować APK Studio , IDE, które automatyzuje niektóre z powyższych kroków, aby pomóc ci w dekompilacji i rekompilacji apk i zainstalowaniu go na urządzeniu.

Krótko mówiąc, masz do wyboru albo dekompilację do Javy, która jest bardziej czytelna, ale prawdopodobnie nieodwracalna, albo demontaż do smali, który jest trudniejszy do odczytania, ale znacznie bardziej elastyczny, aby wprowadzać zmiany i przepakowywać zmodyfikowaną aplikację. To, które podejście wybierzesz, zależy od tego, co chcesz osiągnąć.

Wreszcie, sugestia dare jest również warta uwagi. Jest to narzędzie do retargetingu do konwersji .dex i .pliki apk do Javy .pliki klas, dzięki czemu można je analizować przy użyciu typowych narzędzi do analizy statycznej Javy.

 140
Author: Zach Lipton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:13

Faktycznie polecam tutaj: https://github.com/JesusFreke/smali

Zapewnia BAKSMALI, który jest najdoskonalszym narzędziem inżynierii wstecznej dla plików DEX. To jest wykonane przez JesusFreke, facet, który stworzył słynny ROM dla Androida.

 61
Author: reflog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-28 07:36:17

bardziej kompletna wersja fred 's odpowiedz:

Manual way

Najpierw potrzebujesz narzędzia do wyodrębnienia wszystkich (skompilowanych) klas na DEX do JAR.
Jest jeden o nazwie dex2jar , który jest wykonany przez chińskiego studenta.

Następnie możesz użyć JD-gui do dekompilacji klas w JAR do kodu źródłowego.
Wynikowe źródło powinno być dość czytelne, ponieważ dex2jar stosuje niektóre optymalizacje.

Automatyczny sposób

Możesz użyć APKTool . To automatycznie wyodrębni wszystkie klasy (.dex), zasoby (.asrc), następnie przekonwertuje binarny XML na czytelny dla człowieka XML, a także rozmontuje klasy dla Ciebie.
demontaż zawsze będzie bardziej wytrzymały niż dekompilacja, szczególnie Z
Słoiki z Pro Guard!

Po Prostu powiedz Apktoolowi, żeby dekoduj APK do katalogu, a następnie zmodyfikuj co chcesz,
i wreszcie zakodować to z powrotem do APK. To wszystko.

Ważne: APKTool disassembles. To nie dekompiluje.
Wygenerowany kod nie będzie źródłem Javy.
Ale powinieneś być w stanie go przeczytać, a nawet edytować, jeśli znasz jasmin .
Jeśli potrzebujesz Źródła Javy, przejdź do Manual way.

 30
Author: Alba Mendez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:13

Czasami dostajesz zepsuty kod, gdy używasz dex2jar/apktool, przede wszystkim w pętlach. Aby tego uniknąć, użyj jadx , który dekompiluje bajt Dalvika do kodu źródłowego Javy, bez tworzenia .jar/.class Plik najpierw jako dex2jar robi (apktool używa dex2jar myślę). Jest również open-source i w aktywnym rozwoju. Ma nawet GUI, dla fanatyków GUI. Spróbuj!

 25
Author: polym,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-04 21:07:00

Ponieważ odpowiedź Dheeraj Bhaskar jest stosunkowo stara, jak wiele lat temu.

Oto moja najnowsza (2019 rok) odpowiedź:

Główna Logika

Od dex do java sourcecode, obecnie ma dwa rodzaje rozwiązań:

  • One Step: bezpośrednio Konwertuj dex na java sourcecode
  • Two Step: pierwsza konwersja dex na jar, druga konwersja jar na java sourcecode

Jednoetapowe rozwiązanie: dex bezpośrednio do java sourcecode

Narzędzia

Proces

  1. Pobierz jadx-0.9.0.zip , rozpakuj go, w folderze bin można zobaczyć wiersz poleceń jadx lub wersję GUI jadx-gui, Kliknij dwukrotnie, aby uruchomić wersję GUI: jadx-gui

  1. otwórz dex Plik

Następnie można wyświetlić kod źródłowy Javy:

  1. File -> save as gradle project

Następnie otrzymaliśmy kod źródłowy Javy:


Rozwiązanie dwuetapowe

Krok 1: dex do jar

Narzędzia

Proces

Pobierz dex2jar zip , rozpakuj d2j-dex2jar.sh, następnie:

  • apk do jar: sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
  • dex do jar: sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex

Przykład:

➜  v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜  v3.4.8 ll
-rw-------  1 crifan  staff   9.5M  3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw-------  1 crifan  staff   8.4M  3 19 14:04 com.huili.readingclub8825612.dex

Krok 2: jar do java sourcecode

Narzędzia

Proces

Tutaj demo Procyon Konwertuj jar na kod źródłowy Javy:

Download procyon-decompiler-0.5.34.jar

Następnie używając składni:

java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName

Przykład:

java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/procyon-decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612

Używanie edytora VSCode aby otworzyć wyeksportowany kod źródłowy, wygląda tak:

Podsumowanie

Poprawność konwersji : Jadx > Procyon > CRF > JD-GUI

Zalecane użycie: (One step solution ' s) Jadx


Aby uzyskać bardziej szczegółowe wyjaśnienie, zapoznaj się z moim internetowym Chińskim ebookiem: 安的的安全和 {

 20
Author: crifan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-03 02:44:35

Użyłem

  1. dex2jar + JD-gui
  2. javadecompilers.com
  3. enjarify
  4. Apktool

Ale żaden nie przebije własnych narzędzi google

1)Android Studio 2.x: build> analyze apk Tutaj wpisz opis obrazka

2)Android Studio 3.0: Profil lub debugowanie APK Tutaj wpisz opis obrazka Tutaj wpisz opis obrazka

 18
Author: ishandutta2007,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-19 21:48:12

Ponieważ nikt o tym nie wspomniał, jest jeszcze jedno narzędzie: ded homepage

Install how-to and some explanations: Installation .

Został użyty w dość ciekawym badaniu bezpieczeństwa aplikacji top market (nie do końca powiązanych, tylko jeśli jesteś ciekawy): badanie bezpieczeństwa aplikacji Android

 15
Author: phaethon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-17 07:22:19

Po pobraniu pliku APK należy wykonać następujące kroki, aby uzyskać edytowalny kod/dokument java.

  1. Konwertuj plik apk na zip (podczas uruchamiania pobierania nie idź z opcją "Zapisz", po prostu przejdź z" Zapisz jako " i wspomnij o rozszerzeniu jako .zip) w ten sposób można uniknąć APKTOOL...
  2. rozpakuj plik zip, tam znajdziesz nazwę pliku.dex. więc teraz musimy przekonwertować dex -> .klasa
  3. aby to zrobić, potrzebujesz "dex2jar"(możesz pobrać go z http://code.google.com/p/dex2jar/, Po rozpakowaniu, w wierszu polecenia musisz wspomnieć jak, [D:\dex2jar-0.09 > dex2jar somefilename.dex] (pamiętaj, że Twoja nazwa pliku.dex musi znajdować się w tym samym folderze, w którym przechowujesz dex2jar.)
  4. Pobierz jad z http://www.viralpatel.net/blogs/download/jad/jad.zip i wyciągnij go. Po rozpakowaniu można zobaczyć dwa pliki, takie jak " jad.exe " i " Readme.txt "(czasami " jad.txt "może tam zamiast" jad.exe", więc po prostu zmień nazwę jego rozszerzenia jako.exe do uruchomienia)
  5. Wreszcie, w wierszu polecenia musisz wspomnieć jak [D:\jad>jad-sjava yourfilename.class] przetworzy plik klasy do edytowalnego dokumentu java.
 13
Author: Kamal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-10 14:06:17

Za pomocą Dedexer można zdemontować plik .dex do bajtowego kodu Dalvika (.ddx).

Dekompilacja w kierunku Javy nie jest możliwa z tego co wiem.
Możesz przeczytać o Dalvik bytecode tutaj .

 8
Author: hcpl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-14 18:04:09

Inżynieria odwrotna Androida jest możliwa . Wykonaj następujące kroki, aby uzyskać .plik java z pliku apk.

Krok 1 . Korzystanie z dex2jar

  • wygenerować .plik jar z .plik apk
  • polecenie: dex2jar sampleApp.apk

Krok 2 . Dekompilacja .jar using JD-GUI

  • dekompiluje .pliki klas, tzn. otrzymamy zaciemnione .java z apk.
 8
Author: gtiwari333,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-18 07:07:23

Ostatni Debian ma pakiet Pythona androguard:

Description-en: full Python tool to play with Android files
 Androguard is a full Python tool to play with Android files.
  * DEX, ODEX
  * APK
  * Android's binary xml
  * Android resources
  * Disassemble DEX/ODEX bytecodes
  * Decompiler for DEX/ODEX files

Zainstaluj odpowiednie pakiety:

sudo apt-get install androguard python-networkx

Dekompilacja pliku DEX:

$ androdd -i classes.dex -o ./dir-for-output

Ekstrakt classes.dex z Apk + dekompilacja:

$ androdd -i app.apk -o ./dir-for-output

Plik Apk to nic innego jak Java archive (jar), możesz wyodrębnić pliki z archiwum poprzez:

$ unzip app.apk -d ./dir-for-output
 6
Author: gavenkoa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-03 06:33:04

Wiele się zmieniło od czasu opublikowania większości tych odpowiedzi. Obecnie istnieje wiele łatwych narzędzi z GUI, takich jak te:

APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit

Najlepsze miejsce, aby je znaleźć jest na forum programistów XDA.

 5
Author: MPaulo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-03 05:43:14

Możesz spróbować JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ), jest to idealne narzędzie do dekompilacji.

I tak, jest również dostępny on-line na (my :0)) nowej stronie: http://www.javadecompilers.com/apk/

 4
Author: Andrew Rukin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-21 11:30:07

Można to zrobić w następujących pięciu krokach:

Ten klejnot robi te rzeczy dla ciebie automatycznie nawet instalacji wymaganych narzędzi

  1. Konwertuj plik apk na zip
  2. rozpakuj plik
  3. wyodrębnij klasy.dex from it
  4. użyj dex do jar do konwersji klas.dex do pliku jar
  5. użyj jadx gui, aby otworzyć plik JAR jako kod źródłowy Javy
 2
Author: Ajit Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-31 06:17:42

Najprostszą metodą dekompilacji aplikacji na Androida jest pobranie aplikacji o nazwie ShowJava z playstore . Wystarczy wybrać aplikację, która ma być dekompilowana z listy aplikacji. Istnieją trzy różne Dekompilatory, których możesz użyć do dekompilacji aplikacji, a mianowicie-

CFR 0.110, JaDX 0.6.1 lub FernFlower (analytical decompiler).

 2
Author: Rishabh Maurya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-04 17:25:56

Jeśli nie chcesz pobrać dex2jar, to po prostu użyj apk_grabber skrypt Pythona do dekompilacji dowolnego apk do plików jar. Potem czytasz je z JD-gui.

 1
Author: Jeff Brateman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-17 22:03:35