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

938

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

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

  • 23
    К вашему сведению, есть онлайн декомпилятор проверить здесь
Показать ещё 9 комментариев
Теги:
android-resources
apk
decompiling

16 ответов

1226
Лучший ответ

Простой способ: использовать онлайн-инструмент 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 write ./d2j-dex2jar.sh classes.dex) и нажмите enter. Теперь у вас есть файл classes.dex.dex2jar в той же папке.

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

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

Шаг 3:

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

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

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

  • Откройте окно командной строки

  • Теперь запустите команду, например apktool if framework-res.apk и следующую

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

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

Шаг 4:

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

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

  • 2
    Большое спасибо, но у меня есть проблема после выполнения третьего шага, все файлы приходят в формате smali, как я могу их прочитать.
  • 0
    Большое спасибо, но после 3-го шага я получил файл формата .smali, как я могу преобразовать его в xml, чтобы увидеть его.
Показать ещё 57 комментариев
106

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

  • скачать apktool.bat (или apktool для Linux) и apktool_<version>.jar из http://ibotpeaches.github.io/Apktool/install/
  • переименуйте файл jar сверху до apktool.jar и поместите оба файла в одну папку

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

    Промежуточный результат: файлы ресурсов, AndroidManifest.xml

  • распаковать файл APK с распаковщиком по вашему выбору

    Промежуточный результат: 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, для Linux используйте dex2jar.sh)

    Промежуточный результат: classes_dex2jar.jar

  • unpack classes_dex2jar.jar (может быть необязательным в зависимости от используемого декомпилятора)
  • декомпилируйте ваши файлы классов (например, JD-GUI или DJ Decompiler)

    Результат: исходный код

Примечание: не разрешается декомпилировать пакеты сторонних поставщиков; это руководство предназначено для восстановления личного исходного кода только из файла APK; наконец, полученный код, скорее всего, будет запутан.

  • 6
    Я мог бы также добавить, что существует современная альтернатива этому маршруту APKTool-> dex2jar-> JD-GUI! Просто попробуйте open-source APK и DEX-декомпилятор под названием Jadx: sourceforge.net/projects/jadx/files. Он также имеет онлайн-версию здесь: javadecompilers.com/apk
  • 1
    Разрешено (читай: законно) декомпилировать любой файл APK. Смотрите следующий вопрос: stackoverflow.com/questions/9674557/…
90

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

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

К сожалению, такие вещи убили много проектов.
В будущем я настоятельно рекомендую изучить систему управления версиями, например CVS, SVN и git и т.д.

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

  • 17
    Такой сервис, как Dropbox, также поможет.
  • 0
    и всегда есть способ записать компакт-диски
40
  • 0
    Этот самый простой.
  • 0
    Это показывает: «... не может быть декомпилировано» - Почему?
23

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

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

  • 0
    Вы найдете apktool незаменимым, если вы хотите извлечь ресурсы (например, изображения из приложения Android. На самом деле, у инструмента нет конкурентов вообще!) Онлайн-версия apktool доступна здесь: www.javadecompilers.com/apktool
  • 0
    @ AndrewRukin действительно? Разархивирование apk также работает.
21

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

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

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

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

  • Используйте apktool, чтобы получить файлы ресурсов из apk
  • Используйте dex2jar для получения файла jar, который содержит классы в формате, который понравится Eclipse.
  • Создайте проект Eclipse, укажите его в файлах ресурсов и новом файле jar
  • Откройте файл jar с помощью zip-утилиты и удалите существующие ресурсы.
  • Откройте файл jar с помощью JDGui, чтобы просмотреть исходный код
  • Возьмите любой исходный код из JDGui, вставьте его в класс внутри Eclipse и измените его
  • Удалить этот класс из файла jar (так что вы не имеете одного и того же класса, определенного несколько раз)
  • Запустите его.
  • 2
    Я знаю , что этот вопрос ответил еще, я хотел бы передать информацию: есть онлайн декомпилятор для андроида APK , decompileandroid.com Загрузки APK с локального компьютера, подождите несколько минут, скачать исходный код в формате ZIP.
  • 2
    Звучит прекрасно. И тогда на сайте decompileandroid также есть копия всего вашего источника! Умная!
Показать ещё 1 комментарий
16

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

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

5

Может быть легко увидеть источник:

В Android-студии 2.3, Build -> Analyze APK -> Select the apk that you want to decompile.
Вы увидите исходный код.

Linf для справки:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2

  • 3
    Он перечисляет классы и методы, но не дает исходный код.
  • 0
    Вы можете получить вышеуказанные файлы, только изменив «.apk» на «.zip»
5

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

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

Шаг 3 ':

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

Итак,

1st - вам нужно переименовать файл .apk в .zip

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

3rd - вам нужно декодировать .jar файл с JD-GUI

  • 20
    Что дает этот ответ, а другие нет?
  • 0
    Вы действительно не должны переименовывать это в почтовый индекс. Я мог открыть файл apk напрямую с помощью 7-zip.
3

Есть несколько способов сделать это:

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

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

    Изображение 2875

    Изображение 2876

    Изображение 2877

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

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

    Изображение 2878

  • Используйте 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...
    
  • 0
    Я пробовал jadx, но даже с простым helloworld, хотя он декомпилирует его в java, но попытка открыть проект в android studio и скомпилировать его обратно в apk не удалась по многим причинам (файлы дублирования и т. Д.). Есть ли метод, который создает Java, который может быть скомпилирован обратно в apk?
  • 1
    @ransh Я обычно использую jadx для чтения кода, а затем apktool для его модификации. apktool не создает Java, но позволяет перекомпилировать.
Показать ещё 1 комментарий
3

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

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

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

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

2

apktool - это путь. Онлайн-служба apktool существует: http://www.javadecompilers.com/apktool

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

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

2

Ниже ОНЛАЙН:

http://www.javadecompilers.com/apk

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

  • 0
    да, это здорово, но вместо имен функций он изменил имена всех функций на CS1001 и так далее. Так как это распознать. и еще кое-что: можем ли мы использовать этот декомпилированный apk напрямую в качестве студийного проекта Android, будет ли он работать?
  • 0
    @ZiaUrRahman Я не проверяю это
Показать ещё 3 комментария
1

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

1

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

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

  • 0
    я не могу получить свой исходный код Java ... кажется, что-то вроде прикрепленного файла и ...
  • 0
    @imankazemayni в ссылке выше, «перейдите» к вашему файлу APK и нажмите «Декомпилировать ваш APK». Это займет некоторое время, а затем он должен дать вам исходный код, если код не зашифрован.
Показать ещё 2 комментария
0

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

  • 0
    Здравствуйте. Как использовать DexPatcher с Android Studio?
  • 0
    Не могу объяснить все в комментариях. Google твой друг :) Есть также несколько хороших учебных пособий по YouTube.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню