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

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

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

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

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

Категории

Все категории
Loading categories
badbox-h713-projector — Руководство по анализу и очистке от вредоносного ПО BadBox на Android-проекторах Allwinner H713: доступ через ADB, подтверждение заражения, резервное копирование прошивки, удаление дроппера и проверка. | Kitploit
Инструменты/GitHubGitHub/florentineprinzessinzusachsen/badbox-h713-projector
Безопасность AndroidБезопасность встроенных системБезопасность IoTОбратная инженерияСбор информацииАнализ вредоносных программЦифровая криминалистикаМобильная безопасность

Популярное

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

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

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

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

Смотреть все инструменты →
Безопасность оборудования и IoT
Реагирование на Инциденты
Анализ Прошивок
GitHubflorentineprinzessinzusachsen/badbox-h713-projector

badbox-h713-projector

Руководство по анализу и очистке от вредоносного ПО BadBox на Android-проекторах Allwinner H713: доступ через ADB, подтверждение заражения, резервное копирование прошивки, удаление дроппера и проверка.

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

Проектор с вредоносным ПО Wielo / Atongmu: анализ и очистка BadBox (AT-M269 / H713)

26 сен 2026 · @R

Дешёвый Android-проектор (Wielo / Atongmu AT-M269, Allwinner H713) поставляется с дроппером системного уровня, который превращает его в узел резидентного прокси. В этом документе показано, как получить доступ, не вскрывая корпус, доказать заражение, создать резервную копию прошивки, удалить вредоносное ПО и проверить результат.

1. Устройство

Безымянный LCD-проектор, продающийся под меняющимися брендами. Плата и прошивка общие для многих проекторов на H713 (клоны HY300 и другие), поэтому всё описанное здесь применимо шире.

СвойствоЗначение
Продаётся какWielo Smart Projector, модель AT-M269 (FCC ID 2BAAR-AT-M269D)
ПроизводительShenzhen Atongmu Technology; прошивка и приложения от OEM "ASHD"
Ревизия аппаратаpersist.sys.cm.hardversion = AT-M269_720P_HP_202410221430
SoCAllwinner H713M (ro.boot.hardware = sun50iw12p1), четырёхъядерный Cortex-A53; плата exdroid, платформа ares
RAM / накопитель1 ГБ DDR @ 576 МГц / 8 ГБ eMMC (7 818 182 656 байт)
Wi-Fi / BluetoothAIC8800 (aic8800d80, драйвер rwnx 6.4.3.0)
ЯдроLinux 5.4.99, 32-бит (armv7l), собрано 8 дек 2025
Реальная сборкаh713m_tuna_p3-user 11 RP1A.201005.006 eng.work3.20251208.154308 release-keys, прошивка H713M-android11-v1.0, хост сборки ishang-PC
ОСAndroid 11 (SDK 30), сборка user, патч безопасности 2022-02-05
МаскировкаПредставляется как Google ADT-3 (brand/model/device, производитель askey); реальная модель в ro.product.model2 = AT-M269
Разделы / загрузкаВиртуальный A/B, активный слот _b, динамические разделы (retrofit) в super; AVB 2.0, vbmeta.device_state = locked, verifiedbootstate пуст; OEM unlock не разрешён; /system заполнен на 100%
Безопасностьro.debuggable=1, ro.adb.secure=0, service.adb.root=1, ADB на tcp/5868, SELinux permissive, разрешения privapp permissive, тестовые ключи AOSP
Регион по умолчаниюЧасовой пояс Asia/Shanghai, зона DTV cn / DTMB

Read the identity yourself

adb shell getprop ro.product.model # ADT-3 <- spoofed, to pass Google certification adb shell getprop ro.product.model2 # AT-M269 <- real model adb shell getprop ro.board.platform # ares, H713 platform name adb shell getprop ro.build.type # user <- release build

root@kitploit:~
## 2. Проникновение

ADB прослушивает сеть на нестандартном порту, без запроса авторизации и с правами root.```
# 1. Find open ports (projector on an isolated network)
nmap -p- 10.56.215.10
#   5868/tcp open   <- nmap guesses "diameters"; it is actually adbd

# 2. Confirm from the device side (e.g. via Termux on the projector)
getprop service.adb.tcp.port   # 5868
getprop ro.adb.secure          # 0    -> no "allow debugging?" prompt
getprop init.svc.adbd          # running

# 3. Connect from a computer
adb connect 10.56.215.10:5868
adb root
adb shell id                   # uid=0(root)

Выключение лампы во время работы через ADB```

adb shell 'echo adb_keepalive > /sys/power/wake_lock' # keep CPU/Wi-Fi awake (needs root adbd) adb shell cat /sys/power/wake_lock # adb_keepalive must be listed adb shell input keyevent KEYCODE_SLEEP # display + lamp off, ADB stays connected

when done

adb shell input keyevent KEYCODE_WAKEUP # lamp on adb shell 'echo adb_keepalive > /sys/power/wake_unlock' # release the wakelock

root@kitploit:~
`/sys/class/backlight/tv` > `brightness`/`bl_power` не оказывают никакого эффекта.

## 3. Цепочка заражения

Два предустановленных системных приложения работают от имени пользователя system (UID 1000). Одно загружает загрузчик, загрузчик загружает четыре прокси-модуля и второй, независимый загрузчик.```
Firmware (preinstalled, UID 1000)
├─ com.android.sysapp          /system/priv-app/AshdSysApp
│    OTA updater, can replace the whole firmware (update.zip / payload.bin)
│    C2: wjtysj.ishanghd.com/hx_kt.php
│
└─ com.android.umanalytics.yiyou /system/app/AndroidAnalytics_yiyou
     Dropper; Umeng + Baidu tracking
     └─ downloads cache/plugin.jar       (DEX, from *.ishanghd.com)
          ├─ app installer: pulls app lists per device profile, pm install -r
          │    └─ installs Disney+ etc. and com.google.adtest (payload)
          └─ "hs" task loader, C2 api.loritor.cc / api.nizero.cc, every 6 h
               └─ 4 encrypted modules  code_cache/.hs/.file/.rf/*.rf
                    SKN0041 com.ad.proxy   SKN0054 com.szns.sdk
                    SKN0058 com.link.core  SKN0061 ddth2 (VpsSdk)
                    -> all four: residential proxy clients

com.google.adtest (/data/app, installed by yiyou)
     Second loader "com.speed", own C2 (api.logobi.cc, api.pechlo.cc, ...)
     Native plugin loader, may install/delete packages -> backup channel

> чужой интернет-трафик маршрутизируется через ваше соединение, а ваше устройство отслеживается (серийный номер, MAC-адреса, Wi-Fi SSID/BSSID).

4. Доказательство заражения на уровне завода

a) Прокси-подобный трафик: один процесс, множество внешних соединений```bash

adb shell "netstat -tnp | grep ESTABLISHED"

tcp6 ... ::ffff:43.116.39.73:188 ESTABLISHED 4795/com.android.umanalytics.yiyou

tcp6 ... ::ffff:198.44.189.x:9200 ESTABLISHED 4795/com.android.umanalytics.yiyou

... ~25 lines, same process, many IPs, odd ports

-> an "analytics" app does not hold 25 parallel sessions: this is a proxy node

root@kitploit:~
### **b) Кто что установил**```bash
adb shell pm list packages -i | grep -v 'installer=null\|com.android.vending'
# package:com.google.adtest       installer=com.android.umanalytics.yiyou  <- payload
# package:com.disney.disneyplus   installer=com.android.umanalytics.yiyou  <- cover
#  -> a system "analytics" app installing packages = dropper

adb shell dumpsys package com.google.adtest | grep -E 'codePath|firstInstallTime'
#  fake Google name, lives in /data/app, installed silently

c) Файлы полезной нагрузки в папке данных дроппера```bash

adb shell 'ls -laR /data/data/com.android.umanalytics.yiyou' | grep -E 'plugin.jar|.rf|files/apps'

cache/plugin.jar <- downloaded loader (DEX)

code_cache/.hs/.file/.rf/-1.dex_assdk_huang_SKN00xx.rf <- 4 encrypted modules

files/apps/com.google.adtest.apk <- stored payload for reinstall

directories are chmod 777

root@kitploit:~
### **d) Настройка на уровне системы**```bash
adb shell getprop ro.product.model
# ADT-3 (spoofed)
adb shell dumpsys package com.android.sysapp | grep sharedUser
# android.uid.system  -> runs with system privileges
adb shell dumpsys package com.android.sysapp | grep -E 'INSTALL_PACKAGES|RECOVERY|MASTER_CLEAR'
# unnamed OEM app that may install apps, flash firmware and wipe the device
adb shell cat /system/etc/init/qw.rc
# service qw /system/bin/qw --daemon  user root

e) Вредоносное ПО запущено в день сборки на заводе

Вредоносное ПО встроено прямо в прошивку. Дата сборки — eng.work3.20251208.154308, ядро скомпилировано Mon Dec 8 15:27:38 CST 2025. Записи yiyou показывают, что оно работало в тот же день:```

baidu_mtj_sdk_record.xml (yiyou data)

session_recent_visit: [{"day":20251208,"count":1}, {"day":20260910,...}, ...]

first recorded run = 8 Dec 2025, the day the firmware was built

ua.db (yiyou's Umeng session table), timestamps column __f

1765179258896 -> 2025-12-08 07:34 UTC = 15:34 CST, ~7 min after the kernel build

root@kitploit:~
### **f) Вредоносное ПО в подписанном вендором образе системы, доступном только для чтения**

Пользователь или более позднее приложение не может поместить файлы в `/system`. Это часть `super`, защищённая dm-verity и подписанная через `vbmeta`.

## 5. Обзор архитектуры вредоносного ПО

### 5.1. Основные компоненты

| Компонент                         | Расположение                 | Что делает                                                                                                      |
| --------------------------------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `com.android.umanalytics.yiyou`   | `/system/app`, UID 1000      | Загружает и запускает `plugin.jar`; отправляет серийный номер, MAC-адреса, android_id, Wi-Fi SSID/BSSID, Bluetooth MAC в Umeng/Baidu |
| `plugin.jar` (DEX)                | yiyou `cache/`               | Две части: установщик приложений (списки приложений для каждого устройства, 40+ профилей для H713/RK3326/HY300) и загрузчик задач "hs" |
| Загрузчик задач "hs"              | внутри `plugin.jar`          | Опрашивает C2 каждые 6 ч на предмет задач типа `jar`, `dex` или `apk`; загружает, проверяет MD5, выполняет     |
| SKN0041 `com.ad.proxy`            | модуль `.rf`                 | Туннелирование TCP/UDP/ICMP, heartbeat, вход/отчёт                                                              |
| SKN0054 `com.szns.sdk`            | модуль `.rf`                 | Прокси-узел плюс UDP-сканирование из вашей сети                                                                 |
| SKN0058 `com.link.core`           | модуль `.rf`                 | Прокси-клиент с собственными DNS-резолверами                                                                    |
| SKN0061 `ddth2` / VpsSdk          | модуль `.rf`                 | Прокси-шлюз, множество параллельных клиентских экземпляров                                                      |
| `com.google.adtest` ("com.speed") | `/data/app`                  | Второй загрузчик с нативным загрузчиком плагинов; установка/удаление пакетов; перезапуск при загрузке, сетевых, HDMI, событиях питания |
| `com.android.sysapp`              | `/system/priv-app`, UID 1000 | OTA-обновление: может загрузить и прошить полный образ прошивки                                                 |
| Файлы Widevine                    | `/data/mediadrm/IDM1013/L3/` | `plugin.jar` помещает пакет ключей/лицензий DRM, чтобы стриминговые приложения работали на несертифицированном устройстве |

### 5.2. Как компоненты остаются скрытыми```
# C2 hostnames are not in plain text: gzip + Base64 + AES-CFB with a hardcoded key.
#   decrypted: api.loritor.cc (master), api.nizero.cc (slave)
# DNS is resolved via DNS-over-HTTPS (dns.google, cloudflare-dns.com, doh.pub, 223.5.5.5)
#   -> router DNS blocking alone misses it
# .rf module layout (per file):
#   [version][...][salt:32 bytes][invocation: AES][module: AES][DSA signature]
#   invocation = {"cn":"com.hotota.p.d.MainApi","m_init":"start_W00xx","m_uninit":"stop"}
#   module     = an APK whose classes.dex is loaded with DexClassLoader
# Modules are signed, so only the operator can push new ones.

5.3. Какие данные отправляет трекинг```

shared_prefs/info.xml wifiinfo: ssid, bssid, device MAC, IP; blueinfo: BT MAC; accelerometer samples shared_prefs/umeng_*.xml appkey 61c17582e014255fcbc1a9af, channel ashd-analytics umeng_general_config.xml first_activate_time = 2 Mar 2026, successful_request = 218 hs.prefs_1.xml periods=21600 (6 h), last.trackerid = SKN0061

root@kitploit:~
### 5.4. Боковое перемещение

**Автоматического бокового перемещения нет, но есть дверь в локальную сеть**

> Но **SKN0041** и **SKN0058** ретранслируют на любую цель, которую укажет шлюз, а SKN0041 к тому же может пинговать её по команде. Любой, кто арендует прокси, может вручную добраться до локальной сети или прощупать её.

- `plugin.jar`
- расшифрованные модули `.rf` SKN0041/54/58/61
- `com.google.adtest`, yiyou, sysapp
- `com.android.nfx` (NFXAccessibility)
- нативные: `qw`, `systemmixservice`, `libsystemmix_jni.so`, `libsystemmixservice.so````bash
grep -rlE 'ServerSocket|DatagramSocket|MulticastSocket|NetworkInterface|getDhcpInfo|/proc/net/arp|239\.255\.255\.250|224\.0\.0\.251|:5555|telnet|isReachable|NsdManager|JmDNS|UPnP|Cling|SSDP|WifiP2pManager|getBroadcast|broadcastAddress|SubnetMask|prefixLength|getLinkAddresses|InterfaceAddress' analysis/decompiled/*/sources
grep -rlE 'Runtime\.getRuntime\(\)\.exec|ProcessBuilder' analysis/decompiled/*/sources
root@kitploit:~
|| str.matches("^192\\.168\\..*") || str.matches("^127\\..*")

// no 169.254.0.0/16 clause and no IPv6 form here, a link-local or IPv6 LAN target slips through

// SKN0061 ddth2/hidden/F.java - InetAddress's own range checks, covers link-local and IPv6 too !a.isAnyLocalAddress() && !a.isLoopbackAddress() && !a.isLinkLocalAddress() && !a.isSiteLocalAddress() && !a.isMulticastAddress()

// SKN0041 com/ad/proxy/b/Q.java - "url init" command: fetches any URL, no check InetAddress byName = InetAddress.getByName(host); createSocket.connect(new InetSocketAddress(byName, port), 10000);

// SKN0058 com/link/core/a/e.java - connects to the server-supplied address, no check this.c.connect(new InetSocketAddress(inetAddress, this.d));

root@kitploit:~
Полный набор команд SKN0041, из таблицы диспетчеризации `com/ad/proxy/b/a0.java`:

| Опкод | Обработчик | Что делает                                                                          |
| ------ | ---------- | ----------------------------------------------------------------------------------- |
| 1 / 2  | U / V      | запрос / ответ heartbeat                                                            |
| 3      | W          | открывает необработанное TCP-соединение с указанным оператором host:port, без проверки адреса |
| 5 / 7  | X / Y      | tcp send / close в открытой транзакции                                              |
| 8      | Z          | открывает необработанную UDP-сессию с указанным оператором host:port, без проверки адреса |
| 11     | K          | udp close                                                                           |
| 12     | L → P.java | выполняет `ping -c 10 <host>` на указанном оператором хосте, передаёт полный вывод обратно |
| 14     | M → Q.java | загружает указанный оператором URL, без проверки                                    |

Ни один из этих опкодов не фильтрует по диапазону IP.

Сервер повторной трансляции видео `plugin.jar` (`com.cloudmedia.tv.server.d`, форк NanoHTTPD, обслуживающий перезаписи потоков Aiqiyi/Youku/CIBN) привязывается без указания хоста, то есть ко всем интерфейсам, доступен из LAN, а не только с localhost, если он запускается. Его единственная точка входа — `ParserUtils.AnalyticsHelper()`, за `getprop ro.board.platform == "rk3188"`. Данное устройство сообщает `ares` (H713), поэтому шлюз остаётся закрытым.

Текущее состояние устройства: `netstat -tnp` показывает только loopback screen-cast (`com.android.toofifi` на `127.0.0.1:5354`), GMS к Google по IPv6 и сессию ADB. Ни один процесс `yiyou`, `sysapp`, `speed`, `umanalytics` или `adtest` не запущен.

Binder-интерфейс `systemmixservice` (произвольное чтение/запись/удаление файлов и установка свойств от имени root, доступный любому приложению на устройстве) представляет собой локальное повышение привилегий. Удаление дроппера и отказ от установки недоверенных APK закрывает эту возможность.

## 6. Индикаторы

Сетевые индикаторы (домены, URL, IP) находятся в [разделе 11](#11-consolidated-hosturl-list-for-abuse-reports).

### 6.1. Пакеты

| Пакет                                                           | Расположение                                            | Роль                                                             |
| --------------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------------------------------------- |
| `com.android.umanalytics.yiyou`                                 | `/system/app/AndroidAnalytics_yiyou`, UID 1000 (system) | дроппер                                                          |
| `com.android.sysapp` (AshdSysApp)                               | `/system/priv-app/AshdSysApp`, UID 1000 (system)        | бэкдор OTA-канала                                                |
| `com.google.adtest` (настоящее имя `com.fotas.wanapp`, "com.speed") | `/data/app`                                             | второй загрузчик                                                 |
| `com.cloudmedia.testapk`                                        | `/system/app`                                           | заводское тестовое приложение OEM, удалено вместе с дроппером в разделе 8 |
| `com.disney.disneyplus`                                         | `/data/app`                                             | прикрытие, установленное дроппером                               |
| `com.android.nfx`                                               | `/system/priv-app/NFXAccessibility`                     | оставлен, безвреден (помощник пульта Netflix)                    |

### 6.2. Бинарные файлы

| Бинарный файл                                                                      | Init-сервис                                                                           | Что делает                                                                                                                                                                                                                                                                                    |
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/system/bin/qw`                                                                   | **`qw`**: `class core`, `user root`, работает постоянно с момента загрузки            | Демон su от Superuser/ClockworkMod (открывает сокеты `/dev/com.koushikdutta.superuser` + `.daemon`).                                                                                                                                                                                          |
| `/system/bin/appsdisable`                                                          | **`appsdisable`**: запускается по `on property:sys.boot_completed=1`, `disabled`+`oneshot` | После 4-секундной задержки при загрузке (`settings ... global start_disable`) находит каждый установленный пакет с получателем `BOOT_COMPLETED`, компонент которого начинается с `com.google.android`, и выполняет `pm disable` для него, чтобы отключить собственные проверки Google при загрузке, такие как сканирование Play Protect и основные сервисы GMS. |
| `/system/bin/gmsopt`                                                               | **`gmsopt`**: тот же триггер и флаги, что и у appsdisable                             | То же поведение отключения получателей загрузки Google, что и у appsdisable, но исключая `com.google.android.permissioncontroller`. Избыточен.                                                                                                                                                |
| `/system/bin/systemmixservice` (+ `libsystemmix_jni.so`, `libsystemmixservice.so`) | **`systemmix`**: `class main`, `user root`, `oneshot`                                 | OEM native? Назначение не определено полностью, но входит в группу root.                                                                                                                                                                                                                      |

### 6.3. Файлы и каталоги

| Путь                                                                                                                                                                          | Что                                                      |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| `/data/data/com.android.umanalytics.yiyou/cache/plugin.jar`                                                                                                                   | загруженный загрузчик "hs" / DEX установщика приложений   |
| `/data/data/com.android.umanalytics.yiyou/code_cache/.hs/.file/.rf/*.rf`                                                                                                      | зашифрованные прокси-модули (SKN0041/54/58/61)           |
| `/data/data/com.android.umanalytics.yiyou/files/apps/com.google.adtest.apk`                                                                                                   | сохранённая копия полезной нагрузки для тихой переустановки |
| `/data/data/com.android.umanalytics.yiyou/files/libcuid.so`                                                                                                                   | нативная библиотека-помощник идентификатора устройства   |
| `/data/data/com.android.umanalytics.yiyou/databases/ua.db`                                                                                                                    | БД сессий Umeng                                          |
| `/data/data/com.android.umanalytics.yiyou/shared_prefs/{info.xml, umeng_*.xml, hs.prefs_1.xml, hs.cuid.v1.xml, vps_sdk_prefs.xml, Plugin.xml, baidu_mtj_sdk_record.xml, ...}` | настройки отслеживания/конфигурации                      |
| `/data/data/com.android.sysapp/shared_prefs/SHARE.xml`                                                                                                                        | настройки состояния загрузки OTA                         |
| `/data/mediadrm/IDM1013/L3/`                                                                                                                                                  | сброшенный пакет Widevine L3 DRM                         |
| `/data/local/tmp/*`, `/data/ota_package/tmp/*`                                                                                                                                | временное/оставшееся пространство, используемое загрузчиком и OTA-клиентом |

### 6.4. Хеши образцов

| Образец                          | SHA-256                                                            |
| ------------------------------- | ------------------------------------------------------------------ |
| `plugin.jar`                    | `e2e5f86df18e0cdef9595bd886280f158001250f1565fa3e6dfe492b114be6f7` |
| SKN0041 (расшифрованный)        | `d7b26e53ade1cfcd283bfbbc5de7f792e8f8d441d74162eeef7e8a7c83ed5dba` |
| SKN0054 (расшифрованный)        | `ba3b320791b80dae25d07e17e43d4b11b5c5a0d8b989fdb4a7f47ccb39201307` |
| SKN0058 (расшифрованный)        | `60ade80fcd0a1c5bb3f62e76cd056b0e8034fdbe1e9834c335c0e60d99d12742` |
| SKN0061 (расшифрованный)        | `fcffed775c6d6967bd40e4fa5b529f9fd301b3ebd64a555c756943d1e863fea7` |
| `com.google.adtest.apk`         | `1298662eb6d087aa1e6f967d50581e998b5897ec1563bdf96589540845874110` |
| `AndroidAnalytics_yiyou.apk`    | `c4910d6fa666eff03bdc683423f7f2585cb263f8dcbf5f1fe7a1e2643eb384aa` |
| `AshdSysApp.apk`                | `f9cd44d359c9b0c92ddb8b868665a3e8edd54a19cc21a35fb2fba7dbdf36bb5a` |
| `L3.zip` (пакет Widevine)       | `8367725743c27ed1fd49d5eb086e7b260cfcf38a825a8892ce31b45e767e228f` |
| `favorite.ico` (конфиг SKN0054) | `8d64d2982f8f5cb01ad1bbce53861e09eae2884fe8c545ac9023b636c8f5ffa2` |

## 7. Резервная копия

Прошивка для этой модели, похоже, не опубликована, и реверс-инженерный OTA-сервер производителя также ничего не возвращает.```
# Simple one-shot dump (fine over USB; over Wi-Fi it can stall)
adb exec-out "dd if=/dev/block/mmcblk0 bs=4M 2>/dev/null" > mmcblk0.img
adb shell 'ls /dev/block/mmcblk0boot*'      # eMMC boot areas, dump them too if present

По Wi-Fi используйте вспомогательные скрипты

  1. dump-pull.sh [ip:port|usb] [file] вытягивает данные блоками по 256 МБ с проверкой размера и повторными попытками. Повторный запуск продолжает с последнего полного блока. Перед чтением он перемонтирует /data с background_gc=off,nodiscard, выполняет sync и ждёт 10 с. По USB он также выполняет adb shell stop. Оба действия отменяются при выходе (remount background_gc=on,discard, start). UDISK — это /data, и он остаётся активным, поэтому его хеш всё ещё может отличаться от запуска к запуску.
  2. dump-verify.sh [ip:port|usb] [file] [-y] проверяет размер, заголовки GPT, загрузочные области и каждый раздел (SHA-256 с устройства против того же диапазона байтов в образе). Он читает и исправляет любой несовпадающий участок. При чистом прохождении он записывает mmcblk0.img.sha256.```

What the partition check does, per partition

p=$(adb shell readlink /dev/block/by-name/super | xargs basename) # e.g. mmcblk0p9 s=$(adb shell cat /sys/block/mmcblk0/$p/start) # start sector (512 B) z=$(adb shell cat /sys/block/mmcblk0/$p/size) # size in sectors adb shell sha256sum /dev/block/by-name/super # hash on the device tail -c +$((s512+1)) mmcblk0.img | head -c $((z512)) | shasum -a 256 # same range in the image

userdata, metadata, misc change while Android runs: a mismatch there is expected

root@kitploit:~
### Восстановление пути

Войдите в Allwinner FEL, затем прошейте с помощью PhoenixUSBPro через кабель USB-A — USB-A.

Внешнего отверстия для загрузки в FEL нет: `adb reboot efex` или `fastboot oem efex`.

Возможный аппаратный вариант: контактная площадка FEL на плате, видимая на внутренних фотографиях FCC (требуется вскрытие корпуса). Для прошивки нужен `update.img` в формате IMAGEWTY, собранный из вашего дампа с помощью `awimg.py` ([well0nez/magcubic-root](https://github.com/well0nez/magcubic-root)) и шаблона H713.

FEL работает только на запись. PhoenixSuit и PhoenixUSBPro не могут считать eMMC обратно, а `sunxi-fel` не имеет раскладки SRAM для H713, работают только команды чтения ([sunxi-tools #226](https://github.com/linux-sunxi/sunxi-tools/issues/226)).

Дамп через ADB, описанный выше, остаётся методом резервного копирования.

### **Режимы загрузки**

Устройство использует A/B (`ro.build.ab_update=true`) с активным слотом `_b`. Раздела `recovery` нет: recovery находится в загрузочном ramdisk. Последовательная консоль U-Boot — `ttyS0` на скорости 115200 бод.

| Режим           | Как войти                                                                                                    | Уровень               | Статус                                                                                      |
| --------------- | ------------------------------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------- |
| Android         | обычное включение, `adb reboot`                                                                              | ядро                  | работает                                                                                    |
| Recovery        | `adb reboot recovery`                                                                                        | загрузочный ramdisk   | работает, меню ниже                                                                         |
| fastbootd       | меню recovery: Enter fastboot                                                                                | userspace в recovery  | входит                                                                                      |
| U-Boot fastboot | меню recovery: Reboot to bootloader, или `adb reboot bootloader`                                             | U-Boot                | работает (macOS требует исправления ниже)                                                   |
| U-Boot efex     | `fastboot oem efex` из U-Boot fastboot, или `adb reboot efex` (в U-Boot также есть триггер с пульта `ir-efex`) | U-Boot                | работает через `fastboot oem efex` и через `adb reboot efex`: `1f3a:efe8`, FEL handshake отвечает |
| BootROM FEL     | тестовая площадка FEL                                                                                        | SoC BootROM           | не проверено                                                                                |

### **Меню recovery:**

- Reboot system now
- Reboot to bootloader
- Enter fastboot
- Apply update from ADB
- Apply update from SD card
- Wipe data/factory reset
- Mount /system
- View recovery logs
- Run graphics test
- Run locale test
- Enter rescue
- Power off

### **ADB через USB**

разъём, к которому подключён USB0 (`ohci0`), по умолчанию работает как host. Он переключается в режим device до следующей перезагрузки с помощью:```
adb shell cat /sys/devices/platform/soc@2900000/soc@2900000:usbc0@0/usb_device
adb -d shell id

U-Boot fastboot не обнаружен

гаджет отображается как 1f3a:1010 ("USB Developer"), а его интерфейс — стандартный fastboot ff/42/03. Однако его класс устройства — ff, поэтому ОС (здесь macOS), похоже, не настраивает конфигурацию, и fastboot devices остаётся пустым.

Если это происходит, исправление заключается в том, чтобы один раз задать конфигурацию с помощью pyusb, а затем использовать fastboot как обычно:```

one-time setup

brew install libusb python3 -m venv ~/venvs/fastboot source ~/venvs/fastboot/bin/activate pip install pyusb

each time the projector is in U-Boot fastboot

source ~/venvs/fastboot/bin/activate python3 -c 'import usb.core; usb.core.find(idVendor=0x1f3a,idProduct=0x1010).set_configuration()' fastboot devices

root@kitploit:~
### **FEL/efex**

Из U-Boot fastboot команда `fastboot oem efex` переключает на гаджет efex `1f3a:efe8`. (Возможно, потребуется тот же фикс `set_configuration()`)

**Сборка Sunxi-tools из исходников**```
# one-time: build sunxi-fel
brew install libusb dtc pkg-config
git clone https://github.com/linux-sunxi/sunxi-tools
cd sunxi-tools && make sunxi-fel
sudo cp sunxi-fel /usr/local/bin/   # optional, else call ./sunxi-fel

# enter efex and check the handshake (read-only)
fastboot oem efex
source ~/venvs/fastboot/bin/activate
python3 -c 'import usb.core; usb.core.find(idVendor=0x1f3a,idProduct=0xefe8).set_configuration()'
sunxi-fel --list --verbose
sunxi-fel version

AWUSBFEX soc=00001860(unknown) 00000001 ver=0001 44 08 scratchpad=00121500 00000000 00000000.
Используйте только version и --list, никогда spl, uboot, write или exe, поскольку инструменты sunxi не знают этот чипсет.

Чтобы выйти из FEL, сначала отключите USB, затем выключите питание, пока синий светодиод на проекторе не погаснет. wdreset не работает без данных SoC.

8. Очистка

8.1. Резервное копирование доказательств```

mkdir -p evidence && cd evidence adb shell getprop > getprop.txt adb shell pm list packages -f -i -U > packages.txt adb shell "netstat -tnp" > netstat.txt adb shell 'ls /system/etc/init /vendor/etc/init' > init-files.txt

APKs of the suspicious apps

adb pull /system/app/AndroidAnalytics_yiyou adb pull /system/priv-app/AshdSysApp adb pull "$(adb shell pm path com.google.adtest | cut -d: -f2)" adtest.apk

Complete app data incl. hidden folders (plugin.jar, .rf modules, prefs)

adb exec-out 'tar -cf - /data/data/com.android.umanalytics.yiyou /data/data/com.android.sysapp' > appdata.tar tar -tvf appdata.tar | grep -E '.jar|.rf|.apk|.xml' # check nothing is missing find . -type f -exec shasum -a 256 {} + > ../SHA256SUMS

root@kitploit:~
### 8.2. Удаление```
# System apps (UID 1000): cannot be deleted from /system without a firmware rebuild.
# Stop, disable, wipe data for user 0 -> inert for the running system, survives reboots.
for p in com.android.umanalytics.yiyou com.android.sysapp com.cloudmedia.testapk; do
  adb shell am force-stop $p
  adb shell pm disable-user --user 0 $p
  adb shell pm clear $p
done

adb shell pm uninstall com.google.adtest

# I removed this too for safety
adb shell pm uninstall com.disney.disneyplus

# Leftovers
adb shell 'rm -rf /data/local/tmp/* /data/ota_package/tmp/*'

adb reboot

Оставлено, вероятно безвредно:

  • qw (демон su, удаляется только редактированием /system, доступен только локально)
  • безвредные OEM-приложения: appsdisable, gmsopt, systemmixservice
  • com.android.nfx (вспомогательный компонент пульта Netflix)

Проверка защиты от вмешательства

Удаление yiyou ломает Settings. checkSHA1() в com.ashd.settings выполняет две проверки:

  1. Собственный сертификат подписи Settings, требующий совпадения с одним из пяти жёстко заданных SHA1 (CD:B1:B7:56:85:FE:16:C2:7E:4C:45:59:54:43:AC:B0:1F:68:40:91, 60:35:FD:9E:68:E9:20:C2:B5:B0:7C:F2:B5:10:F2:83:47:06:DE:15, 6E:40:BA:7F:F7:90:7D:40:C2:F1:6D:12:E4:63:E5:E4:A3:F1:5A:01, 27:19:6E:38:6B:87:5E:76:AD:F7:00:E7:EA:84:E4:C6:EE:E3:3D:FA, F6:08:8C:ED:B9:9A:EC:82:A7:7D:F3:F9:01:97:06:BE:C0:65:E4:9A)
  2. Проверку того, зарегистрирован ли com.android.umanalytics.yiyou (или com.android.umanalytics.kege, вероятно, имя дроппера в других сборках прошивки) для пользователя 0.

Оба пути сбоя логируют 签名校验失败,关闭应用 («проверка подписи не удалась, приложение закрывается»). Полное удаление yiyou (а не просто его отключение, как выше) вызывает этот сбой. adb shell pm install-existing com.android.umanalytics.yiyou восстанавливает регистрацию без повторного включения.

8.3. Подтверждение```

adb connect 10.56.215.10:5868

adb shell pm list packages | grep -iE 'yiyou|sysapp|adtest|speed|testapk' # expect: nothing adb shell ps -A | grep -iE 'yiyou|sysapp|speed|umanalytics' # expect: nothing adb shell 'ls /data/data/com.android.umanalytics.yiyou 2>&1' # expect: No such file adb shell "netstat -tnp | grep ESTABLISHED"

expect: only adbd to your computer (plus Google services, if allowed)

red flag: any process with several connections to public IPs

adb shell pm list packages -3 -i # new apps? check their installer

root@kitploit:~
**Результаты на этом устройстве после очистки и перезагрузки:**```
adb shell "netstat -tnp"
# tcp   127.0.0.1:52992  127.0.0.1:5354  ESTABLISHED 3351/com.android.toofifi  <- local screen-cast service
# tcp   127.0.0.1:52994  127.0.0.1:5354  ESTABLISHED 3351/com.android.toofifi
# tcp6  10.56.215.10:5868  <your computer>  ESTABLISHED 5332/adbd              <- your ADB session
#  -> no outbound connections left (before: ~25 from yiyou)

Повторите проверку netstat через 24 часа (загрузчик выходит на связь каждые 6 часов) и поищите в логах DNS и межсетевого экрана попадания в блок-листы с IP проектора.

8.4. Ограничения

  • Сброс к заводским настройкам возвращает yiyou и sysapp. Перед выходом в сеть повторно выполните раздел 8.
  • Перемонтирование /system в режим чтения-записи для удаления APK не рекомендуется: vbmeta заблокирован, /system заполнен на 100%, поэтому adb disable-verity + adb remount создадут оверлей в /data (теряется при сбросе к заводским настройкам, как и pm uninstall --user 0) с риском сбоя загрузки.
  • Таким образом, окончательное удаление означает удаление APK из super в вашем дампе и его прошивку через FEL. Не проверено.``` adb shell getprop ro.boot.vbmeta.device_state # locked adb shell getprop ro.boot.verifiedbootstate # (empty) adb shell df -h /system # 1.1G 1.1G 3.4M 100%
root@kitploit:~
### 8.5. Bloatware```
adb shell pm disable-user --user 0 com.android.toofifi
adb shell pm disable-user --user 0 com.toofifi.lineserver
adb shell pm disable-user --user 0 com.toofifi.miracast
adb shell pm disable-user --user 0 com.mphotool.usbcastserver
adb shell pm disable-user --user 0 com.rockchip.devicetest

Восстановить с помощью pm enable --user 0 <package>

  • com.android.toofifi: основной сервис трансляции экрана. Вы теряете зеркалирование экрана (трансляция в стиле Miracast/AirPlay) с телефонов и ноутбуков.
  • com.toofifi.lineserver: сервер проводного/USB-дисплея для того же стека, обращается к server.mphotool.com:8680 для проверки лицензии. Вы теряете режим проводного дисплея.
  • com.toofifi.miracast: беспроводной приёмник Miracast, обращается к server.mphotool.com:8680/MPAPI/System/CheckUpdate и загружает журналы использования на mphotool.com/FeituAppLogMgr. Вы теряете беспроводную трансляцию.
  • com.mphotool.usbcastserver: сервер USB-трансляции, тот же производитель. Вы теряете поддержку USB-трансляции с устройства.
  • com.rockchip.devicetest: нет причин находиться на устройстве Allwinner.

9. Полная карта компонентов

Статический анализ. Исходные декомпилированные исходники, расшифрованные модули .rf и использованные скрипты хранятся в analysis/ (decompiled/, decrypted_modules/, tools/).

9.1 OTA-обновление

com.android.sysapp

Декомпилированные классы a.a.b.m/a.a.b.n дают точный, буквальный OTA-запрос:``` POST http://wjtysj.ishanghd.com/hx_kt.php?act=project&do=getPackageInfo &productid=<ro.android.productid, default "74865231"> &device_mode=<persist.sys.cm.dtsmodel, e.g. "AT-M269"> &devices_version=<ro.build.version.incremental> &update_type=1|2 # 1 auto check, 2 forced ("check for update" button)

root@kitploit:~
через Apache `HttpPost` с пустым телом формы. Всё находится в строке запроса, поэтому GET и POST эквивалентны и нет подписи/токена. Воспроизведено вживую (2026‑09‑26): `{"code":200,"data":[]}`, похоже, для этого productid нет пакета ни в одной из испробованных версий.

### 9.2 Дроппер

`com.android.umanalytics.yiyou`

**Самообновление** (`http.utils.UpdateUtils.checkUpdate`)
`GET http://ty.ishanghd.com/work/app/wj/factory/update.json` возвращает `DownLoadURL` с `MD5` и `VersionCode`, который скачивается, проверяется по MD5, `PkgUtils.install(path, 1)` и тихо само заменяется.

**Загрузка `plugin.jar`** (`MyService`)
`GET http://isdownload.ishanghd.com/work/app/wj/plugin/infos_9269.json` возвращает `plugin.jar`, который скачивается в `<cache>/plugin.jar` и загружается через `DexClassLoader`. `com.anlytics.plug.ParserUtils.AnalyticsHelper("test")` — точка входа.

**Профиль списка приложений для каждого устройства**
Это кастомные приложения для каждого устройства в кампании (вероятно, пропатченные для обхода DRM?)

`com.anlytics.plug.b` снимает отпечаток платы (`ro.board.platform`, `persist.sys.cm.dtsmodel`, `ro.sys.cputype`, `ro.build.version.release`, установленные пакеты, файлы вроде `/system/etc/voice.tar.gz`) и сопоставляет его с 40 жёстко заданными профилями, выбирая подходящий URL `appsinfo/.../infos*.json` из констант в `com.tools.a`.

Этот экземпляр поставляет `com.ashd.launcher10` и сообщает `persist.sys.cm.dtsmodel=AT-M269` / плата `ares`, и единственный профиль H713 "launcher10" в таблице — это:```
http://ty.ishanghd.com/work/app/wj/appsinfo/H713_ASHD/H713_GBPT_HY300A_720P/infos_launcher10.json

| --no-color | Отключить цветной вывод | | --debug | Включить отладочный вывод | | --verbose | Включить подробный вывод | | --silent | Подавить весь вывод | | --json | Выводить результаты в формате JSON | | --csv | Выводить результаты в формате CSV | | --html | Выводить результаты в формате HTML | | --markdown | Выводить результаты в формате Markdown | | --output <file> | Записать вывод в файл | | --config <file> | Использовать указанный файл конфигурации | | --profile <name> | Использовать указанный профиль | | --timeout <seconds> | Установить тайм-аут | | --retries <count> | Установить количество повторных попыток | | | Установить уровень параллелизма | | | Установить ограничение скорости | | | Использовать указанный прокси | | | Установить User-Agent | | | Добавить пользовательский заголовок | | | Добавить пользовательский cookie | | | Использовать указанные учётные данные | | | Использовать указанный токен | | | Использовать указанный API-ключ | | | Использовать указанный секрет | | | Использовать указанный пароль | | | Использовать указанное имя пользователя | | | Использовать указанный email | | | Использовать указанный домен | | | Использовать указанный хост | | | Использовать указанный порт | | | Использовать указанный протокол | | | Использовать указанный метод | | | Использовать указанный путь | | | Использовать указанный запрос | | | Использовать указанное тело | | | Использовать указанные данные | | | Использовать указанный файл | | | Использовать указанную директорию | | | Использовать указанный URL | | | Использовать указанную цель | | | Использовать указанный входной файл | | | Использовать указанный выходной файл | | | Использовать указанный формат | | | Использовать указанный шаблон | | | Использовать указанный плагин | | | Использовать указанный модуль | | | Использовать указанный скрипт | | | Использовать указанную команду | | | Использовать указанную опцию | | | Использовать указанный флаг | | | Использовать указанный параметр | | | Использовать указанный аргумент | | | Использовать указанную переменную окружения | | | Установить указанную переменную | | | Удалить указанную переменную | | | Показать список элементов | | | Показать элементы | | | Скрыть элементы | | | Включить функцию | | | Отключить функцию | | | Принудительно выполнить операцию | | | Ответить «да» на все запросы | | | Ответить «нет» на все запросы | | | Подавить вывод | | | Показать информацию о версии | | | Показать справку |```json date 20240819 description "1、优化网络访问\n2、增强系统稳定性。" appInfos 0 appVersionCode 425 appName "uninstall" appPkgName "com.netflix.ninja" appMd5 "3D3EC4CAA09F68170EB0ADC5A92AC018" appUrl "" 1 appVersionCode 84 appName "launcher10" appPkgName "com.ashd.launcher10" appMd5 "3AA639AE6850189EB8EB4B288AFAD70A" appUrl "" 2 appVersionCode 3 appName "platinum" appPkgName "com.allwinnertech.platinum.media" appMd5 "5DA2127B3D0E983D96C16F5960CFE5E0" appUrl ""

root@kitploit:~
**Полный список из 40 URL-адресов профилей**
Каждый, вероятно, относится к семейству устройств-жертв в рамках одной и той же кампании:```
infos.json
TEST/infos.json
infos_qp.json
infos_lm.json
infos_wy.json
infos_wy_fj600.json
infos_set.json
infos_ydd3128.json
WANYING_test/infos.json
YBS_ASOS/infos.json
YDN2_YIUI_RX480P/infos.json
YINGKE_CC720P/infos_0208.json
YINGKE_CC720P/infos_ZG_0315.json
YINGKE_CC720P/infos_0313.json
YINGKE_CC720P/infos_0504.json
SAIER_RK3326_DV381_YIUI/infos.json
SAIER_RK3326_DV381_YIUI_C1PRO/infos.json
rk3326_ASHD/Q3/infos.json  H713/N1/infos.json
rk3326/HY300A/infos.json
rk3326/Saier_zhixiang_0326/infos.json  YKK_3326_YIUI/infos.json
rk3326_ASHD/RK3326_ASHD_X1_SUR269_AHW_OLD/infos.json
rk3326_ASHD/RK3326_ASHD_X1_SUR269_AHW_DSN/infos.json
rk3326_ASHD/RK3326_HY300A_YM_SUR269_AHW/infos_dsn.json
rk3326/HY300A_GBPT_HP265013_AHW/infos_0611.json
rk3326_ASHD/RK3326_HY300A_GBPT_HP265013_AHW/infos_dsn.json
rk3326_ASHD/RK3326_HY300A_GBPT_HP265013_AHW_OLDNFX/infos.json
rk3326_ASHD/BNX_TXD265_AHW_3+64_Lingbo/infos2.json
rk3326_ASHD/RK3326_GBPT_720P_CAOYING/infos.json
rk3326_ASHD/RK3326_GBPT_LAUNCHER10/infos.json
rk3326_ASHD/RK3326_HY300A_JUYING1_8_HP265013_AHW/infos.json
H713_ASHD/H713_GBPT_HY300A_720P/infos.json
H713_ASHD/H713_HY300A_720P_YIRUO/infos_0304.json
H713_ASHD/H713_GBPT_HY300A_720P/infos_games_1207.json
H713_ASHD/H713_GBPT_HY300A_720P/infos_games_0221.json
H713_ASHD/H713M_HY300PRO_MAX_HP269006_BAT/infos_1220.json
H713_ASHD/H713M_HY300A_VIEW_0304/infos.json
H713_ASHD/H713_GBPT_HY300A_720P/infos_0318.json
H713_ASHD/H713_SKW/infos.json
H713_ASHD/H713_NEFHELP/infos.json
H713_ASHD/DSN/infos.json
rk3326_ASHD/DSN/infos.json
rk3326_ASHD/RK3326_AD/infos_ad_asos.json
H713_ASHD/H713_HY300_HIFI/infos.json
H713_ASHD/H713M_HY300_A/infos_F8.json
H713_ASHD/H713M_TENPLUS_0625/infos.json
H713_ASHD/H713_GBPT_HY300A_720P/infos_launcher10.json
Hisi352_ASHD/TS-6/infos_0730.json
H723_ASHD/H723_T1Pro/infos_0618.json

Каждый infos*.json перечисляет приложения для pm install -r (payload com.google.adtest + прикрывающие приложения вроде Disney+), как описано в 3..

9.3 plugin.jar

Шифрование C2-хостов com.hs.p.basic.Hosts/EncryptUtils Каждая строка хоста зашифрована AES/CFB/NoPadding (ключ MD5("ota.host.a46780a24111f056d95f955462606901"), IV "0102030405060708"), сжата gzip, затем base64:

  • API_MASTER_HOSTS: https://api.loritor.cc/
  • TRACKER_SLAVE_HOSTS: https://api.loritor.cc/
  • API_SLAVE_HOSTS: https://api.nizero.cc/
  • TRACKER_MASTER_HOSTS: https://api.nizero.cc/ (приоритеты переставлены относительно API-канала?)

И loritor.cc, и nizero.cc, похоже, были недоступны на момент этого тестирования.

Пути API задач/конфигурации GetTaskApi, GetConfigApi POST <host>/0x01/ov/x1 (конфигурация: окна тихого режима, переключатель логирования, отправка списка хостов, период опроса) и POST <host>/0x01/ov/x2 (список задач: пагинированные по курсору jars[]/dexs[]/apks[], каждый с file_url/file_md5/vercode/task_id). Поле "data" в теле ответа зашифровано тем же способом, ключ "ota.api.d3b194c07b63d688969c258719ca3f0f".

Формат модуля .rf Расшифровка всех четырёх модулей, которые у меня есть, с валидными DSA-подписями: [4B version][4096B pad][32B salt][4B+N invocation AES-CFB][4B+N module AES-CFB][4B+N DSA sig].

AES-ключ = MD5("968a84be78d3421d5e771147dce2b766" + salt), тот же фиксированный IV, что и выше.

Публичный ключ DSA захардкожен (1024-битный, встроен в DexManager/JarExe). Открытый текст — это ZIP/APK, а не сырой dex.``` SKN0041: {"cn":"com.hotota.p.d.MainApi","m_init":"start_W0017","m_uninit":"stop"} SKN0054: {"cn":"com.hotota.p.d.MainApi","m_init":"start_W0028","m_uninit":"stop"} SKN0058: {"cn":"com.hotota.p.d.MainApi","m_init":"start_W0032","m_uninit":"stop"} SKN0061: {"cn":"com.hotota.p.d.MainApi","m_init":"start_W0035","m_uninit":"stop"}

root@kitploit:~
### 9.4 com.ad.proxy

`SKN0041`

Точка входа `MainApi.start_W0017` запускает клиент `Robin`. Два обычных HTTP(S)-эндпоинта, `channel`/`version` передаются тем, кто вызвал модуль:```
GET  https://api.kookjar.com/signin?uuid=<uuid>&channel=<channel>&version=<version>
# (debug build: http://152.32.240.141 same paths)
POST https://api.kookjar.com/report?uuid=<uuid>&channel=<channel>&version=<version>
     body: {"gateway_list":[{"host":..,"port":..,"status":..}, ...]}
     # reports back which proxy gateways it reached

9.5 com.szns.sdk

SKN0054

Строки доменов/IP здесь обфусцированы: Base64→XOR(fixed key) > XOR(prev result) > MD5-derived XOR > Base64 > gzip в классе com.szns.sdk.t.

Воспроизведён точный алгоритм (analysis/tools/decode_szns_t.py) и расшифрованы все четыре жёстко закодированные точки входа bootstrap:``` ac.a() -> https://hgsdkszns.com ac.b() -> http://dporder.midrouterx.com/api/dispatch (state 1: fetch "domain_info", cached 24h) ac.c() -> https://seed-info.oss-ap-southeast-1.aliyuncs.com/favorite.ico (state 3: OSS bootstrap; body is a plain URL: "http://dporder.midrouterx.com/api/dispatchByOss") ac.d() -> 43.173.127.241:9090 (state 5: "ip_tcp_info" bootstrap)

root@kitploit:~
Если нет кэшированного dispatch URL (состояние 7):
UDP-сканирование `43.153.12.1` - `43.153.80.100:8080`

Отправка литерального ASCII-пейлоада `"moon2"` с ожиданием любого ответа, начинающегося с `http`. Этот ответ становится dispatch URL.

Каждый bootstrap-запрос — это `POST <url>` с полями формы `{"operator":<c>,"c":"moon2","name":<d>}` в `com.szns.sdk.x`.

Какой бы dispatch URL ни разрешился, ему затем POST-ятся те же поля, и он возвращает реальный список шлюзов, зашифрованный как `AES/CBC/PKCS5` (ключ `"5360e2884c119aa32a767ceb1c0889b0"`, случайный IV, конверт `base64(iv):base64(ciphertext)`)

Формат расшифрованного JSON: `{"data":{"schedule":N,"thread":N,"heartbeat":N,"st":N,"node":[{"connect":"host:port","proxy":"host:port"}, ...]}}`.

### 9.6. com.link.core

`SKN0058 `

Единственный жёстко закодированный шлюз, без слоя обнаружения: `com.link.core.a.g` → `["api.eviceh.cc:16000"]`. DNS-резолверы, используемые для собственных запросов: `8.8.8.8`, `9.9.9.9`, `1.1.1.1`, `1.0.0.1`. Читает `/proc/cpuinfo` и `/sys/class/net/{eth0,wlan0}/address` для фингерпринтинга устройства.

### 9.7. ddth2 (VpsSdk)

`SKN0061`

Жёстко закодированный пул шлюзов, `ddth2.hidden.o`: домены `dw4y.mmavlino.com`, `zx8c.llvyomi.net`, `zxn5.p2f7mjhv.eu.cc`, IP-адреса `45.43.57.99`, `165.154.135.52`.

Постоянный кастомный бинарный TCP-протокол:

- connect
- рукопожатие `REGISTER`/`REGISTER_ACK` (8-байтовый заголовок кадра, opcode+length)
- затем шлюз отправляет команды connect (`{host, port}`
- отфильтрованные против диапазонов private/loopback/multicast, которые порождают проксированные сокеты для каждой сессии, что объясняет "множество параллельных клиентских экземпляров".

### 9.8. com.google.adtest

или `com.fotas.wanapp ("com.speed")`

Реальное внутреннее имя пакета — `com.fotas.wanapp` (класс App `com.fotas.wanapp.APP`). `onCreate()` настраивает три хоста по той же схеме master/slave/random, что и `plugin.jar`:```
master -> https://api.pechlo.cc/
slave  -> https://api.logobi.cc/
random -> https://random.vivosoc.cc/

Проверка устройства происходит через POST https://codedevapp.com/api/v1/device/dau.

Запускаются два сервиса:

  • com.google.android.AdService
  • com.google.android.BakService

Рефлексивно проверяет наличие и инициализирует необязательный класс com.fotas.wanapp.ChannelSdkInit, если он присутствует. Строки app id: "wanapp", "WAN_AISHANG_001".

9.9. Снимок текущего состояния (2026-09-26)

Проверка доступности только для чтения с независимого хоста (без отправки прокси-протокола/полезных нагрузок, без взаимодействия с самим проектором):

10. URL-адреса

11. Прочее

Параметры разработчика:

  1. Deviceversion.onKeyDown (экран «Информация об устройстве» в настройках) отслеживает код в стиле Konami: Вверх Вверх Вниз Вниз Влево Влево Вправо Вправо Центр Центр, который пытается открыть параметры разработчика. У меня это не сработало.
  2. Вверх Вниз Влево Вправо Центр пытается запустить com.konka.readmain.MainActivity — не связанное с этим заводское тестовое приложение OEM, которое на самом деле не установлено на этом устройстве. То же самое, не сработало.``` adb shell am start -n com.ashd.settings/com.rk_itvui.settings.deviceversion.Deviceversion adb shell input keyevent 19 adb shell input keyevent 19 adb shell input keyevent 20 adb shell input keyevent 20 adb shell input keyevent 21 adb shell input keyevent 21 adb shell input keyevent 22 adb shell input keyevent 22 adb shell input keyevent 23 adb shell input keyevent 23
root@kitploit:~
Скачать инструмент
ТерминЧто он делаетLAN
NetworkInterface (adtest, plugin, SKN0061)Считывает собственные IP и MAC устройства для идентификатора ботаНет
DatagramSocket в SKN0041UDP-ретрансляция для прокси-сессий к шлюзуНет
DatagramSocket в SKN0054Обнаружение C2: сканирует 43.153.12-80.1-100:8080 (диапазон публичного облака)Нет
ServerSocket в plugin.jarСервер повторной трансляции видео, см. нижеНет
Срабатывания Runtime.exec (yiyou, plugin.jar, adtest, SKN0041/54/58/61)Внутренности сторонних SDK, chmod 777 для локальных файлов, su/pm/dumpsys для проверок foreground-приложения или root и выданный оператором ping в SKN0041Только команда ping
UPnP, mDNS/NSD, SSDP, WiFi Direct, ARP/вычисления подсети, ADB 5555, telnetнетНет
systemmixservice / libsystemmixservice.so / libsystemmix_jni.soТолько Binder OEM-сервис: get/set свойств, чтение/запись/удаление сырых файлов, mount/umount, загрузочный логотип/анимация. Ни в одном из бинарников нет символов socket/bind/connect/listen/acceptНет
qwДемон su для Superuser/ClockworkMod. В его строках только пути Unix-доменных сокетов (/dev/com.koushikdutta.superuser[.daemon]), нет IP-литералов, нет AF_INETНет
com.android.nfx (NFXAccessibility)Помощник навигации Netflix с D-pad, активен только пока com.netflix.mediaclient находится на переднем плане. В манифесте вообще нет разрешения INTERNETНет
// SKN0054 com/szns/sdk/t.java - refuses private and loopback targets, IPv4 dotted-decimal only
str.equals("0.0.0.0")str.matches("^10\..*")
--concurrency <count>
--rate-limit <count>
--proxy <url>
--user-agent <string>
--header <header>
--cookie <cookie>
--auth <credentials>
--token <token>
--api-key <key>
--secret <secret>
--password <password>
--username <username>
--email <email>
--domain <domain>
--host <host>
--port <port>
--protocol <protocol>
--method <method>
--path <path>
--query <query>
--body <body>
--data <data>
--file <file>
--directory <directory>
--url <url>
--target <target>
--input <file>
--output <file>
--format <format>
--template <template>
--plugin <plugin>
--module <module>
--script <script>
--command <command>
--option <option>
--flag <flag>
--param <param>
--arg <arg>
--env <env>
--set <key=value>
--unset <key>
--list
--show
--hide
--enable
--disable
--force
--yes
--no
--quiet
--version
--help
http://isdownload.ishanghd.com/work/app/wj/app/rk3326/Netflix_425.apk
http://isdownload.ishanghd.com/work/app/wj/app/H713/Launcher10_HY300_1.84.apk
http://isdownload.ishanghd.com/work/app/wj/app/H713/PlatinumMediaDLNA.apk
ХостРезультат DNS / подключенияПримечания
api.loritor.cc, api.nizero.ccразрешается (Cloudflare), HTTP 404 на /жив; реальные пути — /0x01/ov/x1, /0x01/ov/x2
api.kookjar.comразрешается (Cloudflare, 172.67.159.65), HTTP 204жив
152.32.240.141 (отладочный резерв SKN0041)TCP/80 тайм-аутнедоступен; в любом случае только отладочный путь, в продакшене используется api.kookjar.com
dporder.midrouterx.comразрешается напрямую (43.174.196.241, Tencent Cloud), HTTP 200 на /api/dispatchжив
seed-info.oss-ap-southeast-1.aliyuncs.comразрешается (47.79.49.170, Alibaba Cloud SG), HTTP 200, отдаёт favorite.icoжив
hgsdkszns.comразрешается (Cloudflare)DNS жив; обычная HTTPS-проверка сбрасывается (неиспользуемая ветка в текущей сборке, см. 10.5)
43.173.127.241:9090сырое TCP-подключение успешножив, слушает прямо сейчас
api.eviceh.cc:16000разрешается (152.53.83.204)DNS жив, TCP/16000 отклонён на момент проверки (шлюз сейчас не слушает)
dw4y.mmavlino.com / zx8c.llvyomi.net / zxn5.p2f7mjhv.eu.cc / 45.43.57.99 / 165.154.135.52не перепроверялись в этот разсм. раздел 11
api.pechlo.cc, api.logobi.ccразрешаются (Cloudflare), HTTP 404 на /живы
random.vivosoc.ccнет DNS-записипо-видимому мёртв/истёк
codedevapp.comразрешается (5.161.41.216, Hetzner)жив; /api/v1/device/dau принимает только POST, поэтому простой GET прерывается
Хост / URLКомпонентРоль
ishanghd.com, ty.ishanghd.com, isdownload.ishanghd.com, wjtysj.ishanghd.comsysapp, yiyouкорневой домен OEM-бэкенда
wjtysj.ishanghd.com/hx_kt.phpsysapp (AshdSysApp)C2 OTA-обновления (act=project&do=getPackageInfo)
ty.ishanghd.com/work/app/wj/factory/update.jsonyiyouуказатель самообновления дроппера
ty.ishanghd.com/work/app/wj/appsinfo/* (40 путей, см. выше)yiyouсписки полезных нагрузок/приложений для каждого семейства устройств (цели pm install -r)
isdownload.ishanghd.com/work/app/wj/plugin/infos_9269.jsonyiyouуказатель загрузки plugin.jar
isdownload.ishanghd.com/work/app/wj/plugin/plugin/2026082800/plugin.jaryiyouфактическая полезная нагрузка plugin.jar (версионированный путь, меняется со временем)
isdownload.ishanghd.com/work/app/wj/app/rk3326/L3.zipplugin.jarпакет ключей/лицензий Widevine L3 DRM, устанавливается, чтобы стриминговые приложения работали на несертифицированном устройстве
api.loritor.cc, api.nizero.ccplugin.jar ("hs")API задач/конфигурации (/0x01/ov/x1, /0x01/ov/x2), как в роли API-канала (master/slave), так и в роли канала трекера (slave/master меняются местами)
api.kookjar.com (+ отладка 152.32.240.141)SKN0041/signin, /report
api.eviceh.cc:16000SKN0058единственный шлюз
hgsdkszns.comSKN0054дополнительный жёстко закодированный bootstrap-хост (неиспользуемая ветка в текущей сборке)
dporder.midrouterx.com/api/dispatch (+ /api/dispatchByOss, доступ через OSS bootstrap ниже)SKN0054основной bootstrap диспетчеризации
seed-info.oss-ap-southeast-1.aliyuncs.com/favorite.icoSKN0054размещённый в OSS bootstrap-редиректор (Alibaba Cloud OSS)
seed-1303252866.cos.na-siliconvalley.myqcloud.com/favorite.icoSKN0054резервное зеркало Tencent COS той же bootstrap-конфигурации
43.173.127.241:9090SKN0054bootstrap-хост ip_tcp_info (точный порт подтверждён, активен)
43.135.136.224SKN0054шлюз диспетчеризации, наблюдался активным (tcp/7788 /api/dispatch, tcp/9090)
43.159.148.198SKN0054эндпоинт шлюза/списка серверов, наблюдался активным, /dp/getServer (вероятно, возвращался динамически внутри зашифрованного списка node[])
43.130.60.175SKN0054дополнительный узел прокси-шлюза (tcp/9090), наблюдался активным
43.153.12.1–43.153.80.100:8080 (UDP)SKN0054сканирование обнаружения; полезная нагрузка пробы — буквальная ASCII-строка moon2
dw4y.mmavlino.com, zx8c.llvyomi.net, zxn5.p2f7mjhv.eu.cc, 45.43.57.99, 165.154.135.52SKN0061пул шлюзов, собственный протокол TCP-прокси
api.pechlo.cc, api.logobi.cc, random.vivosoc.cccom.speed / com.fotas.wanappC2 master/slave/random
codedevapp.com/api/v1/device/daucom.speed / com.fotas.wanappпроверка устройства
live.sz-cloudmedia.com:8080/ota/устаревший OTA (старый/родственный вариант sysapp)тупик, у домена нет регистрации ICP, Alibaba блокирует его.
ulogs.umeng.com, ulogs.umengcloud.com, alogus.umeng.com, alogsus.umeng.com, ouplog.umeng.com, plbslog.umeng.comyiyou (Umeng SDK)телеметрия сторонней аналитики, несущая отпечатки устройства (серийный номер, MAC-адреса, SSID/BSSID), собираемые приложением yiyou
hmma.baidu.com, datax.baidu.com, dxp.baidu.com, openrcv.baidu.comyiyou (Baidu Mobile Stats SDK)та же телеметрическая роль, через Baidu
cmnsguider.yunos.com, ip.taobao.com, g3.le.comyiyouсервисы токенов устройств Alibaba/Yunos и определения публичного IP, используемые для фингерпринтинга