Жесткий диск моего ноутбука только что вышел из строя, и я потерял весь исходный код приложения, над которым я работал последние два месяца. Все, что у меня есть, это файл APK, который хранится в моем письме, когда я отправил его другу.
Есть ли способ извлечь мой исходный код из этого файла APK?
android
android-resources
decompiling
apk
Фрэнк Боццо
источник
источник
javac -decompile
, который бы соответствовал рекомендациям SO. Мне кажется, что ответы не по теме , а не вопрос.Ответы:
Простой способ: используйте онлайн-инструмент http://www.javadecompilers.com/apk , загрузите apk и получите исходный код.
Процедура декодирования .apk файлов, пошаговый метод:
Шаг 1:
Создайте новую папку и скопируйте файл .apk, который вы хотите декодировать.
Теперь переименуйте расширение этого файла .apk в .zip (например, переименуйте из filename.apk в filename.zip) и сохраните его. Теперь вы можете получить доступ к файлам classes.dex и т. Д. На этом этапе вы можете видеть графические объекты, но не файлы XML и Java, поэтому продолжайте.
Шаг 2:
Теперь распакуйте этот файл .zip в ту же папку (или NEW FOLDER).
Скачайте dex2jar и распакуйте его в ту же папку (или в NEW FOLDER).
Переместите файл classes.dex в папку dex2jar.
Теперь откройте командную строку и измените каталог на эту папку (или NEW FOLDER). Затем напишите
d2j-dex2jar classes.dex
(для терминала Mac или Ubuntu напишите./d2j-dex2jar.sh classes.dex
) и нажмите Enter. Теперь у вас есть файл classes.dex.dex2jar в той же папке.Загрузите декомпилятор java , дважды щелкните jd-gui, щелкните открытый файл и откройте файл classes.dex.dex2jar из этой папки: теперь вы получаете файлы классов.
Сохраните все эти файлы классов (в jd-gui выберите Файл -> Сохранить все источники) под именем src. На этом этапе вы получаете исходный код Java, но XML-файлы по-прежнему не читаются, поэтому продолжайте.
Шаг 3:
Теперь откройте еще одну новую папку
Поместите в файл .apk, который вы хотите декодировать
Загрузите последнюю версию apktool и окно установки apktool (обе можно скачать по одной и той же ссылке) и поместите их в одну папку
Откройте командное окно
Теперь запустите команду как
apktool if framework-res.apk
(если у вас ее нет, получите ее здесь ) и затемapktool d myApp.apk
(где myApp.apk обозначает имя файла, который вы хотите декодировать)теперь вы получаете папку с файлами в этой папке и можете легко читать xml-файлы apk.
Шаг 4:
Это не какой-либо шаг, просто скопируйте содержимое обеих папок (в данном случае обе новые папки) в одну
и наслаждайтесь исходным кодом ...
источник
framework-res.apk
. Загрузите его отсюдаЭто альтернативное описание - на случай, если кто-то застрянет с описанием выше. Следуйте шагам:
apktool.bat
(илиapktool
для Linux) иapktool_<version>.jar
с http://ibotpeaches.github.io/Apktool/install/apktool.jar
и поместите оба файла в одну папкуcmd.exe
) и перейдите в эту папку; убедитесь, что установлена среда Java (для Linux также проверьте примечания относительно необходимых библиотек)apktool decode [apk file]
Промежуточный результат : файлы ресурсов,
AndroidManifest.xml
Промежуточный результат :
classes.dex
dex2jar-0.0.9.15.zip
из http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=classes.dex
наdex2jar.bat
(или введите<path_to>\dex2jar.bat classes.dex
в поле DOS; для Linuxdex2jar.sh
)Промежуточный результат :
classes_dex2jar.jar
classes_dex2jar.jar
(может быть необязательным в зависимости от используемого декомпилятора)Результат : исходный код
Примечание: нельзя декомпилировать сторонние пакеты; это руководство предназначено для восстановления личного исходного кода только из файла APK; наконец, результирующий код, скорее всего, будет запутан
источник
apktool
возвращаютсяsmali
? Как получитьjava
файл?Хотя вы можете декомпилировать
APK
файл, вы, вероятно, столкнетесь с одной большой проблемой:он не вернет код, который вы написали. Вместо этого он будет возвращать все, что встроено компилятором, с переменными с произвольными именами, а с функциями с произвольными именами. Может потребоваться значительно больше времени, чтобы попытаться декомпилировать и восстановить его в код, который вы имели, чем это будет начинаться заново.
К сожалению, такие вещи убили много проектов.
В будущем, я настоятельно рекомендую изучение системы управления версиями, как CVS , SVN и Git и т.д.
и как это поддержать.
источник
Также в Play Store есть новое приложение, с помощью которого можно декомпилировать apk (системные приложения тоже) и просматривать исходный код прямо на вашем смартфоне. Он сохраняет файлы на вашу SD-карту, чтобы вы могли просматривать их и на своем компьютере. Не требует рута или чего-то еще.
Просто установите и получайте удовольствие. Я думаю, что это самый простой способ декомпилировать приложение.
источник
apktool - лучшая вещь, которую вы можете попробовать. Я сохранил немного XML с ним, но, честно говоря, я не знаю, как это будет работать с кодом .java.
Я бы порекомендовал вам иметь хранилище кода, даже если вы единственный кодер. Я использую Project Locker для своих собственных проектов. Это дает вам бесплатные репозитории SVN и GIT.
источник
В этих двух статьях описывается, как объединить использование
apktool
иdex2jar
получениеAPK
файла и создать проект Eclipse, который может его создать и запустить.В основном вы:
apktool
для получения файлов ресурсов из apkdex2jar
для получения файла JAR, который содержит классы в формате, который понравится Eclipse.JDGui
чтобы просмотреть исходный кодJDGui
, вставьте его в класс внутри Eclipse и измените егоисточник
apktool будет работать. Вам даже не нужно знать хранилище ключей для извлечения исходного кода (что немного страшно). Основным недостатком является то, что источник представлен в формате Smali вместо Java. Другие файлы, такие как icon и main.xml, проходят отлично, хотя, возможно, стоит хотя бы восстановить их. В конечном счете вам, скорее всего, придется переписывать код Java с нуля.
Вы можете найти apktool здесь . Просто скачайте apktool и соответствующий помощник (для Windows, Linux или Mac OS). Я рекомендую использовать такой инструмент, как 7-zip, чтобы распаковать их.
источник
Есть несколько способов сделать это:
Используйте функцию «Профиль или Отладка APK» в Android Studio 3.0.
Это позволяет открывать и изучать APK в Android Studio. Классы декомпилированы в smali. Ресурсы не извлекаются, и такие вещи, как «Перейти к определению», «Найти все ссылки» и отладка, не работают без исходного кода (android studio 3.0 canary 9). Некоторые дополнительные функции smali могут работать с smallidea .
Используйте JADX .
Jadx декомпилирует код в данном APK в исходные файлы Java.
Используйте apktool .
Apktool - это инструмент командной строки, который извлекает ресурсы и декомпилирует код в smali для данного apk. Вы также можете перекомпилировать, используя apktool. Вот пример этого в действии:
источник
Может быть, легко увидеть источник:
В Android студии 2.3
Build -> Analyze APK -> Select the apk that you want to decompile
.Вы увидите его исходный код.
Ссылка для справки:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2
источник
Я покажу вам другой способ декомпиляции файлов .apk .
Вы можете выполнить первые 2 шага из « Пранкуль Гарг ». Так что у вас есть другие возможности:
Шаг 3':
Скачайте "JD-GUI" , это легко найти. Откройте файл .jar в "jd-gui.exe". (Файл> Открыть файл> «нашел ваш .jar файл»). После этой процедуры вы можете сохранить все ресурсы в файле .zip .
Так,
1-й - Вы должны переименовать файл .apk в .zip
2-й - Вы должны декодировать файл .dex (если хотите, декодируйте файл .apk в dex2jar , это возможно)
3-й - Вы должны декодировать файл .jar с помощью JD-GUI.
источник
Ниже онлайн- инструмент:
http://www.javadecompilers.com/apk
он делает ВСЕ одним кликом: декомпилированные файлы .java + ресурсы + xml (в одном файле .zip) с очень хорошим декомпилятором (jadx возвращает код Java в тех местах / функциях, где другие компиляторы возвращают комментарии внутри функции, например «невозможно декомпилировать» или некоторые другие). ассемблер андроид / машинный код)
источник
Этот сайт https://www.apkdecompilers.com/ сделал это автоматически.
Сначала я попробовал сайт, упомянутый в принятом ответе, но у меня это не получилось.
источник
Я лично рекомендую показать Java Android App, чтобы получить исходный код. Вы можете скачать его из игрового магазина или отсюда
источник
Apktool для реверс-инжиниринга сторонних, закрытых, бинарных приложений для Android.
Он может декодировать ресурсы почти до первоначальной формы и восстанавливать их после внесения некоторых изменений.
Это позволяет пошагово отлаживать код smali. Также это облегчает работу с приложением из-за файловой структуры проекта и автоматизации некоторых повторяющихся задач, таких как сборка apk и т. Д.
http://ibotpeaches.github.io/Apktool/
источник
apktool это путь. Онлайн сервис apktool также существует: http://www.javadecompilers.com/apktool
Очевидно, что существуют некоторые ограничения из-за службы «онлайн-характера»: вы можете извлекать и исследовать ресурсы и файл манифеста, но в настоящий момент невозможно перекомпилировать приложение.
Тем не менее, это простой способ «открыть» приложение для Android.
источник
Вы можете попробовать DexPatcher . Он даже интегрируется с Android Studio. Он использует Apktool и Dex2Jar внутри.
Вы можете использовать эти инструменты независимо друг от друга. Apktool декомпилирует apk и извлекает файлы .dex, которые затем можно конвертировать в jar с помощью Dex2Jar. Jar можно декомпилировать с помощью JD-GUI . Вы можете увидеть код Java с помощью этого инструмента. Хотя сходство декомпилированного кода с реальным кодом не может быть гарантировано. На рынке есть несколько продвинутых инструментов обфускации кода , которые портят код, затрудняя его декомпиляцию / понимание. например. Proguard
источник
в зависимости от вашего состояния, если ваш Android APK:
Условие 1: НЕ затвердевать (от Tencent Legu / Qihoo 360 / ...)
Выбор1: с помощью онлайн-сервиса
такие как:
используя www.javadecompilers.com
перейти к:
автоматически декодировать из АПК в исходный код Java
шаги:
upload
apk file + clickRun
+ подождите некоторое время + clickDownload
чтобы получить zip + unzip ->sources/com/{yourCompanyName}/{yourProjectName}
ваш ожидаемый исходный код Java
Choice2: декомпилировать / взломать самостоятельно
Используйте соответствующий инструмент для декомпиляции / взлома самостоятельно:
использовать
jadx
/jadx-gui
конвертироватьapk
вjava sourcecode
скачайте jadx-0.9.0.zip, затем распакуйте в файл
bin/jadx
, затем:jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
sources
иresources
sources/com/{yourCompanyName}/{yourProjectName}
ваше ожиданиеjava sourcecode
jadx-0.9.0/bin/jadx-gui
(Linuxjadx-gui.sh
/ Windowsjadx-gui.bat
)apk
файлsave all
илиsave as Gradle project
например:
Условие 2: закалка (Tencent Legu / Qihoo 360 / ...)
основной метод
3 steps
:apk/app to dex
dex to jar
jar to java src
детальное объяснение:
Шаг 1:
apk/app to dex
использовать инструмент (
FDex2
/ DumpDex) для выгрузки / извлечения (одного или нескольких)dex
файлов из запущенного приложенияшаги:
подготовить среду
root
ред андроидаFDex2
/ DumpDex в XPposed и включить еговыгрузить
dex
из запущенного приложениязапустите,
FDex2
затем нажмите на свое имя apk, чтобы позже включить / захватить dex/data/data/com/yourCompanyName/yourProjectName
dex
файловШаг 2:
dex to jar
использовать инструмент (
dex2jar
) конвертировать (определенный, содержащий логику приложения)dex
файл вjar
файлскачать dex2jar получил dex-tools-2.1-SNAPSHOT.zip , распаковать получил
dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh
, затемsh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f your_dex_name.dex
например:
Шаг 3:
jar to java src
используйте один из инструментов:
преобразовать
jar
вjava src
для преобразования из jar в java src:
Jadx
>Procyon
>CRF
>>JD-GUI
поэтому рекомендуем использовать:
Jadx
/jadx-gui
шаги:
jadx-gui
dex
файлFile
->save all
например:
экспортированный источник Java:
Более подробное объяснение можно посмотреть в моей онлайн-книге китайского учебника:
источник
Студия Android предлагает вам проанализировать любой файл apk.
1 - В меню сборки выберите параметр анализировать apk и выберите файл apk. 2 - В результате вы получите файл classes.dex и другие файлы. 3 - Нажмите на classes.dex, который предоставит вам список папок, пакетов, библиотек и файлов. 4 - Из настроек android studio установите плагин под названием «Dex to Jar» 5 - нажмите на любой файл активности вашего извлеченного проекта и выберите dex to jar в меню сборки.
Это приведет к фактическому коду вашего Java-файла.
Приветствия.
источник
Самым простым способом является использование Apk OneClick Decompiler. Это пакет инструментов для декомпиляции и дизассемблирования APK (пакетов Android).
ФУНКЦИИ
ТРЕБОВАНИЯ
Java Runtime Environment (JRE) должна быть установлена.
Вы можете скачать его по этой ссылке Apk OneClick Decompiler
Наслаждайся этим.
источник
Я нашел следующее как самый простой метод:
источник
Для этого есть приложение, которое обычно занимает всего несколько кликов, и все готово. https://github.com/Nuvolect/DeepDive-Android
После этого вы можете просмотреть исходный код, загрузить его на другой компьютер с elFinder или выполнить поиск по нему с помощью Lucene.
В дополнение к Jadx есть декомпиляторы CFR и Fernflower.
источник
Я несколько дней сводил себя с ума, пытаясь заставить dex2jar работать на ноутбуке fedora 31 против apk, который просто не собирался работать. Этот скрипт на Python 3 справился с задачей за несколько минут, а установка jd-gui сделала файлы классов удобочитаемыми.
http://java-decompiler.github.io/
https://github.com/Storyyeller/enjarify
конкретно вот что я побежал:
Теперь нужно получить следующее, чтобы получить файлы классов:
И для запуска jd-gui:
Тогда просто откройте ваши файлы классов!
источник
Я разработал Инструмент - Code Analyzer, он работает на iPhone / iPad / Mac, для анализа файлов Java / Android, https://decompile.io
источник
Используйте этот инструмент http://www.javadecompilers.com/
Но недавно на рынке появилась новая волна декомпиляторов: Procyon, CFR, JD, Fernflower, Krakatau, Candle.
Вот список декомпиляторов, представленных на этом сайте:
CFR - бесплатно, исходный код недоступен, http://www.benf.org/other/cfr/ Автор: Ли Бенфилд
Очень хорошо обновленный декомпилятор! CFR способен декомпилировать современные функции Java - модули Java 9, лямбды Java 8, строковые коммутаторы Java 7 и т. Д. Он даже сможет превратить файлы классов из других языков JVM обратно в Java!
JD - бесплатно только для некоммерческого использования, http://jd.benow.ca/ Автор: Эммануэль Дюпуй
Обновлено в 2015 году. Имеет собственный визуальный интерфейс и плагины для Eclipse и IntelliJ. Написано на C ++, поэтому очень быстро. Поддерживает Java 5.
Procyon - с открытым исходным кодом, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler Автор: Майк Штробель
Fernflower - с открытым исходным кодом, https://github.com/fesh0r/fernflower Автор: Егор Ушаков
Обновлено в 2015 году. Очень перспективный аналитический декомпилятор Java, теперь становится неотъемлемой частью IntelliJ 14. ( https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler ) Поддерживает Java до версии 6 (Аннотации, дженерики, перечисления)
JAD - дано здесь только по историческим причинам. Бесплатно, исходный код недоступен, jad загрузить зеркало Автор: Павел Кузнецов
источник