Как взломать платное приложение на Android

Admin

Original poster
Administrator
Сообщения
916
Реакции
753
Посетить сайт
Ни один разговор о взломе и модификации приложений не обходится без упоминания дизассемблера, дебаггера, формата исполняемых файлов и вездесущей IDA Pro. Однако в случае с Android все намного проще, и здесь для вскрытия и даже внедрения кода в приложение совсем не обязательно использовать все эти инструменты. Код можно легко декомпилировать обратно в Java и модифицировать, используя пару простых инструментов и текстовый редактор.

Этой статьей мы начинаем цикл, посвященный вскрытию и модификации приложений для Android. Первая часть — вводная, поэтому никакого хардкора: мы разберемся в устройстве пакетов APK, научимся разбирать APK на части, декомпилировать его код, вносить правки и собирать обратно, и в качестве примера взломаем одно популярное приложение из маркета. Вторая статья будет целиком посвящена внедрению бэкдора/вируса в чужое приложение. Это уже не просто правка нескольких строк, а глубокая модификация.Третья статья — методы обфускации и их обхода. Все больше разработчиков используют нетривиальную обфускацию, чтобы осложнить жизнь реверсерам. Мы распутаем их код и опять же внесем правки в приложение. Также не лишним будет прочесть другие наши статьи по написанию вирусов для андроид:


Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.




Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

,

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

,

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

,

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.



Снаряжаемся
Для выполнения описанных в статье действий понадобится ряд инструментов, и главный инструмент — это Linux. Да, многие из названных далее программ могут работать и в Windows, но в любых операциях, связанных с Android и его приложениями, лучше не полагаться на детище Билли. В Linux практически все сделать проще, командная строка здесь в разы удобнее (она нам ох как понадобится), а некоторые инструменты просто недоступны для других ОС.

После установки Linux в виртуалку или второй системой сразу устанавливаем средства разработки на Java и виртуальную машину. В Ubuntu это можно сделать с помощью одной команды:
Код:
$ sudo apt-get install openjdk-7-jdk
Также нам нужны четыре инструмента для распаковки и декомпиляции приложений:
Для удобства создадим в домашнем каталоге подкаталог Android и скачаем эти инструменты в него:
Код:
$ cd ~
$ mkdir ~/Android && cd ~/Android
$ wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.2.0.jar
$ wget https://github.com/skylot/jadx/releases/download/v0.6.0/jadx-0.6.0.zip
$ wget https://github.com/appium/sign/raw/master/dist/sign.jar
$ wget https://bitbucket.org/JesusFreke/smali/downloads/baksmali-2.1.3.jar
$ mkdir jadx && cd jadx
$ unzip ../jadx-0.6.0.zip
Добавим в конец файла ~/.bashrc следующие строки:
Код:
alias apktool='java -jar ~/Android/apktool_2.2.0.jar'
alias jadx-gui='~/Android/jadx/bin/jadx-gui'
alias baksmali='java -jar ~/Android/baksmali-2.1.3.jar'
alias sign='java -jar ~/Android/sign.jar'
alias javac='javac -classpath /home/j1m/Android/android-sdk-linux/platforms/android-23/android.jar'
alias dx='/home/j1m/Android/android-sdk-linux/build-tools/23.0.3/dx'
Они нужны для того, чтобы вместо длинных и неудобных команд вроде java -jar ~/Android/sign.jar можно было набрать простоsign.
Вскрываем подопытного
Теперь нам нужно найти приложение, которое, во-первых, нетрудно расковырять, а во-вторых, которое несет какую-то пользу и достаточно известно. То есть брать простейшую софтину только для того, чтобы было не очень сложно разобраться в ее коде, мы не будем, а вместо этого устремим свой взор на топ Play Store. Практически идеальный кандидат на эту роль — выпущенный два месяца назад ASAP Launcher, удобнейший домашний экран с массой полезных и неординарных функций.

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

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

: открываем

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

в Play Store, копируем URL из адресной строки и вставляем в строку поиска на APKPure. Далее нажимаем кнопку Download APK и ждем окончания загрузки.
a4a825cf605a8e11262fca60813086d7.png

Для удобства переименуем пакет в asap.apk:
Код:
# cd ~/Downloads
# mv ASAP Launcher_v1.16_apkpure.com.apk asap.apk
Разархивируем с помощью unzip:
Код:
# mkdir asap; cd asap
# unzip asap.apk
Да, APK — это обычный архив ZIP, но тем не менее он имеет четкую структуру:

  • META-INF — каталог, содержащий файлы MANIFEST.MF, CERT.MF и CERT.RSA. Первые два — список всех файлов пакета и их контрольных сумм, последний содержит открытый ключ разработчика и созданную с помощью закрытого ключа цифровую подпись файла CERT.MF. Эти данные нужны, чтобы при установке пакета система смогла выяснить, что пакет не был модифицирован и действительно создан его автором. Это важно, так как, поскольку нет возможности подделать цифровую подпись пакета (для этого нужен закрытый ключ), модифицированный пакет придется подписывать другим ключом;
  • res — ресурсы приложения. Здесь находятся иконка (mipmap), переводы строк (values), изображения (drawable), а также описания интерфейса приложения (layout). Все их можно модифицировать, чтобы изменить внешний вид приложения. Правда, файлы XML придется сначала «разжать» — для улучшения производительности они хранятся в бинарном формате;
  • classes.dex — код приложения в форме байт-кода виртуальной машины Dalvik. Обычно приложения содержат только один такой файл, но, используя директиву multiDex, разработчик может заставить среду разработки разбить его на множество более мелких для улучшения производительности или преодоления ограничения на 65 536 методов в одном dex-файле;
  • AndroidManifest.xml — манифест приложения, описывающий его структуру, включая активности, сервисы, обработчики интентов и так далее. Опять же в формате бинарного XML.

Также пакет может содержать другие каталоги, например assets (любые файлы, включенные разработчиком, в данном случае — шрифты и база данных) и lib (нативные библиотеки, созданные с использованием Android NDK).

Изучаем код
Само собой разумеется, просто разархивировать пакет недостаточно. Чтобы разобраться в работе приложения, необходимо декомпилировать файл classes.dex.

Для этого мы воспользуемся jadx-gui. Запускаем, выбираем asap.apk и видим слева список пакетов Java, включенных в APK. В данном случае это пакеты android.support — официальная библиотека Google, реализующая поддержку функций новых версий Android в старых (например, чтобы получить Material Design в Android 4.1), com.google.android.gms — Google Mobile Services, com.nispok.snakbar — реализация GUI-элемента snakbar, а также несколько других.
4905402e7fcd557338b94ea96f6b1b88.png

Основной код приложения содержится в пакете com.citc.asap, именно такое имя носит и само приложение в Google Store и на устройстве. Открываем его и видим больше десятка каталогов и множество исходников Java. Наша задача — сделать приложение «оплаченным», не платя за него. Но как найти нужный файл, реализующий проверку на оплату? Скорее всего, он будет содержать в имени слово billing. Пробегаемся по исходникам в поисках нужного нам файла и натыкаемся на исходник BaseBillingFragment в подкаталоге (пакете) fragments:
82b41196652391f8f4b5f465a840ef29.png

Это очень простой класс Java, в котором есть интересный метод:
Код:
protected boolean hasPrime() {
  return this.mHasPrime;
}
Все, что он делает, — просто возвращает значение поля mHasPrime, однако интересен он не этим, а своим именем. Дело в том, что платная (точнее, оплаченная) версия ASAP называется Prime, и очевидно, что метод hasPrime как раз и нужен для проверки оплаты приложения. Чтобы подтвердить свою догадку, сохраним декомпилированные исходники (File -> Save all) в каталог и попробуем найти в них вызовы hasPrime():
93f5ea376a539ac6fb3873b0fe976824.png

Совпадений немного, основной «пользователь» hasPrime() — это SettingsFragment, то есть исходник, отвечающий за формирование окна настроек. Учитывая, что Prime-версия отличается от бесплатной именно тем, что в ней разблокированы дополнительные поля настроек, уже сейчас мы можем быть на 90% уверены, что hasPrime() — нужный нам метод. Скорее всего, именно с его помощью приложение выясняет, куплена ли Prime-версия. Осталось только убедиться в этом окончательно, подменив код метода на свой.
Вносим правки
Метод hasPrime() очень прост: он возвращает значение поля mHasPrime, которое имеет тип boolean. Нетрудно предположить, что в случае, если приложение оплачено, hasPrime() вернет true, иначе вернет false. Наша задача — сделать так, чтобы метод всегда возвращал true и остальная часть приложения думала, что приложение оплачено, и разблокировала дополнительные опции в окне настроек.

К сожалению, сделать это с помощью прямой правки исходного кода не получится: приложение нельзя скомпилировать обратно. Однако никто не запрещает дизассемблировать код, внести правки и собрать его вновь. И как раз здесь нам понадобится apktool. Дизассемблируем APK:
Код:
$ apktool d -r asap.apk
В текущем каталоге появится подкаталог asap. Открываем файлasap/smali/com/citc/asap/fragments/BaseBillingFragment.smali и находим hasPrime(). Декларация метода будет выглядеть так:
Код:
.method protected hasPrime()Z
  .locals 1
  .prologue
  .line 167
  iget-boolean v0, p0, Lcom/citc/asap/fragments/BaseBillingFragment;->mHasPrime:Z
  return v0
.end method
Это и есть дизассемблированный листинг, и, как ты видишь, он на порядок проще, чем дизассемблированный код нативных приложений. В целом здесь все тривиально:
  • .method protected hasPrime()Z — объявляет protected-метод, который возвращает значение типа boolean (Z);
  • .locals 1 — говорит виртуальной машине, что метод использует в своей работе один регистр (в данном случае он будет содержать возвращаемое значение);
  • .prologue и .line 167 — директивы, необходимые для отладки, на ход исполнения не влияют;
  • iget-boolean v0, p0 ... — получает значение поля типа boolean и записывает в регистр v0, регистр p0 — это нулевой параметр, он всегда равен имени класса (this);
  • return v0 — возвращает значение регистра v0;
  • .end method — закрывает тело метода.
Теперь мы должны изменить данный метод так, чтобы он возвращал true независимо от значения поля mHasPrime. Мы могли бы сделать это вручную, но проще написать новый метод на Java:
Код:
public class Test {
  public boolean hasPrime() {
    return true;
  }
}
И пропустить его через компилятор и дизассемблер:
Код:
$ javac Test.java
$ dx --dex --output=Test.dex Test.class
$ baksmali Test.dex
На выходе получаем следующий ассемблерный код:
Код:
.method protected hasPrime()Z
  .registers 1
  const v0, 1
  return v0
.end method
Ты уже должен сам догадаться, что он объявляет константу v0 со значением 1 и возвращает ее (в Dalvik тип boolean — это int, который может иметь значение 1 — true или 0 — false). Осталось только вставить этот код вместо оригинального и собрать пакет обратно:
Код:
$ apktool b asap
Пакет появится в каталоге asap/dist. Переименуем его, чтобы не запутаться:
Код:
$ mv asap/dist/asap.apk asap-fake-hasPrime.apk
И подпишем с помощью тестового ключа:
Код:
$ sign asap-fake-hasPrime.apk
В результате в текущем каталоге появится файл asap-fake-hasPrime.s.apk. Остается только закинуть его на карту памяти и установить, удалив перед этим оригинальное приложение.
93faaa50dc8b27c8a1a83db931dc3e6e.png

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

Большинство других приложений вскрыть так же просто, однако есть достаточное количество экземпляров, пропущенных через обфускаторы и различные системы защиты. С ними все несколько сложнее, и таким приложениям будет посвящена третья статья цикла. Во второй статье мы рассмотрим, как тот же самый метод модификации использовать для внедрения собственного кода.
 
  • Like
Реакции: ERMAG
B

BINGO_SHARK

.бля, Lucky Patcher делает ту же самую работу + взломанный ГП. Зачем столько еботни?
 
C

chink

Был бы такой способ на IOS, а то вчера вышла 10.3.1 ,и Джейил Брейк снова пошёл куда подальше(
 
Название темы
Автор Заголовок Раздел Ответы Дата
Support81 Как взломать сайт за 5 минут: уязвимость в плагине Ultimate Member дает полный доступ к WordPress Новости в сети 0
A Как взломать аккаунт в инстограме Вопросы и интересы 1
D Как взломать телефон с помощью зарядки juice jacking? Уязвимости и взлом 2
D Как взломать вай-фай(wep,wpa,wpa2,wps) Уязвимости и взлом 1
ㅤ ㅤㅤㅤ Как взломать rar. Архив Вопросы и интересы 5
K Куплю Как взломать бота телеграм Все что не подошло по разделу 1
Denik Интересно Как взломать пароли с помощью флэшки Уязвимости и взлом 3
ㅤ ㅤㅤㅤ Интересно Как взломать почту.Майл/Яндекс/Gmail с помощью кали Линукс Уязвимости и взлом 5
П Как взломать вк? Вопросы и интересы 6
M Как взломать Telegram Новости в сети 0
V Как взломать самолёт? Уязвимости и взлом 0
V Как взломать веб–сайт Полезные статьи 1
T Как взломать Wi-Fi со входом через браузер (SMS и прочее) Полезные статьи 0
H Как взломать кинотеатр? Вопросы и интересы 4
N Как взломать радио в маршрутке Вопросы и интересы 6
S Как взломать сайт Полезные статьи 1
L Как взломать rar архив ? Вопросы и интересы 6
F Как взломать страницу друга, даже если он сменит пароль!! Полезные статьи 1
A Как взломать почтовый ящик Полезные статьи 0
K Как взломать сервер андроид приложения? Вопросы и интересы 3
P Как взломать зашифрованный файл MyWinLocker 40? Уязвимости и взлом 0
G Как взломать ВК через почту ? Уязвимости и взлом 0
M Android\Гайд|Как взломать теплый круг общения?|Вк|Ок|Qiwi|INST|и |Все,что можно подтвердить SMS| Уязвимости и взлом 1
RAPAX Как легко взломать ваш скайп Полезные статьи 0
Emilio_Gaviriya Статья Metadata Cleaner: Как эффективно защитить свою приватность при обмене файлами. Анонимность и приватность 0
Emilio_Gaviriya Как вычислить местоположение по IP-адресу? Статьи 0
Emilio_Gaviriya Статья Как работает JSON Web Token. Анонимность и приватность 0
Emilio_Gaviriya Статья Как происходит ICMP атака. Уязвимости и взлом 0
Emilio_Gaviriya Статья Как ловить хакеров на живца. Уязвимости и взлом 0
Emilio_Gaviriya Как работать с Search4Faces. Статьи 0
Emilio_Gaviriya Статья Как найти Wi-Fi точки. WiFi/Wardriving/Bluejacking 0
Emilio_Gaviriya Статья Как распространяются вирусы? Вирусология 0
Emilio_Gaviriya Статья Как найти человека? Полезные статьи 4
Emilio_Gaviriya Статья Как обнаружить 10 популярных техник пентестеров. Уязвимости и взлом 0
Emilio_Gaviriya Статья Как работает Анти-DDoS. Уязвимости и взлом 0
Emilio_Gaviriya Статья Как получают привязанный к Telegram мобильный номер. Анонимность и приватность 0
Emilio_Gaviriya Статья Как заразить компьютер с помощью обычного ярлыка. Полезные статьи 0
Emilio_Gaviriya Статья Защита конфиденциальности: Как сбросить данные на Android в экстренных ситуациях. Полезные статьи 0
Emilio_Gaviriya Статья Безопасность в сети: Как избежать угроз при использовании коротких ссылок. Уязвимости и взлом 0
Emilio_Gaviriya Статья Как вас деанонимизируют силовики. Анонимность и приватность 0
Emilio_Gaviriya Статья Как следит провайдер? Анонимность и приватность 1
Emilio_Gaviriya Статья Как вычисляют мобильник? Анонимность и приватность 0
Support81 Как хакеры взломали мир: 14 самых громких взломов 2023 года Новости в сети 1
DELTABEK Как зарабатывать 100.000 рублей в день на арбитраже криптовалют? Способы заработка 5
Support81 Как минимум 7 друзей ShadowSyndicate: компании всего мира под прицелом киберальянса Новости в сети 0
Traven Как создать свою криптовалюту без знаний и зарабатывать 40000$ в месяц (паста) Способы заработка 0
yaNaSvyazi [Wealth Whispers] [Udemy] Как использовать ChatGPT для YouTube (2023) Способы заработка 0
yaNaSvyazi [Виталий Бруновский] [Udemy] Как заработать с помощью ChatGPT? (2023) Способы заработка 0
yaNaSvyazi [Катерина Яшина] Как заработать на нейросетях первым (2023) Способы заработка 0
alexgoldboy Как вернуть убытки на Pocket Option? Ищу работу. Предлагаю свои услуги. 1

Название темы