Вопрос

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

Это было полезно?

Решение

Это просто

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

1) dex2jar перевести файлы dex в файлы jar

2) JD-интерфейс для просмотра 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

Другие советы

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

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

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

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

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

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

Я бы вообще рекомендовал зайти сюда:https://github.com/JesusFreke/smali

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

Более полная версия Фред's отвечать:

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

Сначала вам понадобится инструмент, извлекать все (скомпилированные) классы DEX в JAR.
Есть один, называется dex2jar, который сделал китайский студент.

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

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

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

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

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

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

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

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

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

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

  1. dex2jar + jd-gui
  2. javadecompilers.com
  3. вызывать зависть
  4. Apktool

Но ни один из них не сравнится с собственными инструментами Google.

1)Android-студия 2.x:сборка> анализировать apkenter image description here

2)Андроид Студия 3.0:Профиль или отладочный APKenter image description here enter image description here

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

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

С Дедексер, вы можете разобрать .dex файл в байт-код dalvik (.ddx).

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

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

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

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

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

  • он декомпилирует файлы .class, т. е. мы получим запутанный .java обратно из apk.

В последних версиях 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

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

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

Лучшее место, где их можно найти — на форуме разработчиков XDA.

С 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 или версия графического интерфейса jadx-gui, дважды щелкните, чтобы запустить версию графического интерфейса: jadx-gui

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

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

  1. File -> save as gradle project

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


Двухэтапное решение

Шаг 1: dex к jar

Инструменты

Процесс

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

  • apk к jar: sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
  • dex к 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

Инструменты

Процесс

здесь демо 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


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

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

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

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

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

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

Самый простой способ декомпилировать приложение для Android — загрузить приложение с именем ПоказатьJava из игрового магазина.Просто выберите из списка приложений приложение, которое необходимо декомпилировать.Есть три разных декомпилятора, которые вы можете использовать для декомпиляции приложения, а именно:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top