Как просмотреть код файла apk
Обновлено: 23.11.2024
Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме Stack Exchange энтузиастов Android.
Закрыт 6 лет назад.
У меня есть файл .apk, могу ли я как-нибудь получить его исходный код?
Файл .apk — это просто файл .zip. Но, к сожалению, любая сборка приложения для «выпуска», вероятно, будет защищена ProGuard.
@MatthewRead Оп спрашивает, может ли он получить код из API, и я ответил, как называется это явление и как хотя бы предотвратить создание подобного приложения. Он не говорит, как предотвратить получение кода. Так что да, это отвечает на вопрос.
3 ответа 3
Даже если ProGuard использовался, вы все равно можете получить интересные сведения. Вот вопрос StackOverflow с подробным объяснением: Android: получение исходного кода из файла APK. Видео на YouTube с подробным руководством. И запись в блоге об этом: Как получить исходный код из файла Android APK.
Если вам повезло, и ваш файл .apk не был защищен Proguard или аналогом, вы можете использовать инструмент APK. Это инструмент для обратного проектирования сторонних закрытых двоичных приложений для Android.
Процедура декодирования файлов .apk, пошаговый метод:
Шаг 1:
Создайте новую папку и скопируйте файл .apk, который вы хотите декодировать.
Теперь переименуйте расширение этого файла .apk в .zip (например, переименуйте имя файла.apk в имя файла.zip) и сохраните его. Теперь вы можете получить доступ к файлам class.dex и т. д. На этом этапе вы можете видеть чертежи, но не файлы xml и java, так что продолжайте.
Шаг 2:
Теперь распакуйте этот ZIP-файл в ту же папку (или в НОВУЮ ПАПКУ).
Загрузите dex2jar и распакуйте его в ту же папку (или в НОВУЮ ПАПКУ).
Переместите файл class.dex в папку dex2jar.
Теперь откройте командную строку и измените каталог на эту папку (или НОВУЮ ПАПКУ). Затем напишите d2j-dex2jar class.dex и нажмите Enter. Теперь у вас есть файл class.dex.dex2jar в той же папке.
Загрузите декомпилятор java, дважды щелкните jd-gui, щелкните открытый файл и откройте файл class.dex.dex2jar из этой папки: теперь вы получаете файлы классов.
Сохраните все эти файлы классов (в jd-gui нажмите «Файл» -> «Сохранить все источники») по имени источника. На этом этапе вы получаете исходный код java, но файлы .xml по-прежнему не читаются, поэтому продолжайте.
Шаг 3:
Теперь откройте еще одну новую папку
Вставьте файл .apk, который вы хотите декодировать
Загрузите последнюю версию apktool И окно установки apktool (оба могут быть загружены по одной и той же ссылке) и поместите их в одну папку
Скачайте framework-res.apk и поместите его в ту же папку (не для всех apk-файлов этот файл нужен, но это не помешает)
Открыть командное окно
Перейдите в корневой каталог APKtool и введите следующую команду: apktool if framework-res.apk
apktool d myApp.apk (где myApp.apk обозначает имя файла, который вы хотите декодировать)
теперь вы получаете папку с файлами в этой папке и можете легко читать XML-файлы apk.
Шаг 4:
Это не какой-то шаг, просто скопируйте содержимое обеих папок (в данном случае обеих новых папок) в одну
Если вы разработчик или технический энтузиаст, который хочет взглянуть на исходный код приложения для Android. В этом уроке я буду помогать вам с методами извлечения кода из Apk. Это одна из самых важных частей обратной разработки приложения для Android, позволяющая обнаружить скрытые или новые функции.
В этой статье я объясню вам лучшие способы извлечения кода из APK-файла приложения для Android. Давайте рассмотрим это простое пошаговое руководство.
Как извлечь код из APK: метод 3
Чтобы извлечь код из APK-файла приложения для Android, необходимо использовать любой из трех перечисленных здесь способов.
Способ 1. Извлечение кода из APK с помощью ПК
Чтобы начать с этого метода, вам нужно быть готовым к следующим вещам:
Думаю, вы уже готовы к описанному выше. Начнем.
- Установите Java, загрузив ее с официального сайта.
- Установите JDK, загрузив его с веб-сайта Oracle.
- Настройте переменные среды для системного пользователя
- Загрузить APK-файл приложения для Android
- Загрузите файл APKTool.jar с официального сайта
- Переместите файл APK и файл APKTool.jar в одну папку, а затем выполните следующую команду: java -jar apktool.jar d allo.apk
- Теперь вы можете редактировать файл Strings.xml в Блокноте или любом другом текстовом редакторе.
Способ 2. Извлечение кода из APK с помощью Android
Очень удобно извлекать код из APK на самом Android-устройстве. Я собираюсь показать вам шаги по извлечению кода из APK с помощью Android. Чтобы извлечь код из APK с помощью Android, вы должны быть готовы к следующему:
- Приложение APKTool M
- APK-файл приложения для Android
Если вы готовы выполнить вышеуказанные требования, тогда мы готовы к работе. Выполните следующие действия, чтобы извлечь код из APK с помощью Android:
- Установите приложение APKTool M, скачав его с сайта MaximOff.
- Запустите приложение APKTool M после его установки на телефон Android.
- Перейдите в папку, в которой вы сохранили APK-файл Android-приложения на своем телефоне.
- Декомпилируйте файл APK с помощью декомпилятора приложений APKTool M
- Теперь откройте файл strings.xml и отредактируйте его нужным образом.
- После редактирования перекомпилируйте его, чтобы запустить измененную версию приложения на телефоне Android.
Способ 3. Извлечение кода из APK онлайн
Очень удобно извлекать код из APK онлайн, так как вам не нужно ничего устанавливать на свои устройства. Я собираюсь показать вам шаги по извлечению кода из APK онлайн. Чтобы извлечь код из APK онлайн, вы должны быть готовы к следующему:
- Любой браузер
- APK-файл приложения для Android
Если вы готовы выполнить вышеуказанные требования, тогда мы готовы к работе. Выполните следующие действия, чтобы извлечь код из APK онлайн:
Заключение
Теперь вы знаете, как декомпилировать или извлечь код из APK-файла приложения для Android. Это поможет вам обнаружить скрытые или невыпущенные функции таких приложений, как Instagram, WhatsApp, Telegram и т. д. Вы можете получить доступ к этим функциям до их бета- или альфа-версии.
Подпишитесь на нас в Twitter, чтобы быть в курсе последних новостей и руководств, связанных с Android и Google. Спасибо за прочтение статьи.
В этой статье представлены основы обратного проектирования Android. Одним из наиболее полезных применений этих методов является реинжиниринг ваших собственных приложений, чтобы оценить, насколько сложно будет злоупотребить вашим личным кодом (например, обойти проверки вашей лицензии). Еще одним полезным приложением является изучение того, как определенное приложение решает интересную техническую проблему или устраняет ошибки платформы или поставщика.
Обратите внимание, что информация в этой статье не предназначена для пиратства или других незаконных целей. Его основная цель — показать, как проверять существующие приложения Android только в образовательных целях.
Что такое APK-файлы?
Приложения для Android распространяются в виде файлов APK. Файлы APK в основном представляют собой ZIP-файлы, похожие на файлы JAR, используемые для упаковки библиотек Java. Файл APK содержит код приложения в формате файла DEX, собственные библиотеки, ресурсы, активы и т. д. Он должен иметь цифровую подпись с сертификатом, чтобы его можно было установить на устройстве Android.
Содержимое пакета APK
Файл APK представляет собой сжатый пакет, содержащий следующие файлы и каталоги:
assets — каталог с активами приложения.
res — каталог со всеми ресурсами, не скомпилированными в resources.arsc. Это все ресурсы, кроме файлов в res/values. Все ресурсы XML преобразуются в двоичный XML, а все файлы .jpg оптимизируются (сокращаются) для экономии места и повышения производительности во время выполнения при раздувании этих файлов.
lib — каталог со скомпилированными нативными библиотеками, используемыми вашим приложением. Содержит несколько каталогов — по одному для каждой поддерживаемой архитектуры ЦП (ABI).
META-INF — каталог с метаданными APK, такими как его подпись.
AndroidManifest.xml — манифест приложения в формате двоичного XML-файла. Он содержит метаданные приложения — например, его имя, версию, разрешения и т. д.
classes.dex — файл с кодом приложения в формате файла Dex. Могут быть дополнительные файлы .dex (с именами class2.dex и т. д.), когда приложение использует multidex.
resources.arsc — файл с предварительно скомпилированными ресурсами, такими как строки, цвета или стили.
Процесс сборки APK
Процесс сборки приложения для Android довольно сложен. Давайте немного углубимся в это, чтобы вы могли получить общее представление о том, как создается APK.
Процесс начинается с исходного кода приложения на Java/Kotlin вместе с его зависимостями. Во-первых, этот исходный код компилируется в байт-код Java с помощью компиляторов Java/Kotlin. Обратите внимание, что зависимости приложения уже скомпилированы и не требуют дополнительной обработки на этом шаге.К ним относятся как зависимости Android, поставляемые в виде файлов AAR, так и зависимости только для Java в виде файлов JAR.
Байт-код Java, созданный на предыдущем шаге, вместе со всеми зависимостями затем преобразуется в файлы Dex, содержащие байт-код Dalvik, которые могут работать на устройствах Android. В результате создается файл class.dex (или несколько файлов class*.dex, если включено multidex).
Ресурсы приложения компилируются с помощью инструмента упаковки ресурсов Android. Этот инструмент преобразует все ресурсы в двоичный формат, оптимизированный для использования на Android. На выходе получается APK-файл со всеми ресурсами, кроме кода, т. е. каталоги assets и res, файл resources.arsc с предварительно скомпилированными ресурсами и манифест приложения.
Скомпилированный код приложения со всеми файлами class.dex, созданными на шаге 2, и собственными библиотеками упакованы в файл APK.
Затем APK-файл оптимизируется с помощью zipalign. Этот шаг гарантирует, что все несжатые данные в файле APK будут выровнены по границе четырех байтов, чтобы повысить производительность среды выполнения при доступе к большим двоичным данным, таким как изображения.
Наконец, APK-файл снабжен цифровой подписью, поэтому его можно проверить и установить на любом устройстве Android.
Окончательный файл APK можно использовать для тестирования (отладки сборок) или выпустить в открытый доступ либо через платформу распространения, такую как Google Play, либо в виде отдельного пакета APK, который пользователи могут загрузить самостоятельно.
Проверка APK
Теперь у вас есть базовые представления о формате файлов APK, и мы можем приступить к анализу этих файлов.
Примечание. APK средства просмотра PDF-файлов PSPDFKit с именем пакета com.pspdfkit.viewer будет использоваться во всех приведенных ниже примерах.
Прежде чем мы сможем начать проверку файлов APK, нам сначала нужно получить к ним доступ. Это просто при работе с вашими собственными приложениями, поскольку у вас уже должен быть доступ к их APK. Сторонние приложения можно получить с любого устройства, на котором они установлены:
Распаковать
Как уже говорилось ранее, APK представляет собой ZIP-файл. Таким образом, мы можем просто использовать любой инструмент для распаковки или файловый браузер с поддержкой zip-файлов, чтобы просмотреть содержимое APK. Это, однако, имеет очень ограниченный вариант использования:
Мы можем извлекать ресурсы и активы, которые не обрабатываются или просто оптимизируются в процессе сборки. Сюда входят активы , необработанные ресурсы (в формате res/raw ) и чертежи .jpg (оптимизированные, но все еще в формате PNG).
Мы не можем получить много информации из файлов .dex, так как это двоичные файлы.
Чтение двоичных ресурсов (двоичный XML и resources.arsc ) или двоичного файла AndroidManifest.xml невозможно.
Анализатор APK для Android Studio
Самый простой способ декодирования содержимого APK — использование Android Studio, в состав которого входит инструмент APK Analyzer, предоставляющий полный набор инструментов для анализа файлов APK с соответствующим пользовательским интерфейсом. Анализатор APK можно вызвать:
Перетаскивание APK в окно Android Studio.
Выбор APK через пункт меню "Сборка" > "Анализ APK".
Файловый браузер
Анализатор APK предоставляет браузеру файлов размеры файлов и их относительный процент от всего размера APK. Эта функция полезна для определения самых больших частей вашего приложения при оптимизации его размера.
Декодер двоичных ресурсов
Ресурсы в двоичном коде и файл AndroidManifest.xml декодируются APK Analyzer. Доступ к декодированному файлу AndroidManifest.xml особенно полезен для проверки результатов объединения манифестов, которое используется при создании многомодульных приложений.
Мы также получаем доступ к декомпилированным ресурсам, которые являются частью предварительно скомпилированного файла ресурсов (например, resources.arsc ).
Декодер Dex
Анализатор APK предоставляет хорошую поддержку для декодирования файлов Dex.
Самой полезной функцией здесь является столбец «Ссылочные методы», в котором показано количество всех ссылок на методы. Эта информация пригодится при анализе количества ссылок в приложениях, чтобы не превысить ограничение в 64 КБ методов.
Мы можем перемещаться по всему коду и искать использование классов и методов, щелкнув правой кнопкой мыши имя класса или метода и выбрав параметр «Найти использование». Мы также можем декомпилировать классы и методы в байт-код smali, выбрав параметр «Показать байт-код» в том же контекстном меню.
Вы спросите, что такое байт-код smali? Ну, это синтаксис дизассемблера для байт-кода Dalvik. Его синтаксис выходит за рамки этой статьи, но мы объясним, как декомпилировать APK в более читаемый код Java ниже.
Апк-инструмент
Apktool – это комплексное решение для дизассемблирования приложений Android, которое имеет больше возможностей, чем APK Analyzer. Это позволяет извлекать и декодировать все файлы в APK с помощью одной команды:
Это создает каталог с декодированными ресурсами и декодированным манифестом, а также дизассемблированный байт-код smali. Самым большим преимуществом использования Apktool является возможность редактировать эти дизассемблированные данные и встраивать их обратно в рабочий APK-файл. Опять же, это выходит за рамки данной статьи.
Извлечение кода Java
Мы уже видели, как проверять APK-файлы и разбирать файлы Dex на байт-код smali. Есть несколько инструментов, которые могут декомпилировать код приложения в достаточно чистый код Java.
Мы будем использовать эти два инструмента:
dex2jar — это набор инструментов для работы с файлами Android .dex и Java .class.
Java Decompiler (JD-GUI) – это утилита, отображающая исходный код Java для файлов .class или .jar с байт-кодом Java.
Первый шаг – преобразование байт-кода Dalvik из нашего APK в файл JAR с байт-кодом Java. Мы будем использовать удобный d2j-dex2jar из пакета dex2jar:
При этом создается файл pdf-viewer.jar, который можно открыть непосредственно в JD-GUI.
JD-GUI поддерживает базовую навигацию по коду, например переход к подчеркнутым символам, поиск символов по имени и разрешение иерархии типов. Однако, если вам не хватает любимого редактора, вы можете извлечь все исходники через Файл > Сохранить все исходники и открыть их в выбранном вами редакторе.
ProGuard
Как вы можете видеть на снимках экрана выше, большинство символов в декомпилированном коде названы одно- или двухбуквенными именами. Это результат запутывания кода PDF Viewer с помощью ProGuard. Это повышает скорость и немного затрудняет для потенциального злоумышленника навигацию по нашей внутренней бизнес-логике.
Обратите внимание, что в предыдущем предложении я использовал формулировку «немного сложнее». Это потому, что ProGuard вряд ли достаточно, чтобы гарантировать безопасность частного кода вашего приложения. Любой, у кого достаточно времени, может понять ваш код даже при использовании ProGuard. Вы никогда не должны включать в свои приложения какую-либо важную для бизнеса информацию, так как она потенциально может быть использована не по назначению кем-то, у кого достаточно времени и знаний.
В некоторых приложениях также используются коммерческие решения для обфускации, такие как DexGuard, что делает практически невозможным их обратное проектирование. DexGuard выполняет дополнительные шаги запутывания поверх ProGuard, включая шифрование во время выполнения всех классов и строковых активов. Используйте эти решения, если хотите обезопасить свои приложения (на практике) от методов обратного проектирования, описанных в этой статье.
Заключение
Я надеюсь, что методы и инструменты, представленные в этой статье, дали вам ценную информацию о том, как легко разобрать большинство приложений Android. Я также надеюсь, что инструменты, описанные в этой статье, станут незаменимым дополнением к вашему набору инструментов для разработки Android, что позволит вам улучшить качество ваших приложений, предоставив информацию о ваших рабочих APK-файлах.
Итак, вы только что создали приложение для Android. Тот, на который у вас ушла целая вечность, и чем вы гордитесь. Что помешает кому-то украсть вашу логику и исходный код? Насколько легко получить? Короче говоря, ваш исходный код небезопасен по умолчанию, и его очень легко получить.
Это руководство будет разделено на две части.
- Извлеките исходный код из родного приложения для Android.
- Извлечение исходного кода из гибридного приложения Apache Cordova/Ionic Framework/Phonegap
Оба продукта разработаны по-разному, но доступ к исходному коду одинаково прост. Для каждого из этих типов приложений вы увидите, как лучше защитить свой код с помощью методов обфускации.
ПРИМЕЧАНИЕ. Не используйте это руководство для вредоносных действий. Разработчики усердно работают над своими приложениями, поэтому, пожалуйста, не пользуйтесь ими. Используйте информацию, найденную здесь, чтобы лучше защитить себя от злоумышленников.
1. Извлечение исходного кода из родного приложения для Android
Исходный код родного приложения для Android получить несложно, но для этого требуются дополнительные инструменты, совместимые с Windows, Mac и Linux. Из инструментов мне больше всего нравятся dex2jar и JD-GUI.
Если вы не знакомы с этими инструментами, dex2jar прочитает исполняемые файлы Dalvik и преобразует их в стандартный формат JAR.JD-GUI будет читать файлы JAR и декомпилировать найденные в них файлы классов.
Чтобы облегчить понимание процесса извлечения, давайте начнем с создания нового нативного проекта Android:
Приведенная выше команда оставит проект Android в текущем пути командной строки.
Поскольку в наш проект уже включен класс Activity, давайте сразу перейдем к процессу сборки. Вы можете целыми днями мучать меня из-за использования Ant вместо Gradle или Maven, но в этом уроке я буду придерживаться его.
Приведенная выше команда создаст отладочную сборку, обычно расположенную по адресу bin/TestProject-debug.apk. Если вы хотите узнать больше о создании нативных проектов для Android, прочтите мой предыдущий пост на эту тему.
С помощью вашего любимого инструмента для распаковки распакуйте APK-файл. 7-zip — популярный инструмент, но если вы работаете на Mac, вы можете просто запустить в Терминале следующее:
У нас останется куча файлов и папок, но одна из них важна для нас. Обратите внимание на class.dex, потому что он содержит весь наш исходный код. Чтобы преобразовать его во что-то читабельное, нам нужно запустить на нем dex2jar. Вы можете использовать dex2jar на Mac, Linux и Windows, но я объясню с точки зрения Mac.
Используя файл class.dex в извлеченном каталоге dex2jar, запустите в Терминале следующее:
Откройте приложение JD-GUI, которое вы загрузили, потому что пришло время декодировать JAR и упакованные файлы классов. Откройте только что созданный файл class_dex2jar.jar, и вы должны увидеть что-то вроде следующего:
Видите, как легко было получить исходный код родного Android APK? Что вы можете сделать, чтобы лучше защитить себя?
Android SDK поставляется с модулем запутывания Proguard. Вы спросите, что такое обфускация?
Запутывание (или затуманивание) – это сокрытие предполагаемого смысла сообщения, что делает общение запутанным, преднамеренно двусмысленным и трудным для интерпретации.
Хотя обфускация не зашифрует ваш исходный код, это затруднит его понимание. С настроенным Proguard запустите Ant в режиме выпуска, и ваш код должен быть запутан при сборке.
2. Извлечение исходного кода из гибридного приложения Android
Исходный код гибридных приложений извлечь проще всего. Вам не нужно устанавливать какое-либо дополнительное программное обеспечение на свой компьютер, просто получите доступ к файлу APK.
Чтобы упростить понимание, давайте сначала создадим новый проект Apache Cordova, а затем извлечем его. Начните со следующего:
В процессе создания проекта у вас остаются стандартные шаблоны Apache Cordova CSS, HTML и JavaScript. Это нормально для нас в этом примере. Давайте продолжим и встроим наш проект в распределенный APK-файл:
Вы останетесь с платформами/android/ant-build/CordovaApp-debug.apk или чем-то вроде платформ/android/ant-build/*-debug.apk.
Несмотря на то, что это отладочная сборка, ее все равно очень удобно использовать. Если установлен 7-zip или аналогичный, щелкните правой кнопкой мыши файл APK и выберите его извлечение или распаковку. Теперь в извлеченном каталоге у вас должен быть доступ ко всем вашим исходным файлам в Интернете. Я говорю веб, потому что любые файлы Java, используемые Apache Cordova, будут скомпилированы в файлы классов. Однако файлы CSS, HTML и JavaScript не затрагиваются.
Вы только что видели, как удручающе легко получить исходный код гибридного приложения. Итак, что вы можете сделать, чтобы лучше защитить себя?
Вы можете исказить свой код, что является формой обфускации.
Это не приведет к шифрованию вашего кода, но значительно усложнит его понимание.
Если вы хотите испортить свой код, я рекомендую вам установить UglifyJS, так как на данный момент он в значительной степени является стандартом. Если вы предпочитаете использовать средство запуска задач, в Grunt и Gulp также есть модули для UglifyJS.
Заключение
Мы только что увидели, как поразительно легко получить нативный и гибридный исходный код Android. Невозможно зашифровать ваш код или сделать его невозможным для взлома. Если кто-то достаточно хочет, он найдет то, что хочет. Однако вы можете запутать свой код и затруднить получение злоумышленником вашего исходного кода.
Мораль этой истории такова: не храните в своем приложении конфиденциальную информацию, такую как жестко закодированные пароли.
Видеоверсию этой статьи можно увидеть ниже.
Ник Рабой
Ник Рабой – сторонник современных веб-технологий и технологий разработки мобильных приложений.У него есть опыт работы с Java, JavaScript, Golang и различными фреймворками, такими как Angular, NativeScript и Apache Cordova. Ник пишет о своем опыте разработки, связанного с упрощением понимания веб-разработки и разработки для мобильных устройств.
В этом руководстве я расскажу вам, как декомпилировать apk в исходный код всего одним щелчком мыши.
Файл APK представляет собой сжатую форму классов Java, XML и нескольких других файлов. Как разработчик Android, вам может потребоваться декомпилировать файл apk, чтобы получить исходный код. Например, если вы увидели приложение с потрясающим дизайном и хотите знать, как реализовать этот дизайн в своем проекте. Мы используем процесс обратного проектирования, чтобы получить исходный код.
В Интернете доступно несколько инструментов, таких как dex2jar, apktool и т. д., которые помогут вам преобразовать apk в исходный код. Но для этого вам нужно выполнить несколько команд и следовать длительному процессу.
Как декомпилировать APK в исходный код
<р>1. Прежде всего перейдите по ссылке ниже. <р>2. Теперь выберите файл apk с помощью параметра «Выбрать файл», а затем нажмите кнопку «Загрузить и декомпилировать».<р>3. Декомпиляция может занять некоторое время в зависимости от размера файла.
<р>4. После завершения процесса декомпиляции нажмите кнопку Сохранить, чтобы загрузить исходный код.
Вы также можете посмотреть обучающее видео ниже.
Разве это не очень просто? Да, конечно. Этот инструмент позволит вам декомпилировать любой файл apk. Если вы все еще сталкиваетесь с какой-либо проблемой, вы можете найти общий длинный метод по ссылке ниже.
Комментарий ниже, если вы столкнулись с какой-либо проблемой. Если вы нашли это руководство полезным, пожалуйста, уделите несколько секунд, чтобы поделиться им.
Читайте также: