- История реверс-инжиниринга одного SMS трояна для Android
- Безопасная установка приложения
- Анализ кода
- Заключение
- SMS-вирус под ОС Android или «Привет 🙂 Тебе фото…»
- Вступление
- 1. Подготовка
- 2. Установка
- 3. Вирус-приложение
- 4. Удаление?
- 5. Dr Web против вируса
- 5. Avast против вируса
- 6. Реверс-инжиниринг
- Послесловие
- Выводы
История реверс-инжиниринга одного SMS трояна для Android
Все началось с жалоб одного моего доброго друга, по совместительству владельца устройства на Android. Он жаловался, что оператор постоянно снимает с него деньги неизвестно за что. После звонков оператору выяснилось, что средства снимали за премиум SMS, которые мой друг якобы отправлял. Я сам неоднократно нарывался в Интернетах на подозрительные сайты, которые предлагают скачать apk с игрой/программой/Live Wallpaper, при установке которого выясняется, что это всего лишь программа, которая отправляет SMS на премиум номера. Но в этом случае если нажал кнопку, то «сам дурак», потому что правила в таких программках явно говорят, что последует отправка SMS на платные номера, да и ссылки они в итоге предоставляют на реальные программы.
Так или иначе, ко мне закралось подозрение, что здесь ситуация тоже завязана на таком роде деятельности, и я взялся разобраться, куда же все-таки утекают денежки.
Безопасная установка приложения
Начнем с того, что мой друг запамятовал, откуда он скачивал последние программы из сети на свой девайс, из него удалось вытрясти только следующую ссылку mobisity.ru (Осторожно, сайт распространяет вредоносное ПО!). Покопавшись на сайте, я вытащил оттуда APK.
Теперь, когда предыстория известна читателю, можно перейти к самому интересному — анализу приложения. Начнем с безопасной установки приложения, а именно, установим его на эмулятор и посмотрим как оно действует.
Запускаем штатный эмулятор Android, желательно версии 2.2 или выше (на более старые версии приложение не устанавливается), для этого запускаем эмулятор через AVD (Android Virtual Device Manager) и выполняем команду
В списке приложений появляется наблюдаем нашего трояна, под именем Music и с соответствующей иконкой.
Запускаем и наблюдаем процесс какой-то «установки», после которой нам предлагается нажать кнопку «далее»
Если нажать кнопку хардварную кнопку Menu, то можно будет открыть правила и прочесть, что после нажатия кнопки пойдет отправка SMS на платные номера. Ну и ладно, значит, пока что это из разряда «сам дурак». Так куда же постоянно утекают средства? Пока не понятно, исследуем дальше.
Анализ кода
Для анализа я использовал следующие инструменты: jd-gui, dex2jar и apktool.
Первым делом разберем APK при помощи apktool и посмотрим на структуру проекта. Для этого необходимо выполнить команду Анализ внутренней структуры проекта ничего интересного не дает, за исключением того, что в папке assets лежит непонятный файл data.xml, видимо он хранит какие-то данные, но зашифрован, так как, на первый взгляд, данные не поддаются простому анализу.
Ну что же, остается только смотреть код, для этого используем dex2jar. Вытаскиваем при помощи своего любимого архиватора файл из APK с названием classes.dex, и при помощи dex2jar преобразовываем его в jar файл. Полученный jar нужно открыть в программе jd-gui. Всё, теперь у нас есть весь (ну или почти весь) код приложения:
Прежде чем сломя голову бросаться анализировать код, я решил посмотреть файл AndroidManifest.xml, как правило из него можно вытащить много полезной информации о приложении.
Просмотрев файл, я заинтересовался BroadcastReceiver’ом с именем StartupReceiver — очевидно, что он запускает какой-то код при загрузке системы, на это указывают заявленные intent-filters.
По всей видимости, в случае необходимости, здесь производится биндинг с системным сервисом, который обеспечивает работу USSD запросов. Логично было бы предположить, что троян таким образом отслеживает баланс пользователя.
Кроме этого, в коде видно, что запускается сервис UpdateService.
Очевидно, что данный сервис при старте устанавливает при помощи планировщика AlarmManager запуск Intent, который является сигналом к запуску BroadcastReceiver’a с именем UpdateReceiver, а если точнее, то его метода — onReceive.
Здесь мы видим, что троян проверяет текущий баланс пользователя, прежде чем отправлять SMS. И кроме этого, он запускает AsyncTask с именем m, который отправляет запрос к скрипту mxclick.com/getTask.php. Скрипт по всей видимости отдает нужный номер, на который будет осуществлена отправка тех или иных SMS. Ну и в итоге UpdateReceiver выполняет отправку SMS, тем самым осушая баланс бедного пользователя.
Ну вот, собственно говоря и всё — дальше код можно не разбирать, мы увидели, что опустошение баланса пользователя достигается именно отправкой SMS на премиум номера. Однако, я наткнулся еще на пару интересных моментов, когда просматривал код трояна. Например, входящие SMS с номера 111, который является сервисным номером МТС, блокируются — таким образом, юзер вообще ничего не слышит и не видит, когда его баланс постепенно уходит в минус.
Этим занимается класс MessageReceiver, вот его определение в AndroidManifest.xml
Видно, что ему установлен высокий приоритет, таким образом ему удается первым обработать входящие сообщения на девайс. Ну и внутри метода onReceive, мы видим, что если SMS идет с номера 111, то intent перехватывается, то есть broadcast сообщение обрывается на этом обработчике и не идет дальше к остальным приложениям.
Еще один интересный момент, который на самом деле позволяет сообществу заставить мошенников ответить за свои поступки — зашифрованная база, о которой я упоминал в начале поста. Во время просмотра кода было выяснено, что файл с номерами был зашифрован алгоритмом Blowfish в режиме ECB. Это симметричный алгоритм шифрования, с хорошим ключом на его взлом могли бы уйти годы, но… Разработчики трояна особо не парились:
С известным ключом мне стоило только набросать пару строк на Яве, и файл был расшифрован:
Еще один момент — все USSD запросы проходят в фоновом режиме, то есть троян может сколько угодно проверять баланс пользователя, тот ничего не заподозрит. По всей видимости реализация фонового выполнения USSD запросов была скопирована разработчиками трояна с сайта commandus. В качестве домашнего задания читателям предлагается понять, почему была скопирована именно реализация с этого сайта и найти подтверждение тому в коде.
Заключение
Хотелось бы сказать, что разработка таких приложений является прямым нарушением закона РФ, а именно статей 159 и 273 УК РФ. Теперь у мошенников уже отмазаться не получится, так как средства с баланса снимаются не после нажатия абстрактной кнопки, где пользователь принимает на себя всю ответственность за последствия. Здесь баланс может опустошаться годами и пользователь может вообще ничего не заподозрить.
Мошенники, а таковыми по определению являются и контент-провайдеры номеров (потому что оказывают прямое содействие в получении прибыли незаконным или мошенническим путем) 8503, 7202, 7201, 7204, 7212, 3303, 3336 должны быть уголовно наказаны. Кстати, конкретных провайдеров для этих номеров можно посмотреть, например, на сайте Мегафона или Билайна. Дабы не быть голословным, привожу конкретные названия замешанных контент провайдеров, которым принадлежат данные номера: ИнкорМедиа ООО, СМС сервисы, ООО (Шутка дня), ООО Инвест Телеком и так далее.
Кроме этого, скорее всего какие-то данные о конкретных виновниках можно выцепить из URL, на который уходят запросы из трояна, а именно: mxclick.com/getTask.php. А вообще, заинтересованные читатели могут по возможности сами попробовать найти другие следы мошенников.
Лично я надеюсь, что глубокоуважаемые операторы Мегафон, Билайн, МТС, Теле2 и остальные примут серьезные меры по поводу контент-провайдеров, потому что они не проследили за использованием их номеров, и кто-то наконец докопается до настоящих виновников, которые разрабатывают и распространяют эти трояны и заставит их ответить по всей строгости закона.
Источник
SMS-вирус под ОС Android или «Привет 🙂 Тебе фото…»
*Оригинальная картинка, наглым образом вытащеная из ресурсов apk
[прим. apk — расширение файла установки приложения на ОС андроид]
Вступление
привет [смайлик] тебе фото https:// m**o*an.ru/oujr/380688086*6*
1. Подготовка
Поверхностно поискав в интернете информацию, было установлено, что ссылка в смс сообщении является ничем иным, как адресом на загрузку apk файла. А apk файл — вирусом «Trojan.SMSSend», заражающий мобильные устройства под управлением ОС Android. Главные задачи данного «зловреда» — перехватывать управление устройством и использовать его в своих целях: блокировка исходящих вызовов, отправка сообщений «с приветом» и другие мелкие пакости.
Перейдя по ссылке из браузера я благополучно получил ответ «403 Forbidden».
Понятно, значит, стоит фильтр по браузеру. Что ж, буду проверять «на кошках», как говорится.
Недолго думая, решил «положить на алтарь науки» свой планшет Samsung Galaxy Tab 2. Сделав бэкап, со спокойной совестью нажал на кнопку «Общий сброс». На всякий случай убедился, что на sim-карте нет денег и приступил к установке.
2. Установка
Захожу в настройки, в пункте меню «Неизвестные устройства», убираю галочку «Разрешить установку приложений из других источников, кроме Play Маркет».
Перейдя по ссылке из смс-сообщения, получил предупреждение браузера, следующего характера:
Соглашаюсь и нажимаю кнопку «Продолжить». Скачалось приложение F0T0_ALB0M.apk:
Устанавливаю. Ужасаюсь количеством permission (разрешений). Операционная система любезно предупреждает:
Это приложение может нанести вред устройству
Но я же не ищу легких путей, поэтому, «скрепя сердце», ставлю галочку «Я понимаю, что это приложение может нанести вред».
Когда приложение запрашивает права администратора, понимаю, что это последний этап. Нажимаю «Отмена», но диалог появляется снова. Эх, была не была, буду идти до конца, и нажимаю «Включить».
3. Вирус-приложение
Само приложение состоит из одной активити-картинки с обреченным котенком. Наверное таким образом разработчик пытался пошутить.
В этом месте, я немного забегу вперед (см. п.6) и приведу, код AndroidManifest.xml для лучшего понимания статьи.
В диспетчере приложений наш «зловред» гордо именуется «Google Play».
4. Удаление?
Благополучно заразив устройство, перехожу к фазе лечения. Сначала пробую удалить приложение. Захожу в «Диспетчер приложений» и вижу, что все кнопки заблокированы.
Понятно, значит, у приложения имеются права администратора и так просто удалить его не получится. Не беда, сейчас я их уберу. Захожу в пункт меню «Безопасность»->«Администраторы устройства» и убираю галочку напротив приложения.
Но, нет, не тут то было. Устройство благополучно переходит в настройки управления WiFi и зависает. Пришлось «прибивать» окно настроек.
Дальше хотелось решить вопрос «на корню», так сказать, и воспользоваться общим сбросом системы. Ну да, легко мне выбирать такой вариант — мои личные данные в бэкапе хранятся.
А как же обычные пользователи? У которых «внезапно» любимый телефон заразился вирусом. Они ведь даже исходящего вызова знакомому «тыжпрограммисту» не сделают. В общем, читерство это, не буду так делать.
Итог: штатными средствами нейтрализовать угрозу не удалось. Подключаем «тяжелую артиллерию».
5. Dr Web против вируса
Памятуя про хорошую лечащую утилиту «Dr.Web CureIt!», решил бороться с зловредом с помощью аналога под Android. Захожу на официальный сайт и качаю бесплатную версию антивирусника «Dr.Web для Android Light 9».
Устанавливаю, по WiFi обновляю сигнатуры.
Запускаю быструю проверку ― ничего.
Запускаю полную проверку ― тоже ничего.
Я разочарован! Печально вздохнув, удаляю антивирусник.
UPD от 6.09.14. На данный момент антивирусник успешно опознает данный зловред под детектом Android.SmsBot.origin.165. Алгоритм удаления такой же, как и при использовании Avast (см. ниже).
5. Avast против вируса
Скачиваю и устанавливаю версию «Avast-Mobile-Security-v3-0-7700».
При старте запускается экспресс-сканирование, которое никаких вирусов в системе не находит.
Ну и ладно, мозг подсказал очередную идею: вот есть какой-то пункт меню «Управление приложениями», а что если…
Да, действительно загрузился список приложений в системе.
Пункта «Удалить» нет. Поэтому, пробую остановить приложение. Остановилось.
Жду 2-3 секунды, приложение снова в работе.
Ладно, попробую с другой стороны. Запускаю принудительную проверку системы. О_о, обнаружено вредоносное ПО. Нажимаю «Устранить все» [прим. как-то это звучит в духе Дарта Вейдера или Далеков]. Avast сообщает, что удалить приложение не может, а нужно сначала отобрать права администратора у приложения. Появляется системный диалог:
Удалить все данные с устройства и вернуть заводские настройки? Нажмите «Да» если согласны, или «Нет» для отмены
И сразу же, поверх этого диалогового окна открывается «злополучное» окно настроек wi-fi. Нажимаю «Возврат», снова открываются настройки. Хорошо, хоть окно настроек не зависает.
Опять на тропу читерства меня толкают. Будем искать другое решение…
6. Реверс-инжиниринг
Посмотрим в исходный код приложения, благо на Android это не такая большая проблема. Много всего интересного…
Например, в классе SystemService указан url сайта lamour.byethost5.com (дизайн-студия).
Но больше всего мне понравился класс AdminReceiver, который является наследником системного класса DeviceAdminReceiver.
В этом классе есть переопределенный метод onDisableRequested, который срабатывает при отключении админполномочий для данного приложения. Полностью заблокировать кнопки в системном диалоге нельзя, поэтому разработчик вируса пошел на хитрость, он изменил текст сообщения на «Удалить все данные с устройства и вернуть заводские настройки? Нажмите «Да» если согласны, или «Нет» для отмены» и обильно прикрыл сверху назойливым окном настроек.
Бинго. Значит теперь я смело смогу нажать в данном диалоговом окне «Удалить» и планшет будет «здоров».
Послесловие
Таким образом, выполнив повторно пункт 5 данной публикации (не останавливаясь на последнем шаге), вирус версии 4.0 (согласно манифест-файлу) был побежден.
Почему не удалось напрямую из настроек убрать галочку админправ для приложения, а только используя Avast? Скорее всего, стоит очередная ловушка с переопределенным методом.
Выводы
Разработчики вирусов находят все новые лазейки.
Но, так или иначе, браузер и операционная система стали лучше защищать пользователей.
Мне необходимо было нажать 2 подтверждения и поставить галочку в настройках «Неизвестные устройства».
Источник