Декомпиляция APK-файла на Андроид
Содержание
Каждая операционная система имеет собственные типы файлов, которые являются исполняемыми программами. Так, на Windows они имеют расширение «.exe», на MacOS их функция более-менее повешена на файлы-контейнеры «.pkg», а на Android – «.apk».
Расшифровывается это расширение как Android Package и означает, что внутри файла находятся все нужные для запуска приложения компоненты. Распространяются они через Play Маркет или его свободные аналоги вроде F-droid.
Кроме того, на различных сайтах, посвящённых мобильным устройствам, например, 4PDA или XDA, такие файлы можно скачать самостоятельно. Установка последних может потребовать от пользователя дополнительных действий, вроде активации в настройках телефона права на развёртывание на устройстве программных компонентов, полученных из неизвестных источников.
Декомпиляция приложений и её функции
Один из языков программирования, который используется при написании программ для ОС Android Java. На нём, как правило, пишут программы новички и люди, которые привыкли к его инструментарию. Крупные разработчики используют другие языки, которые дают больше свободы в использовании сторонних библиотек или программных компонентов.
Для того, чтобы написанный код превратился работающее приложение, его нужно скомпилировать встроенным в SDK (Software Development Kit) компилятором. Обратный же процесс, когда из готового APK-файла получается программный код, называется декомпиляцией.
Для чего может понадобиться декомпилировать такие файлы? Есть несколько ситуаций, в которых это пригодится:
- Пользователю недостаточно предоставленного функционала и он обладает достаточными знаниями и опытом, чтобы вносить изменения в готовый код.
- Посмотреть, как работает определённый компонент программы и приобрести нужный опыт в его реализации при создании собственного продукта.
- Определить, используются ли в приложении какие-либо части вредоносного кода.
Как видно, все эти задачи требуют некоторого опыта работы с языками программирования и Android SDK. Но при этом, на просторах интернета есть множество инструкций, которые под силу и новичкам, что делает процесс обратной компиляции полезным и для них. Нужно просто следовать инструкциям.
Декомпиляторы APK-файлов
Существует три разновидности такого типа программ – устанавливаемые на компьютер, на телефон пользователя и облачные. Первые и вторые имеют более широкий спектр функций. Последние привлекательны тем, что не используют производительности железа и работают прямо из браузера. Недостаток облачных сервисов – ограниченность поддержки сторонних модулей и надстроек, пользователь остаётся с тем набором функций, которые предоставляет владелец сервиса.
Стоит отметить, что разработчики встраивают защиту от таких действий. Это называется обфускацией и производится через специальные сервисы. При этом структура и функциональность полностью собранной программы не нарушается, но после декомпиляции пользователь получает бессвязные куски машинного кода, которые делают невозможным детальный анализ.
Лучшая программа для ПК
Это одна из самых многофункциональных утилит – APK Easy Tool. Она работает с несколькими типами файлов и способна распаковывать файлы, находящиеся на любой стадии разработки. Главное окно содержит несколько вкладок, на которых располагаются все возможности утилиты:
- Main – отправная точка в работе с программами. Здесь можно задать папку для получения всех исходных файлов обратной инженерией, декомпилировать и компилировать их, подписывать и модифицировать подписи после внесения изменений. Внизу вкладки при всех процессах отображается вся служебная информация о версиях инструментария.
- Framework – вкладка для подключения дополнительных модулей и фреймворков, способных помочь в процессе распаковки или упаковки готового продукта. Поддерживается установка фреймворка в APK-формате и назначение отдельной папки для каждой версии или разновидности.
- Smali/backsmali – соответственно, компилятор и декомпилятор файлов, которые записаны в десятеричном формате. На момент написания статьи функция находится в состоянии беты, но работает без серьёзных ошибок. Функционал довольно примитивный, в наличии всего две кнопки – «Компилировать» и «Декомпилировать». Можно выбирать папки для исходного кода или целевого места назначения хранения результата повторной компиляции.
- Log output – полезная для отладки процессов вкладка, содержит все логи каждого из запускаемых процессов.
- Options – позволяет гибко настроить программу для выполнения всех задач. Есть опции подключения разных версий Apktool и утилиты APK Signer для обеспечения максимальной совместимости с более ранними версиями Android. Присутствует 4 собственных вкладки с различными параметрами.
- FAQ – часто задаваемые вопросы, встроенная инструкция, помогающая пользователям преодолевать самые распространённые ошибки в работе.
- About – сведения о версии и контакты разработчика с реквизитами для добровольной поддержки.
Приложение работает на версиях Windows, начиная с Vista и не поддерживает русского интерфейса. По функционалу вполне подходит как новичку, который разберётся с ней с помощью инструкций и видео-мануалов, так и опытному разработчику приложений.
Декомпиляция на мобильном устройстве
Когда нет возможности отладить приложение на компьютере, а сделать это нужно обязательно, на помощь приходят программы для телефона. Это тоже APK-файлы, которые представляют собой не слишком богатые в настройках, но надёжные Java-декомпиляторы. Самой простой, но в то же время полезной из таких утилит является Show Java – A Java Decompiler.
Принцип работы очень прост:
- Начальное окно вполне минималистично – приветствие и кнопка «+», с которой начинается работа.
- Нажав на «+», пользователь должен выбрать, откуда загрузить программу для декомпиляции – из внутренней памяти или выбрать из уже установленных.
- Если выбран первый пункт, следующий шаг – навигация в папку с APK-файлами и выбор одного из них. Потом нужно подтвердить это действие, нажав на Select.
- После этого выбирается декомпилятор, который будет использоваться в процессе.
- А далее выводится окно с прогрессом операции. Если она завершается успешно, пользователь видит все файлы, нужные для функционирования приложения, и его исходный код. Если же нет, выводится окно с ошибкой.
Из недостатков – плохое декодирование файлов, которые были подвержены обфускации. В остальном же, набор возможностей здесь практически неотличим от десктопных аналогов.
Облачный сервис
Сайт javadecompilers.com предоставляет все возможности по разбору APK-файлов на составные части. Здесь есть, кроме хорошего онлайн-декомпилятора, и сетевая версия APKTools, что бывает полезно, если нет под рукой нужных устройств или пользователь не желает тратить время на инсталляцию приложений.
Принцип работы прост:
- Нужно открыть браузер и перейти по адресу javadecompilers.com/apk.
- Выбрать файл из Проводника и нажать кнопку «Upload and Decompile».
- Процесс декомпиляции здесь выглядит так (красная строка – прогресс, с указанием конкретного процесса, дублируется внизу экрана в области с заголовком Decompilation Results).
- После окончания процесса статус сменяется на окно такого вида, в котором присутствует возможность скачать полученные файлы.
- Предпросмотр файлов находится внизу страницы и позволяет оценить степень успеха после окончания. Файловая структура сохранена в том виде, в котором будет скачиваться архив, со всем древом каталогов и подкаталогов. Если содержимое хотя бы одного из них прочесть трудно, значит обфускацию обойти не удалось.
- Все файлы запакованы в архив и выглядят так.
После распаковки с ними можно делать что угодно. Облачный сервис предоставляет доступ без ограничений, хоть и показывает много рекламы в процессе своей работы. Для функционирования используется декомпилятор JaDX, который может не удовлетворять требований некоторых проектов. Ссылку на проект можно опубликовать на одной из соцсетей. Импорта на github нет, что тоже не очень удобно для конечного разработчика, у которого нет под рукой нужных инструментов.
Источник: