Компилирование apk. Как декомпилировать приложение на Android и зачем? — Вместе с Android Как декомпилировать приложение на Android и зачем? — Вместе с Android. Работа с системными APK

22.07.2015

Очень редко у пользователя устройств под управлением Android возникает необходимость изменить программу под себя. Добавить что-то, или наоборот убрать. Например, надоедливый баннер с рекламой. Или, к сожалению, проверку лицензии. Ведь программы надо покупать, а не ломать! Но сейчас поговорим не об этом, а о том, какими средствами и когда следует прибегать к декомпиляции приложений на Android.

Работа с системными APK

Для этого руководства вам понадобятся следующие инструменты для установки. В этой статье не рассматриваются установки упомянутых выше инструментов. Вся наша работа будет выполнена в каталоге под названием «Работа в вашем домашнем каталоге». Теперь скопируйте пакет на свой компьютер.

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

Кому это нужно

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

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

Препарирование. Отключаем рекламу

У вас должно быть что-то вроде. Наконец, мы обратились к коду! Хорошее новое: мы действительно можем видеть, что происходит в логарифме! Мы должны сделать приложение отлаживаемым! Но самое главное, именно в этом файле отладка включена или отключена. После открытия он должен выглядеть так.

Теория

В большинстве случаев декомпиляция приложения не вызывает особых проблем. Для каждой задачи, которую нужно проделать, написаны программы, работающие на любой платформе где можно установить Java Runtime. Итак, суть декомпиляции заключается в следующем: Вы можете либо просматривать декомпилированный код виртуальной машины Dalvik, а также все файлы ресурсов приложения (манифест, разметка и т.д.). А можете преобразовать код Dalvik в код Java. В первом случае программе передается путь к apk-файлу. Во втором из apk-файла (который по сути обычный архив) нужно вытащить файл. Этот файл содержит весь исполняемый код для машины Dalvik (да, весь код объединен в один файл). Специальная программа преобразует код Dalvik в код Java, который потом можно открыть любым java-декомпилятором. Казалось бы, второй способ предпочтительнее, но есть одна хитрость. И заключается она в том, что некоторые участки кода невозможно конвертировать, либо логика кода становится далека от того, как писал разработчик. Для простых программ этого конечно достаточно, но для понятия всего кода конечно обращать внимание стоит и на Java, и на Dalvik. Давайте же наконец поговорим о том, что конкретно нам нужно делать для декомпиляции Android приложений.

Если каким-то образом установка завершилась неудачно

Чтобы включить отладку, добавьте в тег приложения следующее. Удалите любую предыдущую версию приложения и установите новую. Попробуйте переустановить приложение. Вы должны увидеть имя пакета приложения в разделе отладки. Как вы можете видеть, очень просто получить доступ к коду приложения. Имейте в виду все это при разработке приложения и быть в безопасности!

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

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

Решение

Прежде всего поговорим о полной декомпиляции приложения. То есть, вместе с распаковкой всех вложенных в apk xml-файлов. Для этого потребуется утилита apktool . Все что нужно — это запустить утилиту с правильными параметрами: java -jar apktool.jar d app.apk . Флаг d означает, что приложение будет декомпилировано. Последний параметр – путь к apk-файлу. Для удобства я создал bat-скрипт и положил его рядом с программой.

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

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

Shell

java -jar apktool.jar d app.apk pause

jdgui . Они обе также бесплатные и с открытым кодом. Вам необходимо открыть apk-файл с помощью архиватора (7zip , например) и извлечь в папку с dex2jar файл classes.dex .


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

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

После чего запустить утилиту следующей командой. Это преобразует код машины Dalvik в код Java. Если преобразование завершилось успешно, Вы получить файл classes.jar . Этот файл открываем в jdgui.


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

Один из методов, который вы можете применить, - это. Отображает код в выделенной синтаксисом форме. Работает в фоновом режиме. Пожалуйста, ознакомьтесь с информацией о лицензии перед использованием любой части кода в любом проекте. Не работает с системными приложениями в большинстве телефонов. Медленное подключение к телефонам с одноядерными процессорами.

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

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

Бывает после релиза приложения его исходники куда-то деваются. Правда ведь, такое постоянно случается? И ничего не остается кроме как декомпилировать его и подправить несколько сотен строк кода и все это нужно сделать максимально быстро.

В меню «Настройки» вы должны увидеть опцию «Инструменты разработчика». Это позволит использовать режим разработчика. Перейдите в меню «Инструменты разработчика» и включите отладку. Подключите устройство к компьютеру. Чтобы извлечь установленное приложение из вашего устройства на компьютер, подключив его к устройству, введите его в командной строке.

Вы должны увидеть список пакетов. Если вы не согласны с приложением, которое вы пытаетесь снять с устройства, перейдите на страницу приложения в веб-браузере вашего настольного компьютера и в нем должно быть указано имя пакета. Теперь возьмите имя пакета и введите следующую команду.

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

Декомпиляция

Для Android"а существуют следующие утилиты:
  • ApkTool для декомпиляции ресурсов.
  • Dex2Jar для преобразования dex в jar.
  • JD-GUI для получения исходников из jar.
  • еще рекомендую JAD , некоторые места лучше декомпилирует чем JD-GUI.
Информации по их использованию в интернете достаточно.

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

Замените путь на путь, найденный в предыдущей команде. Теперь вы можете видеть, что действительно происходит в приложении. Предоставим все приложения для мошенников! Многие люди делают это из чистого любопытства. Другие пользуются возможностью прямого доступа к изображениям, звукам и другим активам своих любимых игр или приложений.

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

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

Переопределение классов

Итак, jar это библиотека, так почему бы просто не подключить ее к новому проекту? Кидаем ее в папку libs, наследуемся от главной активити и компилируем. Все работает, главное чтоб не совпадали имена классов, поэтому названия пакетов должно отличаться иначе как минимум совпадут сгенерированные BuildConfig и R.

Таким способом можно отнаследоваться от Activity, Service, BroadcastReceiver и, возможно, некоторых других классов объявляемых в манифесте, так же в манифесте нужно будет указать новые имена классов, иначе они не будут использоваться.

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

Излишне говорить, что это очень сложно. С помощью следующей команды вы можете перенаправить свой вывод в файл, который можно открыть в браузере. Мобильные приложения часто рассматриваются как приложения черного ящика. Однако эти приложения часто страдают от тех же уязвимостей, что и их веб-приложения.

Теперь можно переопределить виртуальные функции, но и только, тем более ключевое слово final не позволит это сделать и отнаследоваться тоже, поэтому идем дальше.

Замена классов

Разархивировав jar библиотеку получим class файлы, это скомпилированные классы, заметим, что при сборке проекта в папке bin/classes лежат те же class файлы, а что если подсунуть туда файлы из библиотеки…

Не все так просто, для начала нужно скомпилировать проект. Чтобы использовать классы исходного приложения нужно его как-то присоединить к проекту, но при этом не экспортировать. Делается это просто: из папки libs Эклипс сам экспортирует библиотеки, поэтому перемещаем jar библиотеку в папку lib и подключаем к проекту, в Эклипсе это Project->Preferences->Java Build Path->Libraries->Add Jars… далее во вкладке Order and Export нужно убедиться, что не установлен чекбокс, потому что экспортировать библиотеку нам не нужно, все будет в class файлах.

Шаг второй: распаковать и декомпилировать

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

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

Теперь берем какой-нибудь класс из декомпилированных исходников приложения, исправляем в нем ошибки компиляции, добавляем, например, показ диалога, чтоб убедиться, что используется именно новый класс. Далее очищаем проект, в Эклипсе это Project->Clean, копируем class файлы в папку bin/classes, собираем проект и все работает!

При следующих сборках проекта нет необходимости его очищать, так что использовать такой способ достаточно удобно. Для облегчения исправления ошибок после декомпиляции я использовал исходники полученные из JD-GUI и JAD, обычно этого было достаточно.

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

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

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

Это хорошая практика для того, чтобы увидеть, что что-то было настроено неправильно. Если приложение построено правильно, нажмите 2 и скройте отображаемый скрипт. Соблюдайте осторожность. Используйте опцию «Найти все», и должно быть найдено около 190 строк. Итак, теперь вам нужно пройти каждую выделенную строку, чтобы убедиться, что вы не пропустите ни одного, когда мы изменим цвет фона приложения.

Вставьте строку в верхнюю и нижнюю строки, но нам нужно ее изменить. Итак, теперь вы должны иметь в нижней строке диалогового окна «Заменить». Для тех, которые вы найдете, измените строки, чтобы использовать новую. Поэтому мы изменили фон, теперь мы собираемся изменить цвет текста. Вы найдете около 166 найденных строк.

Заключение

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

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

Поэтому удалите «Инверс» из этих строк. Замените значение на. Разделители не требуют объяснений, и мы можем изменить их шестнадцатеричные значения, если вы хотите. Сделайте то же самое для линии 479, изменив «свет» на «черный». Может быть, с этого момента вы будете более благодарны тем и темам приложений!

Там есть текстовые файлы, которые указывают на черный. Ниже вы узнаете, как это сделать. Поэтому пройдите через них и сделайте их такими. Существует также переменная, которая соответствует строке. Вы увидите, что это идентификатор для темы. Вам нужно будет изменить его на общедоступный идентификатор противоположного стиля темы. Диалог, вы хотите создать тему. Это изменит окно всплывающего диалогового окна, чтобы использовать более темную тему на основе Голо, вместо более светлого Голо.



В продолжение темы:
Android

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