Как можно декомпилировать файлы Android DEX (VM bytecode) в соответствующий исходный код Java?
Декомпиляция DEX в исходный код 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
скриптами
Шаг 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.
Ответ 12
Вы можете попробовать JADX (https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler), это прекрасный инструмент для декомпиляции DEX.
И да, он также доступен онлайн (мой: 0)) новый сайт: http://www.javadecompilers.com/apk/
Ответ 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.