Как можно декомпилировать файлы Android DEX (VM bytecode) в соответствующий исходный код Java?
Получить следующие инструменты:
1) dex2jar, который сделан китайским учеником. Он преобразует файлы dex в файлы jar.
2) jd-gui для просмотра java файлов в банке
Исходный код вполне читаем, поскольку dex2jar делает некоторые оптимизации.
А вот процедура декомпиляции:
Преобразуйте 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
скриптами
Откройте банку в JD-GUI
Чтобы прояснить, есть два основных пути, которые вы можете предпринять здесь, в зависимости от того, что вы хотите выполнить:
Декомпилируйте байт-код 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.
Я бы рекомендовал здесь: https://github.com/JesusFreke/smali
Он предоставляет BAKSMALI, который является отличным инструментом для обратного проектирования файлов DEX. Это сделал JesusFreke, парень, создавший слабые ROM для Android.
Более полная версия 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.
Иногда вы получаете сломанный код при использовании dex2jar
/apktool
, особенно в циклах. Чтобы избежать этого, используйте jadx, который декомпилирует байт-код dalvik в исходный код java, без создания файла .jar
/.class
сначала, когда dex2jar
делает ( apktool использует dex2jar, я думаю). Он также работает с открытым исходным кодом и активно развивается. У него даже есть GUI, для GUI-фанатиков. Попробуйте!
Поскольку никто не упоминал об этом, есть еще один инструмент: Домашняя страница DED
Установите инструкции и некоторые пояснения: Installation.
Он был использован в довольно интересном исследовании безопасности приложений на верхнем рынке (на самом деле это не связано, просто если вам интересно): Обзор безопасности приложений Android
После того как вы загрузили файл APK, вам нужно выполнить следующие шаги, чтобы получить редактируемый код/документ Java.
Android Reverse Engineering возможно , Выполните следующие шаги, чтобы получить файл .java из файла apk.
Шаг1. Использование dex2jar
dex2jar sampleApp.apk
Шаг 2. Декомпиляция .jar с использованием JD-GUI
С Dedexer вы можете дизассемблировать файл .dex
в байт-код dalvik (.ddx
).
Декомпиляция в сторону Java невозможна, насколько я знаю.
Вы можете прочитать о байт-кодеке dalvik здесь.
Много изменилось, так как большинство этих ответов было опубликовано. В настоящее время существует множество простых инструментов с графическим интерфейсом, например:
APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit
Лучшее место для их поиска можно найти на форуме разработчиков XDA.
В недавнем 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
Вы можете попробовать JADX (https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler), это прекрасный инструмент для декомпиляции DEX.
И да, он также доступен онлайн (мой: 0)) новый сайт: http://www.javadecompilers.com/apk/
Это можно сделать в следующие пять шагов:
Этот жемчуг автоматически выполняет эти функции даже при установке необходимых инструментов
Я использовал
Но ни один из них не использует собственные инструменты Google.
1) Android Studio 2.x: строить > анализировать apk
2) Android Studio 3.0: Профиль или отладка APK
Самый простой способ декомпилировать приложение для Android - загрузить приложение с именем ShowJava из playstore. Просто выберите приложение, которое необходимо декомпилировать из списка приложений. Существует три разных декомпилятора, которые вы можете использовать для декомпиляции приложения, а именно -
CFR 0.110, JaDX 0.6.1 или FernFlower (аналитический декомпилятор).
Если вы не хотите загружать dex2jar, просто используйте apk_grabber
python script, чтобы декомпилировать любые apk в jar файлы, Затем вы читаете их с помощью jd-gui.