"Удачная" продажа
Добрый день, и сегодня мы вместе начинаем шествие по просторам сети Интернет в поисках всяких вкусняшек для операционной системы Android. Мне несказанно повезло сегодня, даже дважды: сегодня пятница, и вкусняшка нашла меня сама. Нашла меня на Авито. Решился от барахла в праздник избавиться, а тут счастье привалило… весит 763983 байт, md5-сумма e0d50226def5da4e5cd81d7abee95636. А привалило в виде смс следующего содержания:
«Кто-то считает себя умнее других» - сразу подумал я, но и мысли не было, что сразу кинут ссылку на малварь. Думал на платную подписку какую-нибудь ссылка…
Итак, распаковываем малварь с помощью apktool, попутно переводим dex в jar (для простоты понимания картины в целом). Открываем AndroidManifest.xml и с самого начала видим типичную конфигурацию вредоносного ПО:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED">
<uses-permission android:name="android.permission.DEVICE_POWER">
<uses-permission android:name="android.permission.WAKE_LOCK">
<uses-permission android:name="android.permission.RECEIVE_SMS">
<uses-permission android:name="android.permission.SEND_SMS">
<uses-permission android:name="android.permission.CALL_PHONE">
<uses-permission android:name="android.permission.READ_PHONE_STATE">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
<uses-permission android:name="android.permission.INTERNET">
<uses-permission android:name="android.permission.READ_CONTACTS">
<uses-permission android:name="android.permission.GET_TASKS">
<uses-permission android:name="android.permission.WRITE_SETTINGS">
Вполне себе обычное «загружаюсь при включении, шлю смс, веду и отсылаю логи». В остальном в манифесте ничего интересного: сервисы с говорящими именами, да бутресиверы, в общем, типичный бот для Android. Весь вредоносный код лежит в пакете com.avito (какая ирония). Исходя из манифеста, при запуске начинает свою работу com.avito.MainActivity_. Который кстати, использует AlarmManager в качестве таймера для отстука в админку. Так вот, вредонос добавляется в админы и делает запрет на отключение Wifi. Если пойти вниз по потомкам, то наткнемся на метод a() в классе com.avito.StartActivity. Непонятно, зачем нужно было столько лишних наследований. Возможно, программист ходил сбить детект или запутать себя реверсера.
По таймеру бот стучится на сервер для запроса и выполнения команд. Полный URL выглядит так: http://xxx/admav7/get.php. Данные передаются методом POST, содержащий две переменные: id и info. Значения переменных, как и всего остального в коде, носит говорящие имена. id получается следующим кодом:
public static String a(Context paramContext)
{
StringBuilder localStringBuilder = new StringBuilder();
localStringBuilder.append(c(paramContext));
localStringBuilder.append(a());
localStringBuilder.append(d(paramContext));
return a(localStringBuilder.toString());
}
На выходе метод возвращает кучу системных настроек формата name:value,{space}… куда попадает страна, IMEI, модель устройства, изготовитель, версия ОС и т.д. А в info попадает Build.VERSION.RELEASE.
В результате запроса бот получает команду. Возможные команды: отправка смс, набор номера, ussd-запрос, логирование и отправка всех смс на сервер. Команды закодированы в base64. После выполнения каждой команды бот отчитывается перед админкой. (http://xxx/admav7/set_result.php). Для вызгрузки смс бот обращается к скрипту load_sms.php.
Помимо вышеупомянутого имеется форма для перехвата данных банка Comerzbank (не понятно правда зачем). Судя по алгоритму бот необходим для отправки платных смс и/или взаимодействие с банками через ussd. Возможно, еще и распространение через свой список контактов. Решив погуглить команды в надежде побольше узнать о «чудо-программисте» я нашел статью на хабре обзором того же вредоноса, сделанном в августе 2014. Видимо, не нашли.