it-swarm.com.ru

декомпиляция DEX в исходный код Java

Как можно декомпилировать Android DEX (байт-код VM) файлы в соответствующий исходный код Java?

680
Will

Это просто

Получить эти инструменты:

1) dex2jar для перевода файлов dex в файлы jar

2) jd-gui для просмотра файлов Java в банке

Исходный код вполне читабелен, так как dex2jar делает некоторые оптимизации.

Процедура:

А вот процедура о том, как декомпилировать:

Шаг 1:

Преобразуйте classes.dex из test_apk-debug.apk в 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

Примечание: На компьютерах с Windows все сценарии .sh заменяются сценариями .bat

документация dex2jar

Шаг 2:

Откройте банку в JD-GUI

The decompiled source

851
fred

Чтобы уточнить, есть два основных пути, которые вы можете выбрать здесь в зависимости от того, чего вы хотите достичь:

Декомпилируйте байт-код Dalvik (dex) в читаемый Java источник. Вы можете сделать это легко с помощью dex2jar и jd-gui , как упоминает Фред. Полученный в результате источник полезен для чтения и понимания функциональности приложения, но, скорее всего, не даст 100% пригодного для использования кода. Другими словами, вы можете прочитать исходный код, но вы не можете изменить и упаковать его. Обратите внимание, что если исходный код был запутан с помощью proguard, результирующий исходный код будет значительно сложнее распутать.

Другой основной альтернативой является дизассемблирование байт-кода для smali , языка ассемблера, предназначенного именно для этой цели. Я обнаружил, что самый простой способ сделать это с помощью apktool . После того, как вы установили apktool, вы можете просто указать его на файл apk, и вы получите файл smali для каждого класса, содержащегося в приложении. Вы можете читать и изменять smali или даже полностью заменять классы, генерируя smali из нового источника Java (для этого вы можете скомпилировать ваш источник .Java в файлы .class с помощью javac, а затем преобразовать ваши файлы .class в. Файлы dex с помощью Android-компилятора dx, а затем используйте baksmali (smali disassembler) для преобразования файлов .dex в .smali, как описано в этот вопрос . Здесь может быть ярлык). Как только вы закончите, вы можете легко упаковать apk обратно с apktool снова. Обратите внимание, что apktool не подписывает полученный apk, поэтому вам нужно позаботиться об этом как и в любом другом Android приложении .

Если вы пойдете по пути smali, вы можете попробовать APK Studio , IDE, который автоматизирует некоторые из вышеперечисленных шагов, чтобы помочь вам декомпилировать и перекомпилировать apk и устанавливать его на устройство. ,.

Короче говоря, вы можете либо декомпилировать в Java, которая более читабельна, но, вероятно, необратима, либо разбирать на smali, который труднее читать, но гораздо гибче вносить изменения и переупаковывать измененное приложение. Какой подход вы выберете, будет зависеть от того, чего вы хотите достичь.

Наконец, предложение смеет также заслуживает внимания. Это инструмент ретаргетинга для преобразования файлов .dex и .apk в файлы Java .class, чтобы их можно было проанализировать с помощью типичных Java инструментов статического анализа.

129
Zach Lipton

Я действительно рекомендую пойти сюда: https://github.com/JesusFreke/smali

Он предоставляет BAKSMALI, который является превосходным инструментом обратного инжиниринга для файлов DEX. Это сделал JesusFreke, парень, который создал знаменитые ПЗУ для Android.

60
reflog

Более полная версия fred s answer :

Ручной способ

Сначала вам нужен инструмент для извлечения всех (скомпилированных) классов из DEX в JAR.
Один из них называется dex2jar и сделан китайским студентом.

Затем вы можете использовать jd-gui для декомпилирования классов в JAR для исходного кода.
Полученный источник должен быть достаточно читабельным, поскольку dex2jar применяет некоторые оптимизации.

Автоматический способ

Вы можете использовать APKTool . Он автоматически извлекает все классы (.dex), ресурсы (.asrc), затем преобразует двоичный XML в понятный человеку XML , и он также разбирает классы для вас.
Разборка всегда будет более надежной, чем декомпиляция, особенно с
JAR-файлы запутаны Pro Guard!

Просто скажите APKTool декодировать APK в каталог, а затем изменить то, что вы хотите,
и наконец закодировать его обратно в APK. Это все.

Важно: APKTool разбирается . Он не декомпилируется .
Сгенерированный код не будет Java источником.
Но вы должны быть в состоянии прочитать и даже отредактировать его, если вы знакомы с jasmin .
Если вам нужен источник Java, перейдите по Ручному способу .

28
Alba Mendez

Иногда вы получаете неработающий код, когда используете dex2jar/apktool, особенно в циклах. Чтобы избежать этого, используйте jadx , который декомпилирует байт-код dalvik в исходный код Java, не создавая файл .jar/.class первым, как это делает dex2jar (apktool использует dex2jar, я думаю). Это также с открытым исходным кодом и в активной разработке. У него даже есть GUI, для GUI-фанатиков. Попытайся!

22
polym

Поскольку никто не упомянул об этом, есть еще один инструмент: домашняя страница DED

Установите инструкции и некоторые пояснения: Установка .

Он был использован в довольно интересном исследовании безопасности популярных приложений на рынке (на самом деле это не связано, просто если вам интересно): Обзор Android Application Security

15
phaethon

Я использовал

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

Но никто не сравнится с собственными инструментами Google

1) Android Studio 2.x: сборка> анализ apk enter image description here

2) Android Studio 3.0: профиль или отладка APK enter image description hereenter image description here

15
ishandutta2007

Загрузив файл APK, необходимо выполнить следующие шаги, чтобы получить редактируемый Java код/​​документ.

  1. Конвертируйте ваш файл apk в Zip (при запуске загрузки не используйте опцию "сохранить", просто перейдите к "сохранить как" и укажите свое расширение как .Zip), выполнив подобное, вы можете избежать APKTOOL ...
  2. Извлеките Zip-файл, там вы можете найти somefilename.dex. так что теперь нам нужно конвертировать dex -> .class
  3. Для этого вам понадобится "dex2jar" (вы можете скачать его с http://code.google.com/p/dex2jar/ , после распаковки, в командной строке вы должны упомянуть как, [D:\dex2jar-0.09> dex2jar somefilename.dex] (Имейте в виду, что ваш файл somefilename.dex должен находиться в той же папке, где хранятся ваши файлы. dex2jar.)
  4. Загрузите jad с http://www.viralpatel.net/blogs/download/jad/jad.Zip и распакуйте его. После распаковки вы увидите два файла, таких как "jad.exe" и "Readme.txt" (иногда вместо "jad.exe" может присутствовать "jad.txt", поэтому просто переименуйте его расширение в "as.exe").
  5. Наконец, в командной строке вы должны указать, что [D:\jad> jad -sjava yourfilename.class] он будет анализировать ваш файл класса в редактируемый Java документ.
13
Kamal

возможен обратный инжиниринг Android . Выполните следующие действия, чтобы получить файл .Java из файла apk.

Шаг 1. Использование dex2jar

  • Создать файл .jar из файла .apk
  • команда: dex2jar sampleApp.apk

Шаг2. Декомпиляция .jar с использованием JD-GUI

  • он декомпилирует файлы .class, т.е. мы получим обфусцированный .Java обратно из apk.
8
gtiwari333

С помощью Dedexer вы можете разобрать файл .dex в байт-код dalvik (.ddx).

Насколько я знаю, декомпиляция в сторону Java невозможна.
Вы можете прочитать о байт-коде dalvik здесь .

8
hcpl

Последние Debian имеют Python пакет 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

Установите соответствующие пакеты:

Sudo apt-get install androguard python-networkx

Декомпилировать файл DEX:

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

Извлечь classes.dex из Apk + декомпилировать:

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

Apk-файл - это не что иное, как Java архив (JAR), вы можете извлечь файлы из архива через:

$ unzip app.apk -d ./dir-for-output
6
gavenkoa

Многое изменилось, так как большинство из этих ответов были опубликованы. В настоящее время существует множество простых инструментов с графическим интерфейсом, например:

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

Лучшее место, чтобы найти их - на форуме разработчиков XDA.

5
MPaulo

Поскольку ответ Dheeraj Bhaskar является относительно старым, как и много лет назад.

Вот мой последний (2019 год) ответ:

Основная логика

от dex до Java sourcecode, в настоящее время есть два вида решения:

  • One Step: непосредственно преобразуйте dex в Java sourcecode
  • Two Step: первое преобразование dex в jar, второе преобразование jar в Java sourcecode

Одношаговое решение: dex напрямую к Java sourcecode

Инструменты

Процесс

  1. скачать jadx-0.9.0.Zip , разархивировать его, в папке bin можно увидеть командную строку jadx или версию GUI jadx-gui, дважды щелкнуть, чтобы запустить версию GUI: jadx-gui

  1. открыть файл dex

затем может показать исходный код Java:

  1. File -> save as gradle project

затем получил исходный код Java:


Двухшаговое решение

Шаг 1: от dex до jar

Инструменты

Процесс

скачать dex2jar Zip , разархивировать получил d2j-dex2jar.sh, затем:

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

пример:

➜  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

Шаг 2: от jar до Java sourcecode

Инструменты

  • jd-gui : самый популярный, но код many будет декомпилировать ошибку
  • CRF : популярный код minor будет декомпилировать ошибку
  • Procyon: популярная ошибка компиляции кода no
  • другие

Процесс

здесь демо Procyon конвертировать jar в Java исходный код:

скачать procyon-decompiler-0.5.34.jar

затем используя синтаксис:

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

пример:

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

используя редактор VSCode , чтобы открыть экспортированный исходный код, похож на это:

Заключение

Правильность преобразования: Jadx> Procyon> CRF> JD-GUI

Рекомендую использовать: (одношаговое решение) Jadx


для более подробного объяснения, пожалуйста, обратитесь к моей онлайн китайской электронной книге: 安卓 应用 的 安全 和 破解

4
crifan

Вы можете попробовать JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ), это идеальный инструмент для декомпиляции DEX.

И да, он также доступен онлайн на (моем: 0) новом сайте: http://www.javadecompilers.com/apk/

3
Andrew Rukin

Самый простой способ декомпилировать приложение Android - это загрузить приложение с именем ShowJava из playstore. Просто выберите приложение, которое нужно декомпилировать, из списка приложений. Существует три различных декомпилятора, которые вы можете использовать для декомпиляции приложения, а именно:

CFR 0.110, JaDX 0.6.1 или FernFlower (аналитический декомпилятор).

2
Rishabh Maurya

Это можно сделать в следующие пять шагов:

Этот драгоценный камень делает эти вещи за вас автоматически, даже при установке необходимых инструментов

  1. конвертировать файл apk в Zip
  2. распаковать файл
  3. извлечь из него classes.dex
  4. используйте dex to jar для конвертирования classes.dex в файл jar
  5. используйте jadx gui, чтобы открыть файл jar как исходный код Java
2
Ajit Singh

Если вы не хотите загружать dex2jar, просто используйте apk_grabber python script , чтобы декомпилировать любой apk в jar-файлы. Затем вы читаете их с помощью jd-gui.

1
Jeff Brateman