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

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

Ответ 1

Легко

Получить следующие инструменты:

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

Примечание. В машинах Windows все сценарии .sh заменяются .bat скриптами

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

Шаг 2:

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

Декомпилированный источник

Ответ 2

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

Декомпилируйте байт-код 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, который труднее читать, но гораздо более гибким для внесения изменений и переупаковки модифицированного приложения. Какой подход вы выберете, будет зависеть от того, что вы хотите достичь.

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

Ответ 3

Я бы рекомендовал здесь: https://github.com/JesusFreke/smali

Он предоставляет BAKSMALI, который является отличным инструментом для обратного проектирования файлов DEX. Это сделал JesusFreke, парень, создавший слабые ROM для Android.

Ответ 4

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

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

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

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

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

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

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

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

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

Ответ 8

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

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

Ответ 9

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

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

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

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

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

Ответ 10

В недавнем 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 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 + Decompile:

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

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

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

Ответ 11

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

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

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

Ответ 13

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

Этот жемчуг автоматически выполняет эти функции даже при установке необходимых инструментов

  • конвертировать файл apk в zip
  • разархивируйте файл
  • извлечь из него classes.dex
  • использовать dex для jar для преобразования classes.dex в файл jar.
  • использовать jadx gui для открытия файла jar в качестве исходного кода java

Ответ 14

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

Ответ 15

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

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

Ответ 16

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

  • dex2jar + jd-gui
  • javadecompilers.com
  • enjarify
  • Apktool

Но ни один из них не использует собственные инструменты Google.

1) Android Studio 2.x: строить > анализировать apk введите описание изображения здесь

2) Android Studio 3.0: Профиль или отладка APK введите описание изображения здесь введите описание изображения здесь