Вирусы под Android. №6 (Мониторинг приложений)

Тема в разделе "Вирусология", создана пользователем waydam, 12 окт 2016.

  1. waydam

    waydam

    Сообщения:
    464
    Баллы:
    16
    Всем привет из далёких уголков нашей любимой и необъятной страны. Сегодня мы поговорим о мониторинге приложений. Это важный урок, который позволит отслеживать приложения и считать статистику запусков. Для начала нужно понять что такое приложение и как оно работает.


    Нудная теория
    Любое приложение делится на две части:

    1. Background – сервисы и тому подобное.
    2. Activity – то что показывается юзеру.
    У приложения может быть много Activity, одни могут быть доступны из меню приложений андроида, а другие вызываются через код. Каждое activity имеет свое имя и структуру. К примеру, у нас есть приложение “com.microsoft.hack” (это имя для package) и есть activitystartpage“, тогда полное название данной activity будет “com.microsoft.hack.startpage“. Названия могут быть вложенными, это определяется структурой папок и расположением “.java” файлов.

    Подготовка к слежению
    Что нам потребуется?

    1. Создать процесс (сервис к примеру), который будет раз в N секунд запрашиватьActivityManager и проверять какое приложение наверху.
    2. Выполнять любые действия, принимая во внимания эту информацию.
    Для начала идем в Manifest, запрашиваем права, для работы с ActivityManager:

    Код:
    <uses-permission android:name="android.permission.GET_TASKS" />
    и регистрируем сервис:

    Код:
    <service android:name=".Monitor" />
    Создаем наш сервис, где будем вести обработку:

    Код:
    public class Monitor extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    return Service.START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
    throw new UnsupportedOperationException("");
    }

    @Override
    public void onCreate()
    {
    MyTimerTask myTask = new MyTimerTask();
    Timer myTimer = new Timer();
    myTimer.schedule(myTask, 0, 1000);
    }

    class MyTimerTask extends TimerTask {
    public void run() {
    // выполнение кода анализа процессов.
    }
    }
    }
    Запуск в первой activity, которая стартует при запуске приложения:
    Код:
    context.startService(new Intent(context, Monitor.class));
    Переходим к обработке:
    Код:
    ActivityManager am = (ActivityManager) Context.getSystemService(cnt.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
    app = taskInfo.get(0).topActivity.getClassName();
    //*log place
    После чего в app лежит та самая строка с activity.

    Важный момент: мы можем ставить обработку как на всё приложение, так и на отдельные его окошки.

    Как я узнаю какие существуют названия и как их посмотреть?
    Это очень просто, заместо “//*log place” пишем код:

    Код:
    Log.w("log",app);
    и увидим в logcat логи всех переключаемых приложений.

    Как мне вставить свою обработку?
    Нужно написать после получения переменной app:

    Код:
    if(app.equals("name_activity"){
    // делаем действия
    }
    Всегда приходит конец
    Вот и материал пришел к логическому концу. Это хорошая база для написание инжектов, обработки действий для запущенных приложений, сбора статистики и всего что может прийти Вам в голову.
    Спасибо за внимание =)

    7ая часть:

Поделиться этой страницей

Top