Необычный подопытный

В этой статье я расскажу о очень необычной защите приложения от вырезанного активити (чтоб лишний раз не пиарить продукт назовём его «приложение-N»).

Итак, я скачал N, использующее разрешение на интернет.


<uses-permission android:name="android.permission.INTERNET" />

Ну-с, приступим


Логично предположить, что после того как я проверил работу приложения с выключенным интернетом, я тут же вырезал это activity, пересобрал и запустил нашего пациента. Сразу скажу, я рассчитывал на многое, на уведомление о сбое permission, на нормальный запуск, признаюсь даже думал об обычном вылете. Однако все мои предположения в миг рухнули как только N зависло в стадии загрузки.


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

Я думал это будет обычная рядовая операция по типу: «изменить шестнадцатеричную дамбу и вуаля, куча ресурсов, всё работает, все счастливы.


Будем разбираться


Итак есть очень много программ по декомпиляции dex в smali, однако мне необходимо декомпилировать сначала в java, т.к там всё более-менее понятно нежели в байт-коде.

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

После моих деяний я сделал поиск по всем файлам с запросом INTERNET.
И нашёл тот заветный файл, не дающий запуск приложения с отсутствием activity.

Вот кусок его кода (Java)



package com.N; 
import android.content.Intent; 
import android.content.pm.ActivityInfo; 
import android.content.pm.PackageInfo; 
import android.content.pm.PackageManager; 
import android.content.res.Configuration; 
import android.content.res.Resources; 
import android.content.res.XmlResourceParser; 

далее сама функция проверки на Smali



.line 896
    .local v3, "neededActivityInfo":[Ljava/lang/String;
    array-length v10, v3

    const/4 v8, 0x0

    move v9, v8

    :goto_27
    if-lt v9, v10, :cond_37

    .line 917
    const/4 v8, 0x1

    new-array v4, v8, [Ljava/lang/String;

    const/4 v8, 0x0

    .line 918 
    const-string v9, "android.permission.INTERNET" #Нужно вырезать
    aput-object v9, v4, v8 #Нужно вырезать 

То есть с вырезкой этого кода

const-string v9, "android.permission.INTERNET" 
    aput-object v9, v4, v8

наше хитрое N после своего парсинга возвращает верные объекты и прога запускается.


Конечный итог


Благополучно скомпилировавший, приложение запустилось и работало долго и счастливо.

Теги:
Android, dex, smali

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.