Как создать троян для андроид

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 подтверждения и поставить галочку в настройках «Неизвестные устройства».

Источник

Пишем троян под Андроид

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

Читайте также:  Андроид приставка для телевизора что выбрать

В классической Java есть класс под названием java.lang.ClassLoader. Его задача — загружать байт-код указанного класса (файл с расширением .class) в виртуальную машину во время исполнения приложения. Затем можно создать объект этого класса и вызывать его методы с помощью рефлексии. Такой вот способ динамической загрузки кода, который можно использовать для написания приложений с расширяемой функциональностью, или, попросту говоря, поддержкой плагинов.

В Android нет виртуальной машины Java и нет класса ClassLoader, но есть его аналог DexClassLoader, выполняющий ровно ту же функцию, но в отношении байт-кода Dalvik (и файлов .dex вместо .class соответственно). И, в отличие от настольной Java, где проще положить нужный jar-файл в CLASSPATH и не возиться с динамической загрузкой, в Android такой подход дает действительно много преимуществ, главное из которых в том, что функциональность приложения можно расширять и обновлять незаметно для пользователя и ни о чем его не спрашивая. В любой момент твое приложение может скачать файл с классом с сервера, загрузить, а затем удалить файл.

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

Как бы там ни было, динамическая загрузка классов — очень полезная штука при написании не совсем «белых» приложений, поэтому любой security-специалист должен знать, как этот механизм работает и как он используется в троянах.

ПРОСТЕЙШИЙ ПРИМЕР

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

В целом здесь все просто: код загружает jar-архив /sdcard/myapp/module. jar с нашим классом, загружает из него класс com.example.modules.simple. Module, создает объект и вызывает метод run(). Обрати внимание на три момента:

  • DexClassLoader умеет загружать как «просто» файлы .dex, так и jar-архивы, последние предпочтительнее из-за сжатия и возможности использовать цифровую подпись;
  • второй аргумент конструктора DexClassLoader — это каталог, который он использует для сохранения оптимизированного байт-кода (odex), для простоты мы указываем приватный каталог самого приложения;
  • в качестве аргумента метода loadClass всегда необходимо указывать адрес класса вместе с именем пакета.

Чтобы проверить данный код на работоспособность, создадим простейший модуль:
Не торопись создавать новый проект в Android Studio, можешь накидать этот код в блокноте и собрать его в jar-архив прямо из командной строки:

Удостоверься, что каталоги platforms/android-23 и build-tools/23.0.3 существуют, в твоем случае их имена могут отличаться.

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

ДОЛОЙ РЕФЛЕКСИЮ

Рефлексия — хорошая штука, но в данном случае она только мешает. Один метод без аргументов с ее помощью вызвать нетрудно, однако, если мы хотим, чтобы наше приложение имело развитый API модулей с множеством методов, принимающих несколько параметров, нужно придумать что-то более удобное. Например, использовать заранее определенный интерфейс, который будет реализовывать каждый модуль.

Читайте также:  Android не появляется меню

Применив такой подход к приведенному выше примеру, мы получим следующие три файла:

Файл ModuleInterface.java с описанием API:

2. Файл Module.java с реализацией нашего модуля:

3.Новый загрузчик модуля (помести в свое приложение):

КОГДА МОДУЛЕЙ МНОГО

С одним модулем разобрались, но что, если их будет много? Как вести учет этих модулей и не потеряться среди них? На самом деле все просто — для этого можно использовать hashmap. Еще раз изменим загрузчик: Данный код загружает все jar-файлы из указанного каталога, загружает их классы Module, создает на их основе объекты и помещает их в хешмап modules. Обрати внимание на трюк, использованный при загрузке класса и размещении объекта в хешмапе. Он нужен для простоты: вместо того чтобы выяснять принадлежность каждого модуля/класса к пакету, мы просто условились, что имя jar-файла модуля будет соотноситься с именем пакета по схеме com.example.modules.ИМЯ_JAR_ФАЙЛА, так что мы сразу знаем полный адрес класса каждого модуля.

Например, приведенный ранее модуль принадлежит пакету com.example. modules.simple (см. директиву package), поэтому его необходимо включить в jar-архив simple.jar (меняем —output=module.jar на —output=simple. jar в команде сборки). Когда придет время создать новый модуль (к примеру, remote_shell), первой строчкой в его исходниках ты укажешь package com. example.modules.remote_shell.Module; и запакуешь скомпилированный байт-код в jar-архив remote_shell.jar.

Имя jar-файла (без расширения) используется также в качестве ключа в хешмапе, поэтому, зная имя модуля, всегда можно запустить его методы:

БЕРЕМ МОДУЛИ С СОБОЙ

На данном этапе у нас уже есть приложение, способное загружать неограниченное количество модулей из указанного каталога и с удобством работать с ними. Осталось разобраться с тем, как распространять эти модули. Самый очевидный вариант — загружать их с сервера, пусть наш «троян» делает это раз в день, а после скачивания модулей запускает загрузчик модулей, чтобы подгрузить их в приложение. Рассказывать, как сделать это, я не буду, здесь все элементарно, и решение этой задачи ты найдешь в любой вводной статье или книге про разработку для Android.

Еще один вариант — включить модули в пакет с приложением. В этом случае наш троян будет иметь доступ к необходимым модулям сразу после первого запуска, что защитит от проблем с выходом в сеть. Когда же сеть появится, он сможет догружать модули с сервера, если это необходимо.

Чтобы включить модули в APK, их необходимо поместить в каталог assets внутри проекта (в нашем случае в assets/modules), а затем реализовать распаковщик модулей в нужный нам каталог. В коде это будет выглядеть примерно так:


Все очень просто. Код находит модули внутри пакета и поочередно копирует их в каталог /sdcard/myapp, из которого затем их можно будет подгрузить с помощью загрузчика.

Создать приложение для Android, которое сможет обновлять само себя и расширять свою функциональность незаметно для пользователя, довольно легко, и автор этих строк неоднократно видел применение такого метода в реальных троянах. Для чего эту технику будешь использовать ты — решать только тебе, однако я хотел бы напомнить, что наш журнал не поощряет любые незаконные действия, а автор статьи будет совсем не рад узнать, что научил кого-то писать трояны, которых для Android и так уже слишком много.

Источник

Оцените статью