Если у вас есть деньги, купите Jeb , в противном случае используйте JADX , посмотрите здесь, почему
Polym
Существует новый кросс-платформенный (java) и инструмент с открытым исходным кодом, который позволяет вам это сделать, просто извлеките bytecodeviewer: stackoverflow.com/a/36557898/795245
+1. Я пробовал и Баксмали, и Декс2джар. Dex2Jar + JD-Gui побеждает за то, что предоставил вам отлично читаемый исходный код для большинства файлов .dex.
Джонатан Думайн
привет, не могли бы вы поделиться тем, как вы идете? Я буду очень благодарен вам.
Арслан Анвар
2
Вышеприведенное предложение прозвенело в колокольчике - похоже, здесь кавычка : geeknizer.com/decompile-reverse-engineer-android-apk (или наоборот?). Связанные статьи кратко объясняют вышеупомянутые инструменты, а также Smali и APKTool.
AgentKnopf
2
@JonathanDumaine, это зависит. Если JAR-файлы запутаны, и вы хотите внести небольшие изменения, Backsmali - единственный путь. Бонус! С APKTool вы также получаете все XML, изображения и другие ресурсы обратно. Смотри мой ответ .
Альба Мендес
3
@JonathanDumaine Я согласен с jmendeth, apktool - это также путь, если вы хотите декомпилировать свой apk, изменить его, а затем перекомпилировать. При использовании dex2jar и jd-gui исходный код действительно читабелен, но вы не можете перекомпилировать без ошибок!
Darkheir
138
Чтобы уточнить, есть два основных пути, которые вы можете выбрать здесь в зависимости от того, чего вы хотите достичь:
Декомпилируйте байт-код 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.
Он предоставляет BAKSMALI, который является превосходным инструментом обратного инжиниринга для файлов DEX. Это сделал JesusFreke, парень, который создал знаменитые ПЗУ для Android.
smali - это язык, похожий на ассемблер, основанный на dalvik IL, его нельзя напрямую перевести на Java.
reflog
@endryha Нет инструментов, способных сделать это. Смотрите этот вопрос для получения дополнительной информации.
Альба Мендес
1
Код, код, код, ... Почему только код? Если вы используете APKTool, вы получите все обратно! И это так же просто, как ./apktool d myprogram.apk. Смотри мой ответ .
Сначала вам нужен инструмент для извлечения всех (скомпилированных) классов из DEX в JAR.
Один из них называется dex2jar и сделан китайским студентом.
Затем вы можете использовать jd-gui для декомпиляции классов в JAR до исходного кода.
Полученный источник должен быть достаточно читабельным, поскольку dex2jar применяет некоторые оптимизации.
Автоматический способ
Вы можете использовать APKTool . Он автоматически извлечет все классы ( .dex), resources ( .asrc), затем преобразует двоичный XML в читаемый человеком XML , а также разберет классы для вас. Разборка всегда будет более надежной, чем декомпиляция, особенно с
JAR-файлами, скрытыми в Pro Guard!
Просто скажите APKTool, чтобы декодировать APK в каталог, затем измените то, что вы хотите,
и, наконец, закодируйте его обратно в APK. Это все.
Важно: APKTool разбирается . Это не декомпилируется .
Сгенерированный код не будет исходным кодом Java.
Но вы должны быть в состоянии прочитать его и даже отредактировать, если вы знакомы с жасмином .
Если вы хотите получить исходный код Java, пожалуйста, перейдите в ручном режиме .
Иногда вы получаете неработающий код при использовании dex2jar/ apktool, особенно в циклах. Чтобы избежать этого, используйте jadx , который декомпилирует байт-код dalvik в исходный код java, не создавая сначала файл .jar/, .classкак это dex2jarделает (я думаю, apktool использует dex2jar). Это также с открытым исходным кодом и в активной разработке. У него даже есть GUI, для GUI-фанатиков. Попробуй это!
Я полагаю, что у jadx нет опции компиляции, но код читабелен
Buddy
@EnesBattal ты имеешь ввиду javac "$(find . -name '*.java')"?
Полим
как насчет формирования apk? размещение классов в apk, zipalign, подписи и т. д.
Buddy
@EnesBattal Ну, вы можете помочь реализовать это - в противном случае вы могли бы использовать для этого apktool .. или zipalign / sign с помощью инструментов Android
polym
1
@lejonl Смертная казнь для тебя, монстр!
Polym
17
я использовал
dex2jar + jd-gui
javadecompilers.com
enjarify
Apktool
Но никто не сравнится с собственными инструментами Google
Плюс один для Enjarify. По моему личному опыту, он показал лучшие результаты по сравнению с d2j
qre0ct
15
Поскольку никто не упомянул об этом, есть еще один инструмент: домашняя страница DED
Установка с практическими рекомендациями и некоторые пояснения: Установка .
Он был использован в довольно интересном исследовании безопасности популярных приложений на рынке (не очень связанном, просто если вам интересно): обзор безопасности приложений для Android
скачайте jadx-0.9.0.zip , разархивируйте его, в binпапке можно увидеть jadxверсию командной строки или GUI jadx-gui, дважды щелкните для запуска версии GUI:jadx-gui
странно, но если я попытаюсь выполнить 1 шаг (декомпилировать dex to jar в Windows) с помощью этой команды dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dexпросто java.io.IOException: the src file not a .dex or zip file
Сергей
@ Сергей, не могли бы вы попробовать: d2j-dex2jar.bat "D:\android\some_dex_file.dex"нормально или нет?
crifan
да, я пытался точно, >d2j-dex2jar.bat file.dexно это не хорошо. может это из-за того, что мой .dexфайл был скопирован dalvik-cache?
Сергей
1
@ Сергей да, самая вероятная причина, по твоему мнению dex is copied from dalvik-cache, должно бытьdex is decompiled from apk
crifan
@crifan, спасибо за этот ответ. JADX впечатляет. я вернусь к работе. Эммануэль @ JD-Gui
Эммануэль Дюпюи
13
После того, как вы загрузили файл 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.
Но если я снова скомпилирую весь декомпилированный исходный код, он не запустится, компилятор покажет много ошибок.
Есть ли какое-либо решение для декомпиляции исходного кода Java для Android будет работать в Eclipse
2
Reverse Engineering вовсе не обязательно означает декомпиляции . Фактически, JAR-файлы, скрытые ProGuard, не будут правильно декомпилироваться.
Альба Мендес
Если вы имеете дело с обфусцированным кодом, лучше просто разобрать его. Вы не получите исходный код Java, но вы всегда сможете увидеть / изменить код. Смотри мой ответ .
Альба Мендес
Я бы порекомендовал делать как декомпиляцию, так и дизассемблирование. Результирующий декомпилированный код легче понять, но все модификации должны быть сделаны с разобранной версией. Особенно верно, если Proguard был использован. Я считаю, что dex2jar в сочетании с jd-gui лучше всего подходит для декомпиляции.
Микко Ранталайнен
6
Последние 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
*Decompilerfor 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), вы можете извлечь файлы из архива через:
Многое изменилось, так как большинство из этих ответов были опубликованы. В настоящее время существует множество простых инструментов с графическим интерфейсом, например:
Самый простой способ декомпилировать андроид приложение , это загрузить приложение под названием ShowJava из playstore. Просто выберите приложение, которое нужно декомпилировать, из списка приложений. Существует три различных декомпилятора, которые вы можете использовать для декомпиляции приложения, а именно:
CFR 0.110, JaDX 0.6.1 или FernFlower (аналитический декомпилятор).
Если вы не хотите загружать dex2jar, просто используйте apk_grabberскрипт python для декомпиляции любого apk в jar-файлы. Затем вы читаете их с помощью jd-gui.
Ответы:
Это просто
Получить эти инструменты:
1) dex2jar для перевода файлов dex в файлы jar
2) JD-GUI для просмотра файлов Java в банке
Исходный код вполне читабелен, так как dex2jar делает некоторые оптимизации.
Процедура:
А вот процедура о том, как декомпилировать:
Шаг 1:
Преобразуйте classes.dex из test_apk-debug.apk в test_apk-debug_dex2jar.jar
документация dex2jar
Шаг 2:
Откройте банку в 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, который труднее читать, но гораздо гибче вносить изменения и переупаковывать измененное приложение. Какой подход вы выберете, будет зависеть от того, чего вы хотите достичь.
Наконец, предложение о вызове также заслуживает внимания. Это инструмент ретаргетинга для преобразования файлов .dex и .apk в файлы java .class, чтобы их можно было проанализировать с помощью типичных инструментов статического анализа java.
источник
Я действительно рекомендую пойти сюда: https://github.com/JesusFreke/smali
Он предоставляет BAKSMALI, который является превосходным инструментом обратного инжиниринга для файлов DEX. Это сделал JesusFreke, парень, который создал знаменитые ПЗУ для Android.
источник
./apktool d myprogram.apk
. Смотри мой ответ .Более полная версия Фреда «S ответ :
Ручной способ
Сначала вам нужен инструмент для извлечения всех (скомпилированных) классов из DEX в JAR.
Один из них называется dex2jar и сделан китайским студентом.
Затем вы можете использовать jd-gui для декомпиляции классов в JAR до исходного кода.
Полученный источник должен быть достаточно читабельным, поскольку dex2jar применяет некоторые оптимизации.
Автоматический способ
Вы можете использовать APKTool . Он автоматически извлечет все классы (
.dex
), resources (.asrc
), затем преобразует двоичный XML в читаемый человеком XML , а также разберет классы для вас.Разборка всегда будет более надежной, чем декомпиляция, особенно с
JAR-файлами, скрытыми в Pro Guard!
Просто скажите APKTool, чтобы декодировать APK в каталог, затем измените то, что вы хотите,
и, наконец, закодируйте его обратно в APK. Это все.
Важно: APKTool разбирается . Это не декомпилируется .
Сгенерированный код не будет исходным кодом Java.
Но вы должны быть в состоянии прочитать его и даже отредактировать, если вы знакомы с жасмином .
Если вы хотите получить исходный код Java, пожалуйста, перейдите в ручном режиме .
источник
Иногда вы получаете неработающий код при использовании
dex2jar
/apktool
, особенно в циклах. Чтобы избежать этого, используйте jadx , который декомпилирует байт-код dalvik в исходный код java, не создавая сначала файл.jar
/,.class
как этоdex2jar
делает (я думаю, apktool использует dex2jar). Это также с открытым исходным кодом и в активной разработке. У него даже есть GUI, для GUI-фанатиков. Попробуй это!источник
javac "$(find . -name '*.java')"
?я использовал
Но никто не сравнится с собственными инструментами Google
1) Android Studio 2.x: сборка> анализ apk
2) Android Studio 3.0: профиль или отладка APK
источник
Поскольку никто не упомянул об этом, есть еще один инструмент: домашняя страница DED
Установка с практическими рекомендациями и некоторые пояснения: Установка .
Он был использован в довольно интересном исследовании безопасности популярных приложений на рынке (не очень связанном, просто если вам интересно): обзор безопасности приложений для Android
источник
Поскольку
Dheeraj Bhaskar
ответ относительно старый, как и много лет назад.Вот мой последний (2019 год) ответ:
Основная логика
от
dex
доjava sourcecode
, в настоящее время есть два вида решения:One Step
: напрямую конвертироватьdex
вjava sourcecode
Two Step
: сначала преобразоватьdex
вjar
, второй преобразоватьjar
вjava sourcecode
Одношаговое решение:
dex
непосредственно кjava sourcecode
инструменты
Обработать
bin
папке можно увидетьjadx
версию командной строки или GUIjadx-gui
, дважды щелкните для запуска версии GUI:jadx-gui
dex
файлзатем может показать исходный код Java:
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
пример:
Шаг 2:
jar
чтобыjava sourcecode
инструменты
many
код будет декомпилировать ошибкуminor
код декомпилирует ошибкуno
ошибка декомпиляции кодаProcyon
Обработать
Здесь демо
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
для более подробного объяснения, пожалуйста, обратитесь к моей онлайн- книге на китайском языке : 安卓 应用 的 安全 和 破解
источник
dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dex
простоjava.io.IOException: the src file not a .dex or zip file
d2j-dex2jar.bat "D:\android\some_dex_file.dex"
нормально или нет?>d2j-dex2jar.bat file.dex
но это не хорошо. может это из-за того, что мой.dex
файл был скопированdalvik-cache
?dex is copied from dalvik-cache
, должно бытьdex is decompiled from apk
После того, как вы загрузили файл APK, вам нужно выполнить следующие шаги, чтобы получить редактируемый код / документ Java.
источник
С Dedexer вы можете разобрать
.dex
файл в байт-код dalvik (.ddx
).Насколько я знаю, декомпиляция в сторону Java невозможна.
О байт-коде dalvik вы можете прочитать здесь .
источник
Возможен обратный инжиниринг Android . Выполните следующие действия, чтобы получить файл .java из файла apk.
Шаг 1 . Использование dex2jar
dex2jar sampleApp.apk
Шаг 2 . Декомпиляция .jar с использованием JD-GUI
источник
Последние Debian имеют пакет Python
androguard
:Установите соответствующие пакеты:
Декомпилировать файл DEX:
Извлечение
classes.dex
из Apk + Декомпилировать:Apk-файл - это не более, чем Java-архив (JAR), вы можете извлечь файлы из архива через:
источник
Многое изменилось, так как большинство из этих ответов были опубликованы. В настоящее время существует множество простых инструментов с графическим интерфейсом, например:
Лучшее место для их поиска - на форуме разработчиков XDA.
источник
Вы можете попробовать JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ), это идеальный инструмент для декомпиляции DEX.
И да, он также доступен онлайн на (моем: 0) новом сайте: http://www.javadecompilers.com/apk/
источник
Это можно сделать в следующие пять шагов:
Этот драгоценный камень делает эти вещи для вас автоматически, даже установка необходимых инструментов
источник
Самый простой способ декомпилировать андроид приложение , это загрузить приложение под названием ShowJava из playstore. Просто выберите приложение, которое нужно декомпилировать, из списка приложений. Существует три различных декомпилятора, которые вы можете использовать для декомпиляции приложения, а именно:
источник
Если вы не хотите загружать dex2jar, просто используйте
apk_grabber
скрипт python для декомпиляции любого apk в jar-файлы. Затем вы читаете их с помощью jd-gui.источник