Отдел реагирования и цифровой криминалистики Angara MTDR и его эксперт Александр Гантимуров, руководитель направления обратной разработки Angara MTDR, продолжают исследовать новые версии вредоносных APK-файлов, которые распространяются в социальных сетях и мессенджерах под видом срочной продажи.
Новогодние праздники разработчики Android Mamont провели с пользой — улучшили защиту и усложнили жизнь исследователям. К примеру, новые модификации выявляют песочницы и факт исследования, а удалённые серверы злоумышленников теперь сложнее обнаружить и ещё сложнее заблокировать взаимодействие с ними. Подробно пройдёмся по нововведениям и посмотрим, что у них получилось.
Этой статьёй продолжаем серию публикаций по исследованию вредоносных APK.
-
«Evil»-бонус от банка, или как пройти опрос и потерять все деньги — об исследовании «МирСБП».
-
Шпион в твоём кармане — об исследовании BTMOB RAT.
-
Продам всё, что на фото. Недорого — об исследовании предыдущей версии.
Для тех, кому интересно, почему именно Mamont и откуда взялось это название, мы подготовили краткую историческую справку.
Если технические детали не так важны, то можно сразу пройти к советам, как не заражаться и как удалить ВПО с устройства.
Первое появление и возникновение названия
Вредоносные APK семейства Mamont представляют собой приложения для Android, которые используются для кражи финансовых средств и распространяются по России и странам СНГ. У таких APK разные разработчики и нюансы работы, но их объединяет способ доставки и схема работы. Первые упоминания появились в 2019 годy, и с лёгкой руки тогда ещё Group-IB с 2021 года стали называться «Мамонт» из-за схемы распространения и целевой аудитории. В дальнейшем сами злоумышленники подхватили термин Mamont/«Мамонт», и иногда его упоминание можно встретить в отладочных сообщениях вредоносных приложений.
В последние 5 лет большинство вредоносных APK, которые массово рассылаются в РФ, относят к семейству «Мамонт», если в самом приложении нет никаких других названий для идентификации. Отдельно стоят зловредные приложения, которые тоже распространяются по схеме MaaS: CraxsRat, BTMOB RAT, deVixor, Meet Cellik и другие.
Схема распространения
Злоумышленники маскируют APK под фотоархивы («Фото 24шт.apk»), видео в Telegram («Это ты на видео?») или приложения доставки и банков. Распространение происходит через WhatsApp, Telegram и фишинговые сайты с применением социальной инженерии для установки.
После установки Mamont запрашивает разрешения на SMS по умолчанию, разрешение на доступ к Accessibility Service и разрешение на установку других приложений. Приложение скрывается с рабочего экрана устройства и перехватывает SMS и уведомления (включая OTP-коды) с отправкой их на Telegram-бот или удалённый сервер. Дополнительно оно передаёт файлы, скриншоты и аудиозаписи с устройства, а также блокирует удаление и отзыв разрешений.
Такого рода приложения распространяются на коммерческой основе по той же схеме Malware-as-a-Service по закрытым каналам Telegram и хакерским форумам. От злоумышленника требуется подобрать иконку приложения, подготовить картинку и иногда развернуть свой сервер, чтобы сгенерировать новое вредоносное приложение. Дальше — только распространить и убедить пользователя установить приложение.
В 2025 году приложения семейства «Мамонт» заняли первые позиции в рейтинге по заражениям мобильных устройств, по данным «Мегафона», несмотря на примитивную схему распространения. Это достигается за счёт массовости рассылок — всегда найдётся пользователь, который установит и предоставит необходимые разрешения.
Краткое содержание технического исследования
-
Установка происходит в два этапа, при этом вредоносный код спрятан в зашифрованном APK внутри установщика.
-
Приложения содержат примитивную защиту от распаковки.
-
Расшифровка происходит в нативной библиотеке в месте с реквизитами отправки информации об установке.
-
Реквизиты сервера для взаимодействия приложение теперь получает во время работы через промежуточное доменное имя по DoH.
-
В процессе работы приложение проверяет устройство для защиты от песочниц и средств исследования.
Технический анализ установщика
Образец «Изображения 27шт.apk» непосредственно связан с тем, который описали в предыдущей статье.
Для него используются такие же способ распространения и предлог и даже та же картинка для усыпления бдительности пользователя.

Пример новогодней рассылки вируса, злоумышленники использовали различные названия файлов - «Изображения 27шт.apk», «снимки-17 шт.apk» и т.д.

Картинка по ссылке в приложении.
По данным Kaspersky KTIP, образец в первый раз обнаружен 2 января, а 6 января приложение было загружено уже на VirusTotal. На момент исследования приложение нормально выявляется антивирусами, но просто как Android.Banker.
На устройстве приложение называется «Изображения 27шт» и устанавливается как пакет com.m511a4fb6b.core0566134c.

Иконка при установке
Как показало исследование, злоумышленники изменили схему установки и активации вредоносного кода.
Разрешения
Приложение теперь устанавливается в два этапа. На первом этапе запрашиваются только минимально необходимые разрешения.
|
Разрешение |
Описание |
|
|
Установка приложений |
|
|
Возможность фоновой работы |
По сравнению с предыдущим образцом подозрительных разрешений существенно меньше: нет запроса на обработку SMS и доступ к сервису Accessibility.
Защита APK
Приложения для Android распространяются в виде файлов с расширением .apk. APK-файлы представляют собой архивы ZIP, в которых хранятся:
-
байткод приложения;
-
манифест с описанием разрешений и инструкцией, как запускать;
-
ресурсы (изображения, строки);
-
цифровая подпись;
-
библиотеки для каждой платформы, которые поддерживаются приложением;
-
дополнительные файлы, необходимые для работы приложения.
Стандартный APK распаковывается при помощи архиватора, который поддерживает ZIP, но не в нашем случае. При попытке распаковки архиватор будет требовать пароль для архива, хотя на устройство приложение нормально установится и будет работать.
Злоумышленник модифицировал записи в архиве и проставил для каждой пометку, что файл внутри зашифрован и требует пароль, хотя файлы внутри архива только сжаты без шифрования. Установщик Android эти флаги проигнорирует, а архиватор — нет.
Пример записи в архиве
Но для специализированных утилит для исследования Android, эта уловка не представляет проблемы.
Проверка устройства
Сразу после запуска приложение проверяет устройство по списку критериев:
-
Установленные пакеты и приложения. Проверяется количество приложений и установка технических приложений для разработки.
-
Наличие прав суперпользователя (root).
-
Наличие средства динамического исследования (Frida).
-
Время работы устройства после последней перезагрузки.
-
Наличие подключения по ADB (Android Debug Bridge).
-
Факт работы на программной эмуляции устройства (qemu).
В нативной библиотеке проверяется наличие эмулятора, прав суперпользователя и средств динамического исследования (checkNativeRoot, checkNativeEmulator, checkNativeFrida), остальные проверки — в коде приложения на Kotlin. Так как целевая аудитория — простые пользователи, то такие вещи говорят о факте исследования приложения.
Приведём часть кода, которая используется для проверки устройства. Комментарии на русском языке — от разработчика.
if (z2 && z6 && size <= 7 && jElapsedRealtime > 30) {
arrayList2.add("Ленивая ферма: ADB включен + Мало приложений (" + size + ") на прогретом устройстве");
z2 = false;
}
if (z2 && !z6 && size <= 7 && jElapsedRealtime >= 30) {
arrayList2.add("Пустой телефон: Критически мало приложений (" + size + ") при аптайме > 30 мин");
z2 = false;
}
if (z2 && zCheckNativeRoot) {
if (size <= 12 jElapsedRealtime <= 15) {
arrayList2.add("Root обнаружен: Недостаточно приложений или аптайма для доверия");
z2 = false;
} else {
sb2.append("⚠️ Примечание: Разрешенный Root (Продвинутый юзер)\n");
}
}
if (z2 && z6) {
if (size > 12) {
sb2.append("⚠️ Примечание: Разрешенный ADB (Много приложений)\n");
} else if (size <= 7 jElapsedRealtime <= 60) {
arrayList2.add("ADB обнаружен: Недостаточно приложений или аптайма для доверия");
z2 = false;
} else {
sb2.append("⚠️ Примечание: Разрешенный ADB (Разработчик)\n");
}
}
if (z2) {
sb2.append("\n✅ ВЕРДИКТ: ДОСТУП РАЗРЕШЕН\n");
} else {
sb2.append("\n⛔️ ВЕРДИКТ: ЗАБЛОКИРОВАНО\nПричины:\n");
Iterator it = arrayList2.iterator();
pg.l(it, "iterator(...)");
while (it.hasNext()) {
Object next = it.next();
pg.l(next, "next(...)");
sb2.append("• " + ((String) next) + "\n");
}
}
Проверка наличия суперпользователя в нативной библиотеке.
bool Java_com_example_MetaMask_pigeon_checkNativeRoot()
{
char haystack[92]; // [xsp+Ch] [xbp-64h] BYREF
__int64 v2; // [xsp+68h] [xbp-8h]
v2 = (_QWORD )(_ReadStatusReg(TPIDR_EL0) + 40);
return !access("/system/app/Superuser.apk", 0)
||!access("/sbin/su", 0)
||!access("/system/bin/su", 0)
||!access("/system/xbin/su", 0)
||!access("/data/local/xbin/su", 0)
||!access("/data/local/bin/su", 0)
||!access("/system/sd/xbin/su", 0)
||!access("/system/bin/failsafe/su", 0)
||!access("/data/local/su", 0)
|| (int)__system_property_get("ro.build.tags", haystack) >= 1 && strstr(haystack, "test-keys");
}
Отправка сообщений в Telegram
Если проверка не пройдена, то приложение отправит сообщение в Telegram с информацией об устройстве.

Пример сообщения в Телеграм-бот
Токен и идентификатор чата Telegram хранятся в нативной библиотеке в методах getSrvConfigA и getSrvConfigB.
Установка «цыпленка»
После проверки приложение:
-
извлекает и расшифровывает ещё один APK;
-
устанавливает его на устройство;
-
отображает страницу с изображением, которое приведено в начале статьи.
Приложение 2 этапа хранится в зашифрованном виде среди ресурсов (assets).
Для расшифровки используется метод decryptAndSaveChiken из нативной библиотеки. APK временно сохраняется в кеше приложения под именем chiken.apk, того самого «цыплёнка».
// ...
File file = new File(mainActivity2.getCacheDir(), "chiken.apk");
AssetManager assets = mainActivity2.getAssets();
pg.l(assets, "getAssets(...)");
String absolutePath = file.getAbsolutePath();
pg.l(absolutePath, "getAbsolutePath(...)");
boolean zDecryptAndSaveChiken = mainActivity2.decryptAndSaveChiken(assets, "metadata.dat", absolutePath);
// ...
Дальше переходим к основной части исследования — chiken.apk.
«Цыпленок» (сhiken)
Так разработчики назвали эту стадию работы ВПО — chiken (а не chiCken) или «чикен». Это подтверждается сообщениями об ошибке и названием переменных.
Приложение на устройстве называется «Изображения 27шт» и устанавливается как пакет com.m511a4fb6b.core0566134c. Иконка приложения точно такая же, как у его установщика.
При помощи приложения злоумышленник может выполнять следующие действия:
-
показ произвольной веб-страницы пользователю;
-
запись видео, снимок с экрана устройства;
-
запись видео, снимок с любой из камер телефона;
-
запись аудио с микрофона;
-
загрузка файлов на устройство;
-
отправка файлов на удалённый сервер;
-
отправка SMS, USSD, рассылка SMS по списку адресов;
-
получение SMS и сбор ранее доставленных на устройство;
-
сбор журнала звонков;
-
сбор контактов на устройстве, добавление контакта;
-
сбор информации об устройстве и системе Android;
-
отслеживание «положения» и состояния устройства (в кармане, на столе экраном вниз и т.п.);
По команде злоумышленника приложение может полностью отключить вредоносную активность и очистить данные, которые загрузило ранее.
Разрешения
Приложение запрашивает уже гораздо больше разрешений на работу:
|
Разрешение |
Описание |
|
|
Отправка SMS |
|
|
Чтение состояние телефона (в том числе IMEI) |
|
|
Чтение SMS |
|
|
Получение MMS |
|
|
Получение SMS |
|
|
Чтение контактов |
|
|
Запись звука с микрофона |
|
|
Завершение других процессов |
|
|
Работа с микрофонов в фоне |
|
|
Поднятие трубки вместо пользователя |
|
|
Работа с камерой в фоне |
Проверка устройства
Последовательность проверок повторяет ту, которую мы видели в установщике. Здесь все проверки осуществляются без нативной библиотеки — только на Kotlin.
Приложение отправит сообщение через Telegram-бота, если устройство не пройдёт проверку. Токен и номер чата для отправки хранятся в нативной библиотеке.

Пример сообщения в Телеграм-бот
Проверка приложений
Перед получением команд образец проверяет список приложений:
-
ru.sberbankmobile— «СберБанк»; -
com.idamob.tinkoff.android— «T-Банк»; -
ru.rostel— приложение «Госуслуги»; -
ru.nspk.mirpay— приложение НСПК «MirPay»; -
ru.yandex.searchplugin— «Яндекс Старт»; -
ru.oneme.app— мессенджер MAX; -
ru.ozon.app.android— приложение Ozon; -
com.vkontakte.android— VK; -
com.wildberries.ru— Wildberries; -
ru.yandex.yandexmaps— «Яндекс Карты».
Сейчас эта проверка ни на что не влияет, но в следующих версиях всё может поменяться.
Сервер для команд
Приложение получает команды и отправляет результаты в формате JSON на удалённый сервер (C2). Для взаимодействия используется websocket и библиотека OkHttp.
Реквизиты удалённого сервера не хранятся на устройстве — приложение получает доменное имя при помощи специального DNS-запроса к промежуточному домену.
Имя промежуточного домена driver-store.online хранится в зашифрованном виде в коде приложения вместе со списком URL, через которые отправляются запросы DNS-over-HTTPs:
Приложение пытается обратиться последовательно к каждому из них с DNS-запросом типа TXT для доменного имени driver-store.online. В поле data будет храниться искомое доменное имя сервера для команд в зашифрованном виде.
Например, для https://dns.alidns.com/resolve?name=driver-store.online&type=TXT:
{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": false,
"CD": false,
"Question": {
"name": "driver-store.online.",
"type": 16
},
"Answer": [
{
"name": "driver-store.online.",
"TTL": 227,
"type": 16,
"data": "\"NQ4LEAQdHB4KD0sDBhkLWFA=\""
}
]
}
После расшифровки получаем soedenenka.online.
Для шифрования используется Base64 и XOR с ключом Fantasypanelhub651241.
В таком подходе для получения C2 учитывается сразу несколько факторов для обеспечения устойчивости канала получения команд и отправки результатов:
-
Доменное имя C2 легко поменять, поэтому его нужно постоянно отслеживать, чтобы блокировать.
-
DNS-запросы идут в зашифрованном виде к легитимным DNS-серверам — их не заблокируешь просто так.
-
Доменное имя ;
driver-store.onlineуправляется через Cloudflare и находится вне российской юрисдикции — его сложно заблокировать и разделегировать. -
Доменное имя
soedenenka.onlineтоже прячется за Cloudflare — IP-адрес управляющего сервера скрыт, его трудно заблокировать. -
Для усложнения анализа трафика к каждому запросу добавляется поле random — оно меняет длину запроса и лучше маскирует его среди легитимного трафика.
Примечательно, что ни driver-store.online, ни soedenenka.online нигде не выявлялись как вредоносные на момент исследования.
Индикаторы компрометации
|
Значение |
Описание |
|
|
URL изображения для привлечения пользователей |
|
|
MD5 установщика |
|
|
Доменное имя для DNS-запросов |
|
|
Доменное имя для получения команд |
|
|
Название файла установщика |
|
|
Название приложения на устройстве |
|
|
Название пакета приложения установщика |
|
|
Название пакета вредоносной нагрузки |
Рекомендации по защите
В комментариях к предыдущей публикации многие спрашивали: как вообще такие приложения удаётся установить и разве их вредоносность не очевидна с первого взгляда? К сожалению, есть пользователи, которые не разбираются в форматах файлов и особенностях мобильных устройств. Такие пользователи и являются целевой аудиторией злоумышленников.
В современных версиях Android гораздо сложнее установить приложение просто так, из неизвестного источника — система выдаёт сразу несколько предупреждений, но упорный пользователь всегда сможет это сделать. Особенно если злоумышленник подробно обоснует, зачем это надо, объяснит, как это сделать, и будет торопить пользователя.
Поэтому просвещать пользователей о такого рода угрозах — очень верная стратегия, но которую надо проводить постоянно. В комментариях были хорошие варианты для старшего поколения от пользователя @Viktor-T
Базовые рекомендации по защите всегда примерно одинаковы:
-
Отключить автозагрузку файлов в Telegram, осторожно открывать ссылки и проверять формат файлов перед открытием.
-
Не устанавливать приложения из неизвестных источников.
-
Установить на устройство антивирусное ПО и периодически делать полную проверку.
Дополнительные подходы, которые помогут бороться с угрозами от таких вредоносных приложений:
-
Для проверки файлов можно воспользоваться Telegram-ботом «Доктор Веб» или приложением от VirusTotal, но они имеют ограничение на размер проверяемого файла.
-
Две SIM-карты и устройства. SIM-карту для получения одноразовых кодов от банков и «Госуслуг» использовать на отдельном устройстве, где нет лишних приложений, — оно может быть даже кнопочным. В таком случае потерять деньги существенно сложнее, но большинству пользователей неудобно иметь два телефона. Кроме того, надо не забывать периодически пополнять и использовать вторую SIM-карту, чтобы её не заблокировали.
-
Родительский контроль на устройстве. В этом случае установить просто так новое приложение будет значительно сложнее без проблем для обновлений.
-
Для установки приложений использовать специального пользователя, а у основного пользователя такую возможность ограничить.
Инструкция по удалению
Здесь рассмотрим базовый алгоритм удаления, применимый для всех подобных угроз. Хоть этот образец не противодействует удалению и отзыву разрешений, нам на исследование попадали и более упорные.
-
Включаем режим полёта — при этом отключаются интернет, SMS и звонки.
-
Перезагружаем телефон в безопасный режим (Safe mode). В зависимости от модели устройства последовательность действий может меняться, но обычно нажимаем кнопку включения, ждём появления логотипа и зажимаем клавишу уменьшения звука. В этом режиме все сторонние приложения будут отключены.
-
Проверяем приложения для администрирования устройства.
Настройки — Защита и конфиденциальность — Дополнительные параметры — Администратор устройства. В зависимости от прошивки путь может быть другой, лучше воспользоваться поиском по слову «Администратор» или по сочетанию Device admin. -
Проверяем разрешения на доступ к Accessibility Service (специальные возможности).
Настройки > Специальные возможности > Установленные службы. Или ищем в настройках по словам Accessibility, «специальные возможности». В норме там не должно быть никаких приложений, особенно неизвестных. -
Проверяем разрешения на установку приложений.
Настройки — Приложения — Специальный доступ — Установка неизвестных приложений. Обычно там выданы разрешения только Google Play и RuStore. -
Проверяем остальные разрешения — доступ к SMS, камере и местоположению.
Настройки — Защита и конфиденциальность — Настройки конфиденциальности — Управление разрешениями. -
Удаляем подозрительные приложения, которые мы нашли на предыдущих этапах. Отзыв разрешений может провоцировать приложение постоянно выдавать уведомление, что его надо включить и «донастроить», поэтому сразу удаляем источник проблем.
-
Перезагружаемся.
Если у вас есть дополнения к рекомендациям, то рады будем увидеть их в комментариях к статье.
Выводы
Злоумышленники постоянно адаптируют свои инструменты под требования времени: усложняют защиту от исследования, пользуются актуальными информационными поводами и пытаются застать пользователя врасплох.
Как показывает практика, ещё есть пользователи, которые не отличают APK-файлы от картинок и видео в сообщениях групповых чатов и социальных сетях. Если злоумышленник убедительно обоснует запуск и выдачу разрешений, то заражения будет сложно избежать.
Данный образец сложнее исследовать и блокировать, чем прошлые. Тем не менее, ему ещё далеко до BTMOB, о котором мы писали ранее.
Не смотря на всё это, рекомендации по защите от таких угроз не меняются и остаются теми же, что и были ранее. Посмотрим, что будет через полгода.
To be continued...
10.02.2026