Есть ли способ получить исходный код из файла APK?

Жесткий диск на моем ноутбуке просто сломался, и я потерял весь исходный код приложения, над которым я работал последние два месяца. Все, что у меня есть, - это APK-файл, который хранится в моей электронной почте с того момента, как я отправил его другу.

Есть ли способ извлечь мой исходный код из этого APK-файла?


person Frank Bozzo    schedule 29.08.2010    source источник
comment
К вашему сведению. здесь.   -  person edwin    schedule 10.02.2014
comment
Означает ли это, что мы можем получить исходный код приложений стоимостью в миллион долларов, таких как Whatsapp или Facebook? Это все с открытым исходным кодом?   -  person Faizan    schedule 10.01.2015
comment
@Faizan ты слышал о Proguard ??   -  person Vishwajit Palankar    schedule 09.06.2015
comment
@SwiftArchitect - он не удален, он все еще здесь для справки. В чем проблема с его закрытием?   -  person dtech    schedule 12.02.2016
comment
Формулировка вопроса действительно содержит нерелевантные лакомые кусочки жизненных историй и, как таковые, может быть истолкована как рекомендация инструмента. Тем не менее, ответ потенциально мог быть javac -decompile, что тогда соответствовало бы руководящим принципам SO. Мне кажется, что ответы не по теме, а не вопрос.   -  person SwiftArchitect    schedule 12.02.2016
comment
Попробуйте онлайн-декомпиляторы .. для получения дополнительной информации - stackoverflow.com/a/27981520/3879847   -  person Ranjith Kumar    schedule 11.03.2016
comment
в этой статье они объясняют, как они реконструируют Pokemon Go.   -  person anders    schedule 17.08.2016
comment
Возможный дубликат Можно ли декомпилировать файл Android .apk?   -  person ishandutta2007    schedule 20.09.2017


Ответы (28)


Простой способ: используйте онлайн-инструмент https://www.decompiler.com/, загрузите apk и получите исходный код.


Порядок расшифровки файлов .apk, пошаговый метод:

Шаг 1:

  1. Создайте новую папку и скопируйте файл .apk, который хотите декодировать.

  2. Теперь переименуйте расширение этого файла .apk в .zip (например, переименуйте из filename.apk в filename.zip) и сохраните его. Теперь вы можете получить доступ к файлам classes.dex и т. Д. На этом этапе вы можете видеть чертежи, но не файлы xml и java, так что продолжайте.

Шаг 2:

  1. Теперь извлеките этот файл .zip в ту же папку (или в НОВУЮ ПАПКУ).

  2. Загрузите dex2jar и распакуйте его в ту же папку (или НОВУЮ ПАПКУ).

  3. Переместите файл classes.dex в папку dex2jar.

  4. Теперь откройте командную строку и смените каталог на эту папку (или НОВУЮ ПАПКУ). Затем напишите d2j-dex2jar classes.dex (для терминала Mac или ubuntu напишите ./d2j-dex2jar.sh classes.dex) и нажмите Enter. Теперь у вас есть файл classes.dex.dex2jar в той же папке.

  5. Загрузите декомпилятор java, дважды щелкните jd-gui, щелкните открытый файл и откройте файл classes.dex.dex2jar из этой папки: теперь вы получаете файлы классов.

  6. Сохраните все эти файлы классов (в jd-gui щелкните File - ›Save All Sources) по имени src. На этом этапе вы получаете исходный код java, но файлы .xml все еще не читаются, поэтому продолжайте.

Шаг 3:

Теперь откройте еще одну новую папку

  1. Поместите файл .apk, который вы хотите декодировать

  2. Загрузите последнюю версию apktool И окно установки apktool (оба могут быть загруженным по той же ссылке) и поместите их в ту же папку

  3. Открыть командное окно

  4. Теперь запустите команду, например apktool if framework-res.apk (если у вас ее нет, получите здесь), а затем

  5. apktool d myApp.apk (где myApp.apk обозначает имя файла, которое вы хотите декодировать)

теперь у вас есть папка с файлами в этой папке, и вы можете легко читать xml-файлы apk.

Шаг 4:

Это не какой-то шаг, просто скопируйте содержимое обеих папок (в данном случае обеих новых папок) в одну.

и наслаждайтесь исходным кодом ...

person Community    schedule 21.05.2011
comment
Большое спасибо, но у меня возникла проблема после выполнения 3-го шага, все файлы приходят в формате smali, как я могу его прочитать. - person Amit Thaper; 19.07.2011
comment
@prankulgarg, в пункте 5 шага 3 я получаю следующую ошибку: Невозможно получить доступ к jarfile E: \ apktojava \ testt \\ apktool.jar - person ; 30.01.2012
comment
got the problem of jd-gui.exe. Возникла ошибка в приложении. Приложение будет закрыто. Приносим свои извинения за неудобства. при сохранении всего исходного кода java .. - person kamal_tech_view; 06.03.2012
comment
Я выполнил эти шаги, но имя файла java - d c b .... возможно настоящее имя файла java ...? - person Android; 13.03.2012
comment
привет, я попробовал этот шаг, но я не получаю файл classes.dex.dex2jar. ты можешь мне помочь, пожалуйста? - person Hasmukh; 15.03.2012
comment
Итак, где взять файл framework-res.apk .. Я не могу найти надежную копию: | - person Salman von Abbas; 23.07.2012
comment
Второй файл java.decompiler.free.fr/?q=jdgui недоступен на эта ссылка .. что мне делать? - person Sumit; 18.08.2012
comment
Как это сделать в Ubuntu, я не понял, у меня возникла проблема, может ли кто-нибудь помочь? - person Yog Guru; 31.08.2012
comment
@prankulgarg где мы находим framework-res.apk? ? Гугл ничего не придумывает ?? - person Sir; 23.09.2012
comment
dex2jar не распознается как внутренняя или внешняя команда. Как я могу это решить? - person Anil Kocabiyik; 04.02.2013
comment
@ user1451549, если вы используете Linux, используйте ./dex2jar - person Juned; 04.02.2013
comment
У меня внутренняя ошибка для основного класса ... есть предложения? - person Vnge; 27.02.2013
comment
во время прохождения второго шага я получил dex2jar не распознается я использую wondows .. любая идея .. ?? - person elsa; 22.03.2013
comment
Вместо того, чтобы писать dex2jar classes.dex в cmd, попробуйте d2j-dex2jar classes.dex. Поскольку dex2jar classes.dex этот cmd устарел. - person Umesh; 12.04.2013
comment
Я не могу извлечь файл .aidl и интерфейсы, включенные в проект? Есть ли другой способ для этого? - person Shraddha Shravagi; 15.04.2013
comment
в моем случае это просто бесполезно. Также пробовал все предложения в комментариях. Зря потратил кучу времени. Я получаю ошибки «./dex2jar: нет такого файла или каталога» и «d2j-dex2jar: команда не найдена». - person Shirish Herwade; 11.09.2013
comment
Если вы видите такие имена классов, как «a», «b», «c», «d», вы пытаетесь реконструировать чужое приложение ProGuarded. Удачи с этим. - person Jacob Tabak; 24.02.2014
comment
Для шага 3 пункта 5 ошибка: невозможно получить доступ к jarfile. Я нашел это stackoverflow.com/a/15336703 / 1778834 - person yashhy; 02.03.2014
comment
Я не могу скачать файл framework-res.apk на 4shared.com. Требуется надоедливый менеджер загрузок. - person Alston; 18.06.2014
comment
Извлеките dex2jar-0.0.9.8.zip и скопируйте classes.dex, в котором используется команда ./d2j-dex2jar.sh classes.dex вместо dex2jar classes.dex, потому что этот dex2jar classes.dex устарел - person sandeepmaaram; 28.07.2014
comment
Для тех, кто не может найти framework-res.apk. Загрузите его здесь - person atulkhatri; 31.07.2014
comment
На шаге 2 после создания src, когда я пытаюсь скомпилировать большинство исходных файлов java, отображается ошибка времени компиляции, которая не может быть разрешена для типа. - person Ajay Takur; 19.12.2014
comment
Ошибка команды шага 2, из документации (code.google.com/p/dex2jar/wiki/ ModifyApkWithDexTool) я успешно запустил это: # d2j-dex2jar.sh -f -o test_apk-debug_dex2jar.jar test_apk-debug.apk - person Asad kamran; 04.01.2015
comment
в моем случае проблема на шаге 4 dex2jar: файл или папка не найдены. Разрешение: 1. введите bash в командной строке 2. откроется оболочка bash 3. перейдите в папку в dex2jar и запустите cmd: bash d2j-dex2jar.sh classes.dex, и файл jar будет сгенерирован - person ; 06.01.2015
comment
Для этих 5-го шага 3-го шага: apktoolJARfile загрузите здесь jar файл. Поскольку в командной строке указано, что невозможно получить доступ к файлу jar C: \ .... Этот файл jar находится по ссылке. Остальные шаги такие же. - person Jaky71; 08.01.2015
comment
не может восстановить файлы XML, получаю эту ошибку при запуске; apktool if framework-res.apk: Исключение в основном потоке brut.androlib.AndrolibException: java.io.FileNotFound Исключение: framework-res.apk (Система не может найти указанный файл) в brut.androlib.res.AndrolibResources.installFramework ( AndrolibResource s.java:406) на brut.androlib.Androlib.installFramework (Androlib.java:365) на brut.apktool.Main.cmdInstallFramework (Main.java:185) на brut.apktool.Main.main (Main.java: 61) ... [усечено] - person Daniel Dut; 03.02.2015
comment
Эта ссылка dex2jar кажется неполной ... Она не содержит dex2jar.sh - person Narendra Singh; 06.05.2015
comment
@DroidWormNarendra вы нашли решение? Я тоже не могу этого найти. - person offset; 10.05.2015
comment
@DroidWormNarendra Может быть, это вам поможет: dex2jar.googlecode.com/files/dex2jar-0.0 .9.15.zip - person offset; 10.05.2015
comment
Я просто хочу добавить один класс после этого ... как мне снова создать apk без использования Eclipse или другой IDE. - person inquisitive; 19.05.2015
comment
Для людей на Mac, если вы получаете отказ в разрешении при запуске d2j-dex2jar.sh, поместите sudo bash перед ним, а внутри файла в последней строке также добавьте sudo bash впереди - person ModDL; 22.06.2015
comment
.d2j-dex2jar.sh недоступен в каталоге извлечения ..! То же самое, что я пробовал с dex2jar, но все равно исполняемого файла там нет. предложите мне, если что-то мне здесь не хватает - person CoDe; 01.07.2015
comment
есть ли способ управлять кодом на самом деле я не понимаю, как управлять и делать правильный проект, у меня есть файлы java и xml - person Sanjeev Sangral; 04.08.2015
comment
Привет! Могу также добавить, что есть современная альтернатива этому маршруту APKTool- ›dex2jar-› JD-GUI! Просто попробуйте декомпилятор APK с открытым исходным кодом и декомпилятор DEX под названием Jadx: sourceforge.net/projects/jadx/files Здесь также есть онлайн-версия: javadecompilers.com/apk - person Andrew Rukin; 25.08.2015
comment
убедитесь, что у вас достаточно разрешений для sh с терминала. Таким образом, если вы получаете отказ в разрешении на ошибку при выполнении sh, используйте следующее: chmod + x d2j-dex2jar.sh chmod + x d2j_invoke.sh, а затем запустите ./d2j-dex2jar.sh classes.dex - person codebased; 15.09.2015
comment
Тем, кто не нашел d2j-dex2jar.sh, скачайте dex2jar отсюда: dex2jar .googlecode.com / files / dex2jar-0.0.9.15.zip - person Reaz Murshed; 20.10.2015
comment
После запуска ./d2j-dex2jar.sh classes.dex я получил следующее: -bash: ./d2j-dex2jar.sh: Permission denied Решение: sudo chmod + x d2j-dex2jar.sh - person codebased; 24.11.2015
comment
после всех этих шагов вы можете получить закодированные java-коды, пакеты и т. д. (на уровне сложности pro). и ваши усилия будут в духе. если у apk есть безопасность как progaurd. - person Devendra Singh; 23.12.2015
comment
Для людей, застрявших на шаге 2: 4 скачайте эту версию, и она решит проблему: sourceforge.net/projects/dex2jar/files/dex2jar-2.0.zip/download мне это удалось. @delive - person siriuseteor77; 29.09.2016
comment
Вот последнее место для получения d2j-d2x2jar.sh в файле dex-tools * .zip: github .com / pxb1988 / dex2jar / Release - person ywu; 15.02.2017
comment
Если вы получаете неизвестную командную ошибку в Windows, вам необходимо запустить cmd.exe от имени администратора. - person d4c0d312; 19.03.2017
comment
Для будущих читателей стоит отметить, что веб-сайт, предложенный в ответе, дал точно такой же результат, как и остальная часть ответа - так что пл. не тратьте время на попытки обоих. Также стоит отметить, что код заполнен случайными значениями, такими как findViewById (16908290) и class C07461, и поэтому в основном непригоден для использования. Есть ли способ получить исходный код в точности так, как он был закодирован из этих случайных значений? Спасибо. - person Zac; 02.06.2017
comment
Можно ли полностью создать XML из любого файла apk? Сохраняете все те же функции? - person Lealo; 27.07.2017
comment
JD-GUI сейчас немного устарел. Попробуйте некоторые инструменты командной строки, такие как CFR или Krakatau, для более новых версий java. - person toster-cx; 04.10.2017
comment
Было бы очень хорошо, если бы вы могли научить нас, как вернуть ключевой файл, я потерял один из ключей моего приложения и не могу дать какое-либо обновление для этого приложения. - person Reza Hamzehei; 13.10.2017
comment
Пользователи Ubuntu: переместите файлы apktool и apktool.jar в папку / usr / local / bin. Откройте путь к терминалу, указывающий на тип расположения папки apk apktool d ‹your-app-name.apk› - person KH_AJU; 13.11.2017
comment
Я декомпилировал apk несколькими способами, но всегда получаю только папку com.android.tools, мой пакет исходного кода отсутствует. как решить такую ​​проблему? - person Sharad Kale; 17.11.2017
comment
Я пробовал все методы, но даже с простым helloworld, хотя он декомпилировал его в java. Тем не менее, попытка открыть проект в студии Android и скомпилировать его обратно в apk не удается по многим причинам (файлы дублирования и т. Д.). Есть ли какой-либо метод, который создает java, который можно скомпилировать обратно в apk? - person ransh; 28.11.2017
comment
Я получаю это: C:\Windows>apktool if framework-res.apk S: WARNING: Could not write to (C:\Users\kbs\AppData\Local\apktool\framework), u sing C:\Users\kbs\AppData\Local\Temp\ instead... S: Please be aware this is a volatile directory and frameworks could go missing, please utilize --frame-path if the default storage directory is unavailable I: Framework installed to: C:\Users\kbs\AppData\Local\Temp\1.apk - person Tushar Gogna; 28.06.2018
comment
Я получил java.nio.file.NoSuchFileException: classes.dex, но я поместил classes2.dex в ту же папку, что и d2j-dex2jar, и запустил CMD из этой папки. - person Liggliluff; 21.10.2018
comment
ПРЕДУПРЕЖДЕНИЕ: не удалось записать в (C: \ Users \ ‹user-name› \ AppData \ Local \ apktool \ framework), используя вместо этого C: \ Users \ ‹user-name› \ AppData \ Local \ Temp \ ... S : Имейте в виду, что это изменчивый каталог, и фреймворки могут исчезнуть, используйте --frame-path, если каталог хранилища по умолчанию недоступен - - person MindRoasterMir; 10.04.2019
comment
apktool, если framework-res.apk --frame-path c: \ get-xml \ - person MindRoasterMir; 10.04.2019
comment
Шаг 3 сделал слово java в расширении файлов во втором модуле моего приложения smali. Даже сама папка java стала smali. Как мне это исправить, не переименовывая их по очереди? - person rminaj; 24.07.2019
comment
Я пробовал ./d2j-dex2jar.sh classes.dex , но получил Permission denied Я использую linux - person Kousalya; 28.02.2020
comment
Вопрос: что делать, если у меня есть classes.dex, classes2.dex и classes3.dex? Я все три декомпилирую? - person Sampgun; 05.04.2020
comment
Я получаю. Система не может найти путь, указанный при запуске cmd - apktool, если framework-res.apk - person Palash Agrawal; 24.04.2020
comment
Для тех, кто получает сообщение об ошибке неподдерживаемой версии при запуске dex2jar, вы можете получить эту версию, которая работает без проблем: github.com/DexPatcher/dex2jar/releases/download/ - person rkachach; 28.04.2020
comment
@Kousalya, напишите, пожалуйста, такую ​​команду sudo chmod +x ./d2j-dex2jar.sh classes.dex - person Kirtikumar A.; 19.07.2020
comment
У меня есть весь исходный код, но все имена классов зашифрованы непонятными для человека словами вроде Wwwwwwwwwwwwwwwww :) - person Ergash Masharipov; 07.12.2020
comment
если кому-то отказано в разрешении: ./d2j-dex2jar.sh на Macbook, попробуйте sudo chmod + x ./d2j-dex2jar.sh в терминале, затем повторите попытку ./d2j-dex2jar.sh classes.dex - person Basant; 10.01.2021
comment
Я использовал команду ./d2j-dex2jar.sh classes.dex, она не показывает такого файла или папки. - person Hammad; 22.05.2021

Это альтернативное описание - на случай, если кто-то застрял с описанием выше. Следуйте шагам:

  1. загрузите apktool.bat (или _ 2_ для Linux) и _ 3_ из http://ibotpeaches.github.io/Apktool/install/
  2. rename the jar file from above to apktool.jar and put both files in the same folder

  3. откройте окно dos (cmd.exe) и перейдите в эту папку; убедитесь, что Java Environment установлена ​​(для Linux также проверьте примечания относительно необходимых библиотек)
  4. Start: apktool decode [apk file]

    Intermediate result: resource files, AndroidManifest.xml

  5. unzip APK file with an unpacker of your choice

    Intermediate result: classes.dex

  6. загрузите и извлеките dex2jar-0.0.9.15.zip из http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=
  7. drag and drop classes.dex onto dex2jar.bat (or enter <path_to>\dex2jar.bat classes.dex in a DOS box; for Linux use dex2jar.sh)

    Intermediate result: classes_dex2jar.jar

  8. распаковать classes_dex2jar.jar (может быть необязательным в зависимости от используемого декомпилятора)
  9. decompile your class files (e.g. with JD-GUI or DJ Decompiler)

    Result: source code

Note: it is not allowed to decompile third party packages; this guide is intended to recover personal source code from an APK file only; finally, the resulting code will most likely be obfuscated

person Trinimon    schedule 13.03.2013
comment
Могу также добавить, что есть современная альтернатива этому маршруту APKTool- ›dex2jar-› JD-GUI! Просто попробуйте декомпилятор APK с открытым исходным кодом и декомпилятор DEX под названием Jadx: sourceforge.net/projects/jadx/files Здесь также есть онлайн-версия: javadecompilers.com/apk - person Andrew Rukin; 08.09.2015
comment
Разрешено (читай: законно) декомпилировать любой файл APK. См. Следующий вопрос: stackoverflow.com/questions/9674557/ - person Rakete1111; 30.04.2017
comment
Почему эти apktool возвращают smali файлы? Как получить java файл? - person rminaj; 24.07.2019
comment
@AndrewRukin Эта ссылка перенаправляет на страницу dex2jar на sourceforge. - person user202729; 10.12.2020

Хотя вы можете декомпилировать свой APK файл, вы, скорее всего, столкнетесь с одной большой проблемой:

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

К сожалению, подобные вещи убили много проектов.
На будущее я настоятельно рекомендую изучить систему управления версиями, такую ​​как CVS, SVN и git < / strong> и т. д.

и как сделать резервную копию.

person Ryan Gooler    schedule 29.08.2010
comment
Также поможет такой сервис, как Dropbox. - person Jeremy Logan; 29.08.2010
comment
и всегда есть способ записать компакт-диски - person GorvGoyl; 20.02.2019

В Play Store также есть новое приложение, с помощью которого можно декомпилируйте apk (системные приложения тоже) и просмотрите исходный код прямо на вашем смартфоне. Он сохраняет файлы на SD-карту, так что вы также можете просматривать их на своем компьютере. Не требует рута или чего-то еще.

Просто установите и получайте удовольствие. Я считаю, что это самый простой способ декомпилировать приложение.

person Cilenco    schedule 11.01.2014
comment
@MidhunVijayakumar Не могли бы вы преобразовать apk в исходный код, используя это? - person Sajeev; 08.06.2019

apktool - лучшее, что вы можете попробовать. Я сохранил с ним немного xml, но, честно говоря, я не знаю, как он будет работать с кодом .java.

Я бы порекомендовал вам иметь репозиторий кода, даже если вы единственный программист. Я использую Project Locker для своих собственных проектов. Это дает вам бесплатные репозитории svn и git.

person Macarse    schedule 29.08.2010
comment
Вы найдете apktool незаменимым, если хотите извлекать ресурсы (например, изображения из приложения Android. На самом деле, у этого инструмента вообще нет конкурентов!) Онлайн-версия apktool доступна здесь: www.javadecompilers.com/apktool - person Andrew Rukin; 01.07.2017

В этих двух статьях описывается, как совместить использование apktool и dex2jar, чтобы взять APK файл и создать проект Eclipse, который может его собрать и запустить.

http://blog.inyourbits.com/2012/11/exnding-existing-android-applications.html

http://blog.inyourbits.com/2012/12/exnding-existing-android-applications.html

В основном вы:

  1. Используйте apktool, чтобы получить файлы ресурсов из apk
  2. Используйте dex2jar, чтобы получить файл jar, содержащий классы в формате, который понравится Eclipse.
  3. Создайте проект Eclipse, укажите его на файлы ресурсов и новый файл jar
  4. Откройте файл jar с помощью утилиты zip и удалите существующие ресурсы.
  5. Откройте файл jar с помощью JDGui, чтобы просмотреть исходный код.
  6. Возьмите любой нужный вам исходный код из JDGui, вставьте его в класс внутри Eclipse и измените его.
  7. Удалите этот класс из файла jar (чтобы один и тот же класс не определялся несколько раз)
  8. Запустить его.
person Tom Hennen    schedule 06.12.2012
comment
Я знаю, что на этот вопрос все еще есть ответ, я хотел бы передать информацию: есть онлайн-декомпилятор для android apks decompileandroid.com Загрузите apk с локального компьютера, подождите немного, загрузите исходный код в формате zip. - person Snehal Masne; 15.06.2014
comment
Звучит хорошо. Кроме того, на сайте декомпиляции Android есть копия всего вашего исходного кода! Умный! - person DDSports; 12.04.2015
comment
Один вопрос, у меня декомпилирован apk, но в jd gui я не знаю, есть ли настоящие классы java, знаете ли вы, если apk декомпилирован, есть ли настоящие классы Java? - person ; 21.06.2018

apktool будет работать. Вам даже не нужно знать хранилище ключей, чтобы извлечь исходный код (что немного пугает). Основным недостатком является то, что исходный код представлен в формате Smali вместо Java. Однако другие файлы, такие как icon и main.xml, проходят отлично, и, возможно, стоит потратить время, по крайней мере, на их восстановление. В конечном итоге вам, скорее всего, придется переписать свой Java-код с нуля.

Вы можете найти apktool здесь. Просто скачайте apktool и соответствующий помощник (для Windows, Linux или Mac OS). Я рекомендую использовать такой инструмент, как 7-zip, чтобы распаковать их.

person Ryan Berger    schedule 29.08.2010

Сделать это можно несколькими способами:

  1. Используйте функцию «Профиль или отладка APK» в Android Studio 3.0.

    Он позволяет открывать и исследовать APK-файлы в Android Studio. Классы декомпилированы в смали. Ресурсы не извлекаются, и такие вещи, как «Перейти к определению», «Найти все ссылки» и отладка не работают без исходного кода (android studio 3.0 canary 9). Некоторые дополнительные функции smali могут работать с smalidea.

    android-studio

    select-file

    code

  2. Используйте jadx.

    Jadx декомпилирует код данного APK в исходные файлы java.

    jdax-img

  3. Используйте apktool.

    Apktool - это инструмент командной строки, который извлекает ресурсы и декомпилирует код в smali для данного apk. Вы также можете перекомпилировать с помощью apktool. Вот пример этого в действии:

    $ apktool d test.apk
    I: Using Apktool 2.2.4 on test.apk
    I: Loading resource table...
    I: Decoding AndroidManifest.xml with resources...
    I: Loading resource table from file: 1.apk
    I: Regular manifest package...
    I: Decoding file-resources...
    I: Decoding values */* XMLs...
    I: Baksmaling classes.dex...
    I: Copying assets and libs...
    I: Copying unknown files...
    I: Copying original files...
    $ apktool b test
    I: Using Apktool 2.2.4 on test
    I: Checking whether sources has changed...
    I: Smaling smali folder into classes.dex...
    I: Checking whether resources has changed...
    I: Building resources...
    I: Building apk file...
    I: Copying unknown files/dir...
    
person 0xcaff    schedule 11.08.2017
comment
Я пробовал jadx, но даже с простым helloworld, хотя он декомпилирует его в java. Тем не менее, попытка открыть проект в студии Android и скомпилировать его обратно в apk не удается по многим причинам (файлы дублирования и т. Д.). Есть ли какой-либо метод, который создает java, который можно скомпилировать обратно в apk? - person ransh; 28.11.2017
comment
@ransh Обычно я использую jadx для чтения кода, а затем apktool для изменения кода. apktool не создает java, но позволяет перекомпилировать. - person 0xcaff; 29.11.2017
comment
0xcaff, спасибо за разъяснения. теперь это имеет смысл. Из-за попытки скомпилировать декомпилированную java в студии Android не работало. - person ransh; 29.11.2017

Может быть, проще всего увидеть источник:

В Android Studio 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

person SKK    schedule 25.05.2017
comment
В нем перечислены классы и методы, но не указан исходный код. - person WSS; 10.09.2017
comment
Вы можете получить указанные выше файлы, только изменив .apk на .zip. - person M. Usman Khan; 25.09.2017

Ниже инструмента ОНЛАЙН:

http://www.javadecompilers.com/apk

он делает ВСЕ одним щелчком мыши: декомпилировал файлы .java + ресурсы + xml (в одном файле .zip) с очень хорошим декомпилятором (jadx возвращает код Java в местах / функциях, где другие компиляторы возвращают комментарии внутри функции, например "невозможно декомпилировать" или какой-то ассемблер / машинный код Android)

person Kamil Kiełczewski    schedule 10.06.2017
comment
да, это здорово, но вместо имен функций он изменил все имена функций на CS1001 и так далее. Итак, как их распознать. и еще кое-что: можем ли мы использовать этот декомпилированный apk напрямую в качестве проекта студии Android. Будет ли он работать? - person Zia Ur Rahman; 27.02.2018
comment
то с какой целью мы используем для декомпиляции некоторых apk, если мы не можем использовать их функции в наших приложениях. - person Zia Ur Rahman; 27.02.2018
comment
@ZiaUrRahman Я не знаю. Однако в моем случае я декомпилирую код для анализа алгоритма. Вы проверяете, может ли декомпилированный код из этого инструмента быть скомпилирован студией Android полностью автоматически - или требуется некоторая обработка человеком? - person Kamil Kiełczewski; 27.02.2018
comment
Я импортировал декомпилированный проект в студию Android, но там нет градиента, и в проекте много файлов, но я не понял его, пока мы его не запустили. Просто не сработало. Мне нужно сделать декомпилированный проект полностью функциональным в студии Android, а затем получить некоторые основные функции некоторых из них, а затем я хочу использовать / встроить его в свой собственный проект. Так есть ли способ, как это сделать? - person Zia Ur Rahman; 27.02.2018

Этот сайт https://www.apkdecompilers.com/ сделал это автоматически.

Сначала я попробовал сайт, упомянутый в принятом ответе, но у меня это не сработало.

person M. Usman Khan    schedule 11.09.2017
comment
Я не смог получить исходный код Java ... он выглядит как прикрепленный файл и .. - person iman kazemayni; 17.09.2017
comment
@imankazemayni по ссылке выше, перейдите к файлу APK и нажмите «Декомпилировать APK». Это займет некоторое время, и затем он должен предоставить вам исходный код, если код не зашифрован. - person M. Usman Khan; 17.09.2017
comment
знаете ли вы, влияет ли multidex на шифрование? - person iman kazemayni; 19.09.2017

Я лично рекомендую Показать приложение Java для Android, чтобы получить исходный код. Вы можете скачать его в магазине игр или здесь

person Codelover    schedule 04.10.2017
comment
В основном онлайн-компиляторы не работают, но это приложение работает. Спасибо - person Sunil; 10.04.2019

Я покажу вам другой способ декомпиляции файлов .apk.

Вы можете выполнить первые 2 шага из "prankul garg". Итак, у вас есть другие возможности:

Шаг 3 ':

Загрузите "JD-GUI", его легко найти. Откройте файл .jar в "jd-gui.exe". (Файл> Открыть файл> 'нашел ваш файл .jar'). После этой процедуры вы можете сохранить все ресурсы в файл .zip.

So,

1-й. Вам необходимо переименовать файл .apk в .zip.

2-й - вы должны декодировать файл .dex (если хотите, декодируйте файл .apk в dex2jar, это возможно)

3-й - вам необходимо декодировать файл .jar с помощью JD-GUI.

person Franklin Hirata    schedule 25.02.2013
comment
Что дает этот ответ такого, чего нет у других? - person Jørgen R; 25.02.2013
comment
Вам действительно не нужно переименовывать его в zip. Я мог открыть файл apk напрямую с помощью 7-zip. - person miva2; 27.03.2015

Apktool для обратного проектирования сторонних закрытых бинарных приложений Android.

Он может декодировать ресурсы до почти первоначальной формы и восстанавливать их после внесения некоторых изменений.

Это дает возможность пошагово отлаживать небольшой код. Также это упрощает работу с приложением из-за проектной файловой структуры и автоматизации некоторых повторяющихся задач, таких как создание apk и т. Д.

http://ibotpeaches.github.io/Apktool/

person Biswajit Karmakar    schedule 15.05.2016

apktool - это ТОЧНО. Также существует онлайн-сервис apktool: http://www.javadecompilers.com/apktool

Некоторые ограничения, очевидно, существуют из-за «онлайн-характера» службы: вы можете извлекать и исследовать ресурсы и файл манифеста, но в настоящий момент невозможно перекомпилировать приложение.

Тем не менее, это простой способ «открыть» приложение для Android.

person Andrew Rukin    schedule 11.07.2017

Вы можете попробовать DexPatcher. Он даже интегрируется с Android Studio. Он использует Apktool и Dex2Jar для внутреннего использования.
Вы также можете использовать эти инструменты независимо. Apktool декомпилирует apk и извлекает файлы .dex, которые в дальнейшем можно преобразовать в jar с помощью Dex2Jar. Jar можно декомпилировать с помощью JD-GUI. Вы можете увидеть код Java с помощью этого инструмента. Хотя сходство декомпилированного кода с реальным кодом не может быть гарантировано. На рынке доступны некоторые расширенные инструменты обфускации кода, которые портят код. чтобы было сложно декомпилировать / понять. например. Proguard

person Lakshmikant Deshpande    schedule 16.11.2017
comment
Здравствуйте, как использовать DexPatcher с Android Studio? - person ravi152; 23.01.2019
comment
Не могу все объяснить в комментариях. Google - ваш друг :) Также есть несколько хороших руководств по YouTube. - person Lakshmikant Deshpande; 20.02.2019

в зависимости от вашего состояния, если ваш apk для Android:

Условие 1: НЕ затвердевать (Tencent Legu / Qihoo 360 / ...)

Вариант 1: использование онлайн-сервиса

Такие как:

используя www.javadecompilers.com

перейти к:

для автоматического декодирования из apk в исходный код Java

шаги:

upload apk файл + щелкните Run + подождите некоторое время + щелкните Download, чтобы получить zip + распаковать ->

sources/com/{yourCompanyName}/{yourProjectName}

ваш ожидаемый исходный код Java

Вариант 2: самостоятельно декомпилировать / взломать

используйте соответствующий инструмент для декомпиляции / взлома самостоятельно:

использовать _5 _ / _ 6_ преобразовать apk в java sourcecode

загрузите jadx-0.9.0.zip затем разархивируйте, чтобы получить bin/jadx, затем:

  • command line mode:
    • in terminal run: jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
    • output_folder will show decoded sources and resources
      • sources/com/{yourCompanyName}/{yourProjectName} is your expected java sourcecode
  • GUI mode
    • double click to run jadx-0.9.0/bin/jadx-gui (Linux's jadx-gui.sh / Windows's jadx-gui.bat)
    • открыть apk файл
    • он будет автоматически декодировать → увидеть ожидаемый исходный код Java
    • save all or save as Gradle project

eg:

Condition2: закалка (Tencent Legu / Qihoo 360 / ...)

основной метод 3 steps:

  1. apk/app to dex
  2. dex to jar
  3. jar to java src

детальное объяснение:

Шаг 1: apk/app to dex

использовать инструмент (FDex2 / DumpDex) для дампа / подключения (одного или нескольких) dex файла из запущенного приложения

шаги:

подготовить среду

выгружать dex из запущенного приложения

  • запустите FDex2, затем щелкните имя своего apk, чтобы позже можно было захватить / подключить dex

  • (в телефоне / эмуляторе) запустите ваше приложение
  • find and copy out the dump out whole apk resources in /data/data/com/yourCompanyName/yourProjectName
    • in its root folder normally will find several dex file

Шаг 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

eg:

dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.xxx.yyy8825612.dex
dex2jar com.xxx.yyy8825612.dex -> ./com.xxx.yyy8825612-dex2jar.jar

Шаг 3: jar to java src

воспользуйтесь одним из инструментов:

преобразовать jar в java src

для эффекта преобразования из jar в java src:

Jadx > Procyon > CRF >> JD-GUI

поэтому рекомендуем использовать: _48 _ / _ 49_

шаги:

  • дважды щелкните, чтобы запустить jadx-gui
  • открыть dex файл
  • File -> save all

eg:

экспортированный java src:


Более подробное объяснение можно найти в моем учебном пособии по электронной книге китайскому:

person crifan    schedule 08.04.2019

Студия Android предлагает вам проанализировать любой apk файл.

1 - В меню сборки выберите опцию анализа apk и выберите файл apk. 2 - В результате вы получите файл classes.dex и другие файлы. 3 - Щелкните файл classes.dex, чтобы просмотреть список папок, пакетов, библиотек и файлов. 4 - Из настроек студии Android и установите плагин под названием «Dex to Jar». 5 - щелкните любой файл активности извлеченного проекта и выберите dex to jar в меню сборки.

В результате вы получите фактический код вашего java-файла.

Ваше здоровье.

person Rohit Patil    schedule 10.05.2019

Самый простой способ - использовать Apk OneClick Decompiler. Это пакет инструментов для декомпиляции и дизассемблирования APK (пакетов Android).

ОСОБЕННОСТИ

  • Все функции интегрированы в контекстное меню Windows.
  • Декомпилируйте классы APK в исходные коды Java.
  • Дизассемблируйте APK до кода smali и расшифруйте его ресурсы.
  • Установите APK на телефон, щелкнув правой кнопкой мыши.
  • Перекомпилируйте APK после редактирования кода smali и / или ресурсов. Во время перекомпиляции:
  • Оптимизировать изображения PNG
  • Подписать apks
  • Zipalign

ТРЕБОВАНИЯ

Должна быть установлена ​​среда выполнения Java (JRE).

Вы можете скачать его по этой ссылке Apk OneClick Decompiler

Наслаждайтесь этим.

person Masoud Mokhtari    schedule 16.02.2019

Самый простой способ я нашел:

  1. Переименуйте свой app.apk в app.zip (измените расширение с apk на zip)
  2. Распакуйте zip-файл в папку
  3. Используйте инструмент JADX для чтения исходного кода, представленного в файле classes.dex.
person Masood Anwar    schedule 25.02.2019

Для этого есть приложение, которое обычно занимает всего несколько кликов, и все готово. https://github.com/Nuvolect/DeepDive-Android

  1. Выберите Приложения, в разделе «Установленные приложения» выберите свое приложение. Если его там нет, вы можете загрузить APK.
  2. Выберите «Извлечь APK».
  3. Выберите «Распаковать APK».
  4. Выберите «Декомпилировать с помощью Jadx». Это может занять от нескольких секунд до нескольких минут в зависимости от скорости вашего устройства.

После этого вы можете просмотреть исходный код, загрузить его на другой компьютер с помощью elFinder или выполнить поиск с помощью Lucene.

Помимо Jadx в нем есть декомпиляторы CFR и Fernflower.

person MobileMateo    schedule 26.02.2019

Я разработал инструмент - анализатор кода, он работает на iPhone / iPad / Mac, для анализа файлов Java / Android, https://decompile.io

введите здесь описание изображения

введите здесь описание изображения

person Qing Xu    schedule 11.05.2020

1. Извлечение исходного кода из собственного приложения Android

Исходный код собственного Android-приложения получить несложно, но для этого требуются дополнительные инструменты, совместимые с Windows, Mac и Linux. Когда дело доходит до инструментов, мне больше всего нравятся dex2jar и JD-GUI.

Если вы не знакомы с этими инструментами, dex2jar прочитает исполняемые файлы Dalvik и преобразует их в стандартный формат JAR. JD-GUI будет читать файлы JAR и декомпилировать найденные в них файлы классов.

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

android create project --target 19 --name TestProject --path . --activity TestProjectActivity --package com.nraboy.testproject

Приведенная выше команда оставит вам проект Android в текущем пути командной строки.

Поскольку в наш проект уже включен класс Activity, давайте сразу перейдем к процессу сборки. Вы можете целый день беспокоить меня об использовании Ant вместо Gradle или Maven, но в этом уроке я буду придерживаться этого.

ant debug

Приведенная выше команда создаст отладочную сборку, обычно находящуюся в bin / TestProject-debug.apk.

Используя свой любимый инструмент для распаковки архива, извлеките файл APK. 7-zip - популярный инструмент, но если у вас Mac, вы можете просто запустить следующее из Терминала:

unzip TestProject-debug.apk

У нас останется куча файлов и папок, но одна из них важна для нас. Обратите внимание на classes.dex, потому что он содержит весь наш исходный код. Чтобы преобразовать его во что-то читаемое, нам нужно запустить на нем dex2jar. Вы можете использовать dex2jar на Mac, Linux и Windows, но я собираюсь объяснить с точки зрения Mac.

С файлом classes.dex в извлеченном каталоге dex2jar запустите из Терминала следующее:

./dex2jar.sh classes.dex

Откройте приложение JD-GUI, которое вы скачали, потому что пришло время декодировать JAR и файлы упакованных классов. Откройте только что созданный файл classes_dex2jar.jar, и вы должны увидеть что-то вроде следующего:

введите описание изображения здесь Посмотрите, как легко было получить исходный код собственного APK-файла Android? Что вы можете сделать, чтобы лучше защитить себя?

Android SDK поставляется с Proguard, который представляет собой модуль обфускации. Вы спросите, что такое обфускация?

Обфускация через Википедию:

Обфускация (или затемнение) - это сокрытие предполагаемого смысла в общении, что делает общение запутанным, умышленно двусмысленным и трудным для интерпретации.

Хотя обфускация не зашифрует ваш исходный код, ее будет сложнее понять. С настроенным Proguard запустите Ant в режиме выпуска, и ваш код должен быть запутан при сборке.

2. Извлечение исходного кода из гибридного приложения для Android

Исходный код гибридных приложений, безусловно, легче всего извлечь. Вам не нужно устанавливать дополнительное программное обеспечение на ваш компьютер, просто получите доступ к файлу APK.

Чтобы упростить понимание, давайте сначала создадим новый проект Apache Cordova, а затем извлечем его. Начните со следующего:

cordova create TestProject com.example.testproject TestProject
cd TestProject
cordova platform add android

В процессе создания проекта вы останетесь со стандартными шаблонами Apache Cordova CSS, HTML и JavaScript. В этом примере для нас это нормально. Давайте продолжим и скомпилируем наш проект в распределенный файл APK:

cordova build android

У вас останется platform / android / ant-build / CordovaApp-debug.apk или что-то вроде платформ / android / ant-build / * - debug.apk.

Несмотря на то, что это отладочная сборка, ее все еще можно использовать. Если установлен 7-zip или аналогичный, щелкните файл APK правой кнопкой мыши и выберите его извлечение или разархивирование. В извлеченном каталоге у вас теперь должен быть доступ ко всем вашим исходным файлам в Интернете. Я говорю «на базе Интернета», потому что любые файлы Java, используемые Apache Cordova, будут скомпилированы в файлы классов. Однако файлы CSS, HTML и JavaScript не затрагиваются.

Вы только что увидели, насколько удручающе легко получить исходный код гибридного приложения. Итак, что вы можете сделать, чтобы лучше защитить себя?

Вы можете скрыть свой код, что является формой обфускации.

Это не приведет к шифрованию вашего кода, но сделает его гораздо более трудным для понимания.

Если вы хотите упростить свой код, я рекомендую вам установить UglifyJS, поскольку он в значительной степени является стандартом с Теперь. Если вы предпочитаете использовать средство выполнения задач, в Grunt и Gulp также есть модули для UglifyJS.

person Hossam Hassan    schedule 10.09.2020

На рынке существует множество приложений и методов для декомпиляции файла apk в класс java, но если приложение скомпилировано с помощью правила ProGuard, у вас большие проблемы, потому что это правило сжимает все файлы dex до маленького символа имя, и тогда вы не сможете отследить реализацию. см. https://developer.android.com/studio/build/shrink-code для уточнения режима.

Удачного кодирования ...

person Rohit Patil    schedule 27.10.2020

Я уже несколько дней сводил себя с ума, пытаясь заставить dex2jar работать на ноутбуке Fedora 31 против apk, который просто не работал. Этот сценарий python 3 справился с задачей за считанные минуты, а установка jd-gui сделала файлы классов удобочитаемыми.

http://java-decompiler.github.io/

https://github.com/Storyyeller/enjarify

в частности, вот что я запустил:

# i installed apktool before the rest of the stuff, may not need it but here it is
$> cd /opt
$> sudo mkdir apktool
$> cd apktool/
$> sudo wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
$> sudo wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.4.1.jar
$> sudo mv apktool_2.4.1.jar apktool.jar
$> sudo mv apktool* /usr/bin/
$> sudo chmod a+x /usr/bin/apktool*

# and enjarify
$> cd /opt
$> sudo git clone https://github.com/Storyyeller/enjarify.git
$> cd enjarify/
$> sudo ln -s /opt/enjarify/enjarify.sh /usr/bin/enjarify

# and finally jd-gui
$> cd /opt
$> sudo git clone https://github.com/java-decompiler/jd-gui.git
$> cd jd-gui/
$> sudo ./gradlew build

# I made an alias to kick of the jd-gui with short commandline rather than long java -jar blahblahblah :)
$> echo "jd-gui='java -jar /opt/jd-gui/build/launch4j/lib/jd-gui-1.6.6.jar'" >> ~/.bashrc

Теперь, чтобы получить файлы классов, можно просмотреть следующее:

$> enjarify yourapkfile.apk

И для запуска jd-gui:

$> jd-gui

Тогда просто откройте файлы классов!

person RJ Cole    schedule 29.01.2020

Используйте этот инструмент 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 Автор: Павел Кузнецов

person Faxriddin Abdullayev    schedule 28.05.2020

Да, это возможно.

Существует множество программ для обратного проектирования файлов .apk для Android.

Недавно я составил полный список 47 лучших декомпиляторов APK на моем Веб-сайт. Я разделил их на 4 разных раздела.

  1. Декомпиляторы APK с открытым исходным кодом
  2. Онлайн-декомпиляторы APK
  3. Декомпилятор APK для Windows, Mac или Linux
  4. APK-декомпилятор приложений

Надеюсь, этот сборник будет вам полезен.

Ссылка: https://www.edopedia.com/blog/best-apk-decompilers/

person Muhammad Furqan Ul Haq    schedule 11.06.2020

Шаг 1: Создайте новую папку и скопируйте файл .apk, который вы хотите декодировать.

Теперь переименуйте расширение этого файла .apk в .zip (например, переименуйте из filename.apk в filename.zip) и сохраните его. Теперь вы можете получить доступ к файлам classes.dex и т. Д. На этом этапе вы можете видеть чертежи, но не файлы xml и java, так что продолжайте.

Шаг 2: Теперь извлеките этот файл .zip в ту же папку (или в НОВУЮ ПАПКУ).

Загрузите https://github.com/pxb1988/dex2jar/releases/tag/2.0: dex2jar-2.0

Теперь откройте командную строку и смените каталог на эту папку (или НОВУЮ ПАПКУ). Затем выполните: d2j-dex2jar.bat classes.dex

Загрузите этот декомпилятор http://java-decompiler.github.io/, чтобы декомпилировать классы-dex2jar. банка

Шаг 3. Теперь откройте еще одну новую папку.

Поместите в файл .apk, который вы хотите декодировать

Загрузите последнюю версию apktool И apktool (https://ibotpeaches.github.io/Apktool/install/) окно установки (оба могут быть загружены по одной ссылке) и поместите их в одну папку

Открыть командное окно

Теперь запустите команду, например apktool, если framework-res.apk (если у вас ее нет, получите ее здесь), а затем

apktool d myApp.apk (где myApp.apk обозначает имя файла, которое вы хотите декодировать)

теперь у вас есть папка с файлами в этой папке, и вы можете легко читать xml-файлы apk.

Копирование содержимого обеих папок в одну папку

Выполнено !

person Pierre Alexandre    schedule 10.02.2021