Pull to refresh

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

В этой статье я расскажу о очень необычной защите приложения от вырезанного активити (чтоб лишний раз не пиарить продукт назовём его «приложение-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 после своего парсинга возвращает верные объекты и прога запускается.


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


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

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.
Change theme settings