Как посмотреть код приложения андроид
Общеизвестно, что приложения для Android распространяются в виде файлов пакетов Android Application, или файлов APK для краткости. Тем не менее, большинство людей смотрит на APK как черный ящик и понятия не имеет, как оно создано или что внутри него. Даже у большинства разработчиков приложений есть только поверхностное понимание анатомии APK. В интегрированных средах разработки, таких как Android Studio, требуется всего один щелчок, чтобы преобразовать проект Android в APK.
В этом уроке мы рассмотрим приложение для Android. Другими словами, мы собираемся открыть APK и посмотреть его содержимое. Кроме того, поскольку APK является двоичным файлом, предназначенным только для чтения машинами, я также расскажу вам о нескольких инструментах, которые вы можете использовать для перевода его содержимого в более удобочитаемую форму.
Предпосылки
Чтобы следовать, вам нужно:
- последняя версия Android SDK
- Android-устройство или эмулятор под управлением Android 4.4 или выше
1. Зачем заглядывать внутрь в APK?
Многие люди делают это из чистого любопытства. Другие пользуются возможностью прямого доступа к изображениям, звукам и другим активам своих любимых игр или приложений. Однако есть более важные причины, по которым вы хотели бы заглянуть внутрь APK.
Обучение
Если вы только начали изучать разработку приложений для Android, вы можете многому научиться, просматривая APK-файлы популярных приложений или приложений, созданных профессионалами. Например, просмотрев файлы макета XML приложения, которые хорошо смотрятся на нескольких размерах экрана, вы можете улучшить свои собственные навыки создания макета.
Безопасность
Приложения, загруженные из ненадежных источников, могут содержать вредоносный код. Если вы уже являетесь опытным разработчиком приложений, разобрав такие приложения, вы можете посмотреть их код, чтобы лучше понять, что они действительно делают под капотом.
2. Как создается APK?
Не так много можно узнать из APK без базового понимания того, как он создается. Фактически, наиболее важные инструменты, используемые для анализа APK, также являются инструментами, используемыми для его создания.
Проекты Android состоят в основном из исходного кода Java, XML-макетов, метаданных XML и активов, таких как изображения, видео и звуки. Прежде чем операционная система Android сможет использовать все эти файлы, их необходимо преобразовать в форму, которую она понимает. Это преобразование включает в себя множество промежуточных задач, которые обычно называются процессом сборки Android. Конечным результатом процесса сборки является APK или пакет приложений для Android.
В проектах Android Studio Android-плагин для Gradle обрабатывает все промежуточные задачи процесса сборки.
Одной из первых важных задач является создание файла с именем R.java. Это файл, который позволяет разработчикам легко получать доступ к макету проекта и ресурсам в своем Java-коде с помощью числовых констант. Для создания файла используется инструмент под названием aapt, который является коротким для Android Asset Packaging Tool. Инструмент также преобразует все ресурсы XML вместе с файлом манифеста проекта в двоичный формат.
Все файлы Java, включая R.java, затем преобразуются в файлы классов с использованием компилятора Java. Как вы уже знаете, файлы классов состоят из байт-кода, который может быть интерпретирован механизмом выполнения Java. Однако Android использует специальный тип Android runtime (ART), который оптимизирован для мобильных устройств. Поэтому, как только все файлы классов были сгенерированы, инструмент, который называется dx, используется для перевода байт-кода в байт-код Dalvik, формат, который понимает ART.
После обработки ресурсов и файлов Java они помещаются в файл архива, который очень похож на файл JAR. Затем архивный файл подписывается с использованием закрытого ключа, который принадлежит разработчику приложения. Эти две операции выполняются плагином Gradle без использования каких-либо внешних инструментов. Ключ разработчика, однако, получен из хранилища ключей, управляемого keytool.
Наконец, c файлом архива делается несколько оптимизаций с использованием инструмента zipalign, чтобы убедиться, что память, которую приложение потребляет во время работы, сведена к минимуму. На данный момент архивный файл является допустимым APK, который может использоваться операционной системой Android.
3. Анализ содержания APK
Теперь, когда вы понимаете, как файлы APK создаются и используются, давайте откроем их и посмотрим на его содержимое. В этом уроке мы используем APK приложения под названием Sample Soft Keyboard, которое предварительно устанавливается на эмулятор Android. Однако, если вы предпочитаете использовать физическое устройство, вы можете так же легко использовать APK любого приложения, которое вы установили на нем.
Шаг 1: Перенос APK на компьютер
Чтобы проверить содержимое APK, вы должны перенести его с эмулятора на свой компьютер. Прежде чем вы это сделаете, вам нужно знать имя пакета и абсолютный путь APK. Используйте adb , чтобы открыть сеанс оболочки на вашем эмуляторе.
Когда вы увидите приглашение оболочки, используйте команду pm list , чтобы отобразить имена пакетов для всех установленных приложений.
Название пакета приложения, которое нас интересует, это com.example.android.softkeyboard. Вы должны увидеть его в списке. Передав имя пакета команде pm path , вы можете определить абсолютный путь APK.
Вывод команды выше выглядит следующим образом:
Теперь, когда вы знаете свой путь, вы можете выйти из оболочки и перенести APK на свой компьютер с помощью команды adb pull . Приведенная ниже команда передает его в каталог вашего компьютера /tmp:
Шаг 2: Извлечение содержимого APK
Ранее в этом уроке вы узнали, что APK - это ни что иное, как сжатый файл архива. Это означает, что вы можете использовать менеджер архива по умолчанию для своей операционной системы. Если вы используете Windows, вы можете сначала изменить расширение файла с .apk на .zip. После извлечения содержимого APK вы должны иметь возможность видеть файлы внутри APK.
Если вы разработчик приложений, многие файлы в APK должны выглядеть знакомыми. Однако, помимо изображений в папке res, файлы находятся в формате, с которым вы не можете работать без помощи нескольких инструментов.
Шаг 3: Расшифровка двоичных файлов XML
Android SDK включает в себя все инструменты, необходимые для анализа содержимого APK. Вы узнали ранее, что aapt используется для упаковки ресурсов XML во время процесса сборки. Он также может использоваться для чтения большого количества информации из APK.
Например, вы можете использовать опцию dump xmltre e для чтения содержимого любого двоичного XML-файла в APK. Вот как вы можете прочитать файл макета с именем res/layout/input.xml:
Результат должен выглядеть примерно так:
Это не XML, но благодаря отступу и ярлыкам, например N для пространства имен, E для элемента и атрибуту A, вы должны быть в состоянии прочитать его.
Шаг 4: Расшифровка строк
На предыдущем шаге вы видели, что дешифрованный XML имеет шестнадцатеричные числа вместо строк. Эти числа являются ссылками на строки в файле с именем resources.arsc, который представляет собой таблицу ресурсов приложения.
Вы можете использовать параметр dump resources для aapt для просмотра таблицы ресурсов. Вот как:
Из вывода команды вы можете определить точные значения строк, используемых в приложении. Вот запись для одного из шестнадцатеричных чисел в XML:
Шаг 5: Разборка Dalvik Bytecode
Наиболее важным файлом в APK является class.dex. Это файл, который используется во время работы приложения Android во время запуска приложения. Он содержит байт-код Dalvik, сгенерированный во время процесса сборки.
Если вы откроете classes.dasm, вы увидите, что у него есть сотни строк низкоуровневого кода, который выглядит так:
Объем информации, доступной в формате XML, меньше, но дает вам представление о классах Java, методах и полях, присутствующих в приложении.
Заключение
В этом уроке вы узнали, как создается APK и что он содержит. Вы также узнали, как использовать инструменты, доступные в Android SDK, для расшифровки содержимого файлов APK. Документации об этих инструментах не так много, но поскольку все они с открытым исходным кодом, вы можете попробовать прочитать их подробный код с комментариями, чтобы узнать о них больше.
Если вы ищете что-то более простое в использовании, вы можете попробовать использовать популярные сторонние инструменты, такие как dex2jar, который генерирует более читаемый дизассемблированный код или JADX, декомпилятор, который может генерировать Java-код.
Так уж получилось, что приложение для чтения комиксов и манги, которое я использую на своем android-смартфоне, после обновления стало показывать рекламу в конце каждой главы комикса. Данное приложение пару лет назад было доступно на Google Play (платная версия которого и была мной куплена), но было удалено в силу «нарушения авторских прав», после чего ушло в подполье и стало распространятся через сайт разработчика. Увы, достойных альтернатив этому приложению на android и iOS я не нашел, но и смотреть рекламу особо не было желания, тем более я уже покупал версию без рекламы. Сам разработчик почему-то не сделал возможности отключить ее, а на просьбы добавить такую возможность не отозвался. Поэтому пришлось искать альтернативные методы ее отключения. Первое, что пришло в голову, это то, что android-приложения пишутся на java, а значит есть вероятность, что автор не обфусцировал свое приложение и его можно попытаться декомпилировать. Немного подумав, я приступил к работе.
Код метода placeAdViewIfNeeded:
Самое простое, что пришло на ум после чтения кода, это убрать все лишнее, и оставить лишь вызов return;
Но, как уже было сказано, даже если бы я изменил в java-классе что-либо, я бы не смог в итоге скомпилировать приложение в IDE. Поэтому пришлось искать альтернативу. Оказалось, что smali-файлы, которые создаются в процессе декомпиляции, позволяют также после внесения нужных изменений, вновь собрать модифицированное приложение. Увы, сайт, что был приведен выше, позволял лишь получать исходники, но не собирать новые. Поэтому пришлось искать способы сделать это самостоятельно.
Была найдена утилита ApkTools, которая позволяла декомпилировать и компилировать apk-файлы. Кроме того, потребовалась утилита aapt.exe, которая была взята мной из стандартного SDK под андроид в папке android-sdk\build-tools\20.0.0.
Для удобства вызова утилиты из под windows был создан скрипт apktool.bat:
Для декомпиляции приложения были выполнены команды:
После чего, в полученных исходниках был найден файл BaseReaderFragment.smali и нужные нам методы были изменены следующим образом:
Далее пришла очередь сборки apk-файла из исходников.
Сделать это можно cледующей командой:
Но это еще не все. Чтобы приложение можно было установить, его нужно было подписать цифровой подписью. Самый простой способ сделать это – это скачать архив в котором находится утилита для подписи приложений и цифровые сертификаты к ней.
Распаковываем архив, выполняем команду:
Полученный apk-файл можно загружать на телефон, чтобы проверить наше модифицированное приложение. Однако в процессе тестирования изменений оказалось, что объявления больше не показываются, однако сама страница для их показа создается, что не очень приятно. Снова был проанализирован код приложения, найден класс BaseSeamlessReaderFragment, а в нем метод appendPages.
В нем было видно, что строчка:
создает дополнительную страницу, помимо тех, что есть в главе манги, с параметром, отвечающим за показ объявлений. Было решено удалить эту строчку и посмотреть результат. Снова заглядываем в аналогичный smali-файл(BaseSeamlessReaderFragment$4) и удаляем строчку:
Снова проводим сборку apk-файла из исходников и подписываем наше приложение. После установки и тестирования приложения экран с рекламой окончательно исчез, что и было конечной целью.
Данный пример показывает, что в случае необходимости можно довольно просто и быстро модифицировать уже существующие android-приложения, чтобы добавить в них недостающий функционал или наоборот удалить некоторые нежелательные возможности в тех ситуациях, когда доступа к исходникам нет. Надеюсь он поможет людям, которые попали в похожую ситуацию и не хотят мирится с ней, найти решение проблемы.
жесткий диск на моем ноутбуке просто разбился, и я потерял весь исходный код приложения, над которым я работал в течение последних двух месяцев. У меня есть только APK файл, который хранится в моей электронной почте, когда я отправил его другу.
есть ли способ, чтобы извлечь исходный код из этого файла APK?
процедура декодирования .файлы apk, пошаговый метод:
Шаг 1:
создайте новую папку и скопируйте ее.файл apk, который вы хотите декодировать.
теперь переименуйте расширение этого .apk файл .zip (например, переименовать из filename.apk для имени файла.ZIP) и сохраните его. Теперь вы можете доступ к классам.DeX файлы и т. д. На этом этапе вы можете видеть drawables, но не xml и java-файлы, поэтому продолжайте.
Шаг 2:
теперь этот экстракт .zip-файл в той же папке (или новой папке).
скачать dex2jar и извлечь его в ту же папку (или новую папку).
ход занятия.dex файл на dex2jar папка.
теперь откройте командную строку и измените каталог на эту папку (или новую папку). Тогда пиши d2j-dex2jar classes.dex (для Mac terminal или ubuntu напишите ./d2j-dex2jar.sh classes.dex ) и нажмите enter. Теперь у тебя есть занятия.Декс.dex2jar файл в той же папке.
скачать Java decompiler, дважды щелкните по jd-gui, нажмите "Открыть файл" и откройте классы.Декс.dex2jar файл из этой папки: теперь вы получаете файлы классов.
сохранить все эти файлы классов (в JD-gui нажмите Файл - > Сохранить все источники) по имени src. На этом этапе вы получаете источник java, но .xml-файлы по-прежнему не читаются, поэтому продолжайте.
Шаг 3:
теперь откройте другую новую папку
положить в .apk файл, который вы хотите декодировать
скачать последнюю версию apktool и окно установки apktool (оба могут быть скачано по той же ссылке) и поместите их в ту же папку
откройте командное окно
Теперь запустите команду apktool if framework-res.apk и далее
apktool d myApp.apk (где myApp.apk обозначает имя файла, которое вы хотите декодировать)
теперь вы получаете папку с файлами в этой папке и можете легко читать xml-файлы apk.
Шаг 4:
это не какой-либо шаг, просто скопируйте содержимое обеих папок (в данном случае обеих новых папок)в одну
и наслаждайтесь исходным кодом.
это альтернативное описание-на всякий случай, если кто-то застрял с описанием выше. Выполните следующие действия:
промежуточный результат: файлы ресурсов, AndroidManifest.xml
промежуточный результат: classes.dex
результат исходный код
Примечание: не разрешается декомпилировать пакеты сторонних производителей; это руководство предназначено для восстановления личного исходного кода только из файла APK; наконец, результирующий код, скорее всего, будет запутан
пока вы можете декомпилировать свой APK файл, вы, вероятно, нажмете одну большую проблему:
он не собирается возвращать код, который ты написал. Вместо этого он будет возвращать все, что компилятор встроил, с переменными, заданными случайными именами, а также функциями, заданными случайными именами. Это может занять значительно больше времени, чтобы попытаться декомпилировать и восстановить его в код, который у вас был, чем начать все сначала.
к сожалению, такие вещи убил много проекты.
В будущем я настоятельно рекомендую изучить систему управления версиями, например CVS, SVN и git etc.
и как это сделать.
существует также новое приложение на Play Store С помощью которого можно декомпилировать apk (системные приложения тоже) и просмотреть исходный код прямо на вашем смартфоне. Она сохраняет файлы на SD карту, так что вы можете просмотреть его на вашем компьютере. Для этого не Требуется root или что-то еще.
просто установите и получайте удовольствие. Я думаю, что это самый простой способ декомпилировать приложение.
apktool это лучшее, что вы можете попробовать. Я сохранил с ним xml, но, честно говоря, я не знаю, как он будет работать с ним .Java-код.
Я бы рекомендовал вам иметь репозиторий кода, даже если вы единственный кодер. Я использовал Проект Locker для моих собственных проектов. Это дает вам бесплатный SVN и Git РЕПО.
эти две статьи описывают, как сочетать использование apktool и dex2jar взять APK файл и создать проект Eclipse, который может создавать и запускать его.
- использовать apktool to получить файлы ресурсов из apk
- использовать dex2jar чтобы получить файл jar, содержащий классы в формате, который понравится Eclipse.
- создать проект Eclipse укажите его на файлы ресурсов и новый файл jar
- откройте файл jar с помощью утилиты zip и удалите существующие ресурсы
- откройте файл jar с помощью JDGui для просмотра исходного кода
- Возьмите любой исходный код, который вам нужен от JDGui , вставьте его в класс внутри Eclipse и изменить его
- удалите этот класс из файла jar (так что у вас нет одного и того же класса, определенного несколько раз)
- запустить его.
apktool будет работать. Вам даже не нужно знать хранилище ключей для извлечения исходного кода (что немного страшно). Основным недостатком является то, что источник представлен в формате Smali вместо Java. Другие файлы, такие как значок и основной.xml проходит отлично, хотя и может стоить вашего времени, чтобы по крайней мере восстановить их. В конечном счете, вам, скорее всего, придется переписать свой Java-код с нуля.
вы можете найти apktool здесь. Просто скачайте apktool и соответствующий помощник (для Windows, Linux или Mac OS). Я рекомендую использовать такой инструмент, как 7-Zip, чтобы распаковать их.
есть несколько способов сделать это:
используйте функцию "профиль или отладка APK" в Android Studio 3.0.
Это позволяет открывать и исследовать APKs в Android Studio. Занятия декомпиляция в smali. Ресурсы не извлекаются, и такие вещи, как" перейти к определению"," найти все ссылки " и отладка не работают без исходного кода (android studio 3.0 canary 9). Некоторые дополнительные функции smali могут работать с smalidea.
Jadx декомпилирует код в данном APK в исходные файлы java.
Apktool-это инструмент командной строки, который извлекает ресурсы и декомпилирует код в smali для данного apk. Вы также можете перекомпилировать с помощью apktool. Вот пример этого в действии:
может быть легко увидеть источник:
в Android studio 2.3, Build -> Analyze APK -> Select the apk that you want to decompile .
Вы увидите, что это исходный код.
Я покажу вам другой способ декомпилировать .apk файлы.
вы можете выполнить первые 2 шага от "prankul Гарг". Так что у вас есть еще одна возможность:
Шаг 3':
скачать "JD-GUI", это легко найти. Открой свой .Джар файл в " JD-gui.исполняемый." (Файл > Открыть файл > ' нашел свой .Джар "файл"). После этой процедуры можно сохранить все ресурсы в .zip.
1st-вы должны переименовать .apk до .zip
2nd-вы должны декодировать .Декс!--2-- > файл (если хотите, расшифруйте .apk до dex2jar, это возможно)
3rd-вы должны декодировать .Джар С JD-GUI
ниже онлайн:
это сделать все одним щелчком мыши: decompiled .java файлы + ресурсы + xml (в одном .zip-файл) с очень хорошим декомпилятором (Jadx возвращает java-код в местах/функциях, где другие компиляторы возвращают комментарии внутри функции, такие как "невозможно декомпилировать" или некоторый ассемблер/машинный код android)
Apktool по инженерный 3-й партии, закрытые, бинарные приложения для Android.
Он может декодировать ресурсы почти в исходную форму и перестраивать их после внесения некоторых изменений.
Это позволяет отлаживать код smali шаг за шагом. Также это упрощает работу с приложением из-за проектной файловой структуры и автоматизации некоторых повторяющихся задач, таких как построение apk, так далее.
сначала я попробовал сайт, упомянутый в принятом ответе, но это не сработало для меня.
Я лично рекомендую Показать Java Android App чтобы получить исходный код. Вы можете скачать его из play store или из здесь
некоторые ограничения, очевидно, существуют из-за сервиса "online nature": вы можете извлекать и исследовать активы и файл манифеста, но на данный момент невозможно перекомпилировать приложение.
тем не менее, это без проблем способ "открыть" приложение для android.
вы можете попробовать DexPatcher. Он даже интегрируется с Android Studio. Он использует Apktool и Dex2Jar внутренне.
Вы также можете использовать эти инструменты независимо. Apktool декомпилирует apk и извлекает .файлы dex, которые могут быть преобразованы в jar с помощью Dex2Jar. Банку можно декомпилировать с помощью JD-GUI. Вы можете увидеть код Java с помощью этого инструмента. Хотя сходство декомпилированного кода с фактический код не может быть гарантирована. Есть некоторые продвинутые обфускации кода инструменты, доступные на рынке, которые испортят код, чтобы затруднить декомпиляцию / понимание. например. Должны быть
Общеизвестно, что приложения для Android распространяются в виде файлов пакетов Android Application, или файлов APK для краткости. Тем не менее, большинство людей смотрит на APK как черный ящик и понятия не имеет, как оно создано или что внутри него. Даже у большинства разработчиков приложений есть только поверхностное понимание анатомии APK. В интегрированных средах разработки, таких как Android Studio, требуется всего один щелчок, чтобы преобразовать проект Android в APK.
В этом уроке мы рассмотрим приложение для Android. Другими словами, мы собираемся открыть APK и посмотреть его содержимое. Кроме того, поскольку APK является двоичным файлом, предназначенным только для чтения машинами, я также расскажу вам о нескольких инструментах, которые вы можете использовать для перевода его содержимого в более удобочитаемую форму.
Предпосылки
Чтобы следовать, вам нужно:
- последняя версия Android SDK
- Android-устройство или эмулятор под управлением Android 4.4 или выше
1. Зачем заглядывать внутрь в APK?
Многие люди делают это из чистого любопытства. Другие пользуются возможностью прямого доступа к изображениям, звукам и другим активам своих любимых игр или приложений. Однако есть более важные причины, по которым вы хотели бы заглянуть внутрь APK.
Обучение
Если вы только начали изучать разработку приложений для Android, вы можете многому научиться, просматривая APK-файлы популярных приложений или приложений, созданных профессионалами. Например, просмотрев файлы макета XML приложения, которые хорошо смотрятся на нескольких размерах экрана, вы можете улучшить свои собственные навыки создания макета.
Безопасность
Приложения, загруженные из ненадежных источников, могут содержать вредоносный код. Если вы уже являетесь опытным разработчиком приложений, разобрав такие приложения, вы можете посмотреть их код, чтобы лучше понять, что они действительно делают под капотом.
2. Как создается APK?
Не так много можно узнать из APK без базового понимания того, как он создается. Фактически, наиболее важные инструменты, используемые для анализа APK, также являются инструментами, используемыми для его создания.
Проекты Android состоят в основном из исходного кода Java, XML-макетов, метаданных XML и активов, таких как изображения, видео и звуки. Прежде чем операционная система Android сможет использовать все эти файлы, их необходимо преобразовать в форму, которую она понимает. Это преобразование включает в себя множество промежуточных задач, которые обычно называются процессом сборки Android. Конечным результатом процесса сборки является APK или пакет приложений для Android.
В проектах Android Studio Android-плагин для Gradle обрабатывает все промежуточные задачи процесса сборки.
Одной из первых важных задач является создание файла с именем R.java. Это файл, который позволяет разработчикам легко получать доступ к макету проекта и ресурсам в своем Java-коде с помощью числовых констант. Для создания файла используется инструмент под названием aapt, который является коротким для Android Asset Packaging Tool. Инструмент также преобразует все ресурсы XML вместе с файлом манифеста проекта в двоичный формат.
Все файлы Java, включая R.java, затем преобразуются в файлы классов с использованием компилятора Java. Как вы уже знаете, файлы классов состоят из байт-кода, который может быть интерпретирован механизмом выполнения Java. Однако Android использует специальный тип Android runtime (ART), который оптимизирован для мобильных устройств. Поэтому, как только все файлы классов были сгенерированы, инструмент, который называется dx, используется для перевода байт-кода в байт-код Dalvik, формат, который понимает ART.
После обработки ресурсов и файлов Java они помещаются в файл архива, который очень похож на файл JAR. Затем архивный файл подписывается с использованием закрытого ключа, который принадлежит разработчику приложения. Эти две операции выполняются плагином Gradle без использования каких-либо внешних инструментов. Ключ разработчика, однако, получен из хранилища ключей, управляемого keytool.
Наконец, c файлом архива делается несколько оптимизаций с использованием инструмента zipalign, чтобы убедиться, что память, которую приложение потребляет во время работы, сведена к минимуму. На данный момент архивный файл является допустимым APK, который может использоваться операционной системой Android.
3. Анализ содержания APK
Теперь, когда вы понимаете, как файлы APK создаются и используются, давайте откроем их и посмотрим на его содержимое. В этом уроке мы используем APK приложения под названием Sample Soft Keyboard, которое предварительно устанавливается на эмулятор Android. Однако, если вы предпочитаете использовать физическое устройство, вы можете так же легко использовать APK любого приложения, которое вы установили на нем.
Шаг 1: Перенос APK на компьютер
Чтобы проверить содержимое APK, вы должны перенести его с эмулятора на свой компьютер. Прежде чем вы это сделаете, вам нужно знать имя пакета и абсолютный путь APK. Используйте adb , чтобы открыть сеанс оболочки на вашем эмуляторе.
Когда вы увидите приглашение оболочки, используйте команду pm list , чтобы отобразить имена пакетов для всех установленных приложений.
Название пакета приложения, которое нас интересует, это com.example.android.softkeyboard. Вы должны увидеть его в списке. Передав имя пакета команде pm path , вы можете определить абсолютный путь APK.
Вывод команды выше выглядит следующим образом:
Теперь, когда вы знаете свой путь, вы можете выйти из оболочки и перенести APK на свой компьютер с помощью команды adb pull . Приведенная ниже команда передает его в каталог вашего компьютера /tmp:
Шаг 2: Извлечение содержимого APK
Ранее в этом уроке вы узнали, что APK - это ни что иное, как сжатый файл архива. Это означает, что вы можете использовать менеджер архива по умолчанию для своей операционной системы. Если вы используете Windows, вы можете сначала изменить расширение файла с .apk на .zip. После извлечения содержимого APK вы должны иметь возможность видеть файлы внутри APK.
Если вы разработчик приложений, многие файлы в APK должны выглядеть знакомыми. Однако, помимо изображений в папке res, файлы находятся в формате, с которым вы не можете работать без помощи нескольких инструментов.
Шаг 3: Расшифровка двоичных файлов XML
Android SDK включает в себя все инструменты, необходимые для анализа содержимого APK. Вы узнали ранее, что aapt используется для упаковки ресурсов XML во время процесса сборки. Он также может использоваться для чтения большого количества информации из APK.
Например, вы можете использовать опцию dump xmltre e для чтения содержимого любого двоичного XML-файла в APK. Вот как вы можете прочитать файл макета с именем res/layout/input.xml:
Результат должен выглядеть примерно так:
Это не XML, но благодаря отступу и ярлыкам, например N для пространства имен, E для элемента и атрибуту A, вы должны быть в состоянии прочитать его.
Шаг 4: Расшифровка строк
На предыдущем шаге вы видели, что дешифрованный XML имеет шестнадцатеричные числа вместо строк. Эти числа являются ссылками на строки в файле с именем resources.arsc, который представляет собой таблицу ресурсов приложения.
Вы можете использовать параметр dump resources для aapt для просмотра таблицы ресурсов. Вот как:
Из вывода команды вы можете определить точные значения строк, используемых в приложении. Вот запись для одного из шестнадцатеричных чисел в XML:
Шаг 5: Разборка Dalvik Bytecode
Наиболее важным файлом в APK является class.dex. Это файл, который используется во время работы приложения Android во время запуска приложения. Он содержит байт-код Dalvik, сгенерированный во время процесса сборки.
Если вы откроете classes.dasm, вы увидите, что у него есть сотни строк низкоуровневого кода, который выглядит так:
Объем информации, доступной в формате XML, меньше, но дает вам представление о классах Java, методах и полях, присутствующих в приложении.
Заключение
В этом уроке вы узнали, как создается APK и что он содержит. Вы также узнали, как использовать инструменты, доступные в Android SDK, для расшифровки содержимого файлов APK. Документации об этих инструментах не так много, но поскольку все они с открытым исходным кодом, вы можете попробовать прочитать их подробный код с комментариями, чтобы узнать о них больше.
Если вы ищете что-то более простое в использовании, вы можете попробовать использовать популярные сторонние инструменты, такие как dex2jar, который генерирует более читаемый дизассемблированный код или JADX, декомпилятор, который может генерировать Java-код.
Читайте также: