Взлом любого Android приложения за 5 минут.

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

Декомпилируем файлы APK онлайн

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

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

Мы же переходим непосредственно к осуществлению поставленной задачи — получению исходного когда. Выполнить это можно с помощью двух простых методов.

Способ 1: Decompilers online

Веб-сервис Decompilers online предназначен не только для объектов APK, но и работает с другими элементами, написанными на языке Java. Что же касается декомпиляции требуемого расширения, то здесь она происходит так:

Перейти на сайт Decompilers online

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

Способ 2: APK Decompilers

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

Перейти на сайт APK Decompilers

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

Шаг — установка Java

Java – разработанный в 1995 году язык программирования, его название, по всей видимости, взято из кинофильмов (смешной народец Джава из Звездных Войн).

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

Чтобы установить ее нужно:

  1. Войти в систему Ubuntu, и открыть Терминал при помощи клавиш Ctrl+Alt+T.
  2. В открывшемся окне для ввода/вывода информации в ОС Ubuntu воспользоваться командой sudo add-apt-repository “deb lucid partner” — позволяет подключить новый репозиторий, с которого можно загрузить Java. Для этого потребуется ввести пароль для получения прав Суперадминистратора, который задается при установке Ubuntu. Далее нужно воспользоваться следующими командами:
  3. sudo apt-get update для обновления списка источников.
  4. sudo apt-get install sun-java6-jre sun java6-plugin sun-java6-fonts для установки Java.
Читайте также:  Как подключить компьютер к интернету через телефон Android

Деобфускаторы

Как видишь, инструментов обмануть тебя и отбить желaние расковыривать приложение у разработчиков предoстаточно, поэтому и ты должен быть вооружен. В первую очередь нужен хороший дeкомпилятор. На всем протяжении цикла мы использовали бесплатный jadx, вполне неплохо справляющийся с этой задачей. Кроме этого, он имеет встроенный деобфускатор, трансформирующий идентификаторы вида a, az, l1l1l1l1… или состоящие из символов Unicode в цифро-буквенные идентификаторы, уникальные для всего приложения. Это позволяет никогда не спутать метод a() класса a с методом a() класса b и легко нaходить нужные идентификаторы с помощью глобального поиска.

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

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

По этой же причине нередко оказываются бессильны и деобфускаторы, такие как Java Deobfuscator и Simplify. Но это совсем не значит, что их не стоит применять. Java Deobfuscator работает исключительно с байт-кодом Java, поэтому перед тем, как его использовать, APK нужно перегнать в JAR с помощью dex2jar.

Далее следует натравить на полученный JAR-файл Java Deobfuscator с указанием используемого «трансформера»:

$ java -jar -input -output Приложение_после_ -transformer — path ~/Android/android-sdk-linux/platforms/android-23/

Деобфускаторы

Данная команда применит к приложению трансформер , расшифровывающий зашифрованные с помощью Allatory строки, и запишет результат в После этого приложение можно декомпилировать, но не с помощью jadx (он работает только с байт-кодом Android Dalvik), а, например, с помощью JD-GUI.

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

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

Читайте также:  Способы извлечения и замены файлов в прошивках Android-устройств

Использовать Simplify дoвольно просто:

$ java -jar -i каталог_с_файлами_smali -o Код до применения……и после применения Simplify

Но как быть с упаковщиками? Для этого есть инструмент Kisskiss. Для его работы нужен смартфон с правами root и активированным режимом отладки (ADB) в режиме root (в CyanogenMod можно включить в «Режиме для разработчиков»). Также на компе понадобится команда adb:

$ sudo apt-get install android-tools-adb $ sudo adb devices

Далее Kisskiss необходимо установить на смартфон:

$ wget -unpacker/archive/ $ unzip $ cd android-unpacker-master/native-unpacker $ sudo apt-get install build-essential $ make $ make install

Деобфускаторы

Запустить нужное приложение на смартфоне и выполнить команду (на компе)

$ adb shell /data/local/tmp/kisskiss

После этого Kisskiss сделает дамп памяти процесса и запишет его в odex-файл. Его можно сконвертировать в dex с помощью уже знакомого нам baksmali:

$ adb pull /system/framework/arm/ /tmp/framework/ $ baksmali -c -d /tmp/framework -x

И декомпилировать с помощью jadx.

Как пользоваться SmartApkTool

Прежде всего вам надо установить и настроить Java JDK и Apktool как указано выше.

Откройте программу SmartApkTool

Если Вам необходимо Декомпилировать приложение в SmartApkTool, то выберите данный пункт и необходимое приложение

Если компилировать, то

и выбрать файл в проекте

Для подписи приложения APK, нажать обзор, выбрать приложение и подписать

Все так легко и просто!

Альтернативный вариант

Для тех кому не понравился SmartApkTool, есть альтернатива Android MultiTool 

[lightgrey_box]

ru. Начал использовать Android с версии 1.5 и остается поклонником этой мобильной ОС по сей день.[/lightgrey_box]

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

Преамбула

Стоит отметить, что я опишу здесь лишь изменение таких apk-файлов, как и Все остальные декомпилируются похожим образом, но о них речи идти не будет, во всяком случае пока. Во всех статьях в качестве основы будет выступать AOSP Android Jelly Bean, то есть описанное здесь может не подходить для прошивок разных производителей, мы будем работать с чистым роботом. Важно понимать, что для создания мода ваша прошивка должна быть деодексирована, то есть каждый системный apk-файл не должен сопровождаться файлом .odex, этот файл должен быть уже встроен в приложение. Проверить это тоже легко: берём любой архиватор и открываем им приложение, внутри будет несколько файлов и папок, один из них —  Все стоковые прошивки одексированы! Если вы пользуетесь таковой — моды не ваше дело.

О том, где же взять эти файлы: можно отыскать в вашей прошивке по пути systemapp, по пути systemframework. Взять их можно непосредственно из телефона, а также из zip-архива с прошивкой.

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

Декомпиляция приложений

Кладём и в корень любого локального диска, мне удобен диск D.

Первое, что нужно сделать — установить , чтобы все приложения разбирались, скажем так, с проверкой по нему, всё же это главная кладовая графических ресурсов системы. Делается это командой apktool if В нашем случае файл лежит в корне диска D, поэтому придётся указать до него путь, получим следующее:

Файл установится в папку пользователя, то есть путь будем примерно следующим C:Usersusernameapktoolframework. Всегда устанавливайте framework-res из прошивки, с которой ведётся работа, повторная установка этой командой другого файла лишь заменит уже существующий.

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

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

Поступим схожим образом и с :

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

Компиляция приложений

Предположим, что мы что-то изменили в приложении, теперь собираем. Делаем это при помощи команды apktool b ***, где *** — имя папки, в которую было разобрано приложение. И у нас это папки framework-res и systemui в корне диска D. Поступать следует так:

Приложения собраны! Новые apk-файлы можно найти в папке dist, которая теперь существует внутри папок, куда разбирались приложения, например, D:framework-resdist

Стоит отметить, что некоторые системные приложения нужно разбирать и собирать с проверкой по , в таком случае нужно вводить команды, показанные на скриншоте, они отличаются лишь парой символов:

Обычно, кстати, компилирую/декомпилирую именно так.

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