Mobil ilovalarda Root Detection — mohiyati, aniqlash usullari va ishlash prinsipi

Muallif: IT Sectr Nashr etilgan: 2026-04-03 O'qish vaqti: 9 daq

Root Detection — Android ilovalarini superfoydalanuvchi imtiyozlariga ega qurilmalarda ishga tushirishdan himoya qiluvchi mexanizm. Bank, toʻlov va korporativ ilovalar root qilingan qurilmalarda funksionallikni bloklaydi yoki cheklaydi, chunki root kirishi Android sandbox cheklovlarini olib tashlaydi va trafikni tutib olish, jarayonlar xotirasini oʻqish va maʻlumotlarni almashtirish imkoniyatini ochadi. OWASP Mobile Top 10 (2024) maʻlumotlariga koʻra, Root Detectionning yoʻqligi M8 (Security Decisions via Untrusted Inputs) toifasiga kiradi. Root Detection fayl tizimining statik tekshiruvlari va runtime xatti-harakatlarining dinamik tahlili kombinatsiyasiga asoslanadi.

Asosiy ma'lumotlar

  • Root Detection — ilovani buzilgan muhitda ishga tushirishdan himoya qilish uchun Android qurilmasida root kirishi mavjudligini tekshirish
  • Statik usullar fayl tizimini su-binar fayllari, Superuser ilovalari va tizim boʻlimlaridagi oʻzgarishlar uchun tekshiradi
  • Dinamik usullar runtime-ni tahlil qiladi: Build.TAGS tekshiruvi, imtiyozli jarayonlar bilan /proc/self/maps ni ochish urinishi
  • Nativ tatbiq C/C++ da JNI orqali Java darajasida Xposed va Frida orqali chetlab oʻtishga chidamlilikni ta'minlaydi
  • Xavfsizlik Root Detection tekshiruv natijalarini almashtirishning oldini olish uchun doimiy obfuskatsiya va server tomonida tekshirishni talab qiladi

Root Detection nima?

Root Detection — Android qurilmasida root kirishi mavjudligini aniqlovchi dasturiy mexanizm. Root kirishi operatsion tizim ustidan toʻliq nazoratni ta'minlaydi, ilovalar va skriptlarga UID 0 bilan buyruqlarni bajarishga imkon beradi. Root qilingan qurilmada ilovalar izolyatsiyasi (Android Sandbox) yoʻqoladi, bu esa klaviatura kiritishini tutib olish, boshqa ilovalarning SQLite ma'lumotlar bazalarini oʻqish, jarayonlarga kod kiritish va ishonchli saqlashda SSL sertifikatlarini almashtirish imkonini beradi.

Moliyaviy va korporativ ilovalar uchun root qilingan qurilmada ishlash qabul qilib boʻlmaydigan xavf hisoblanadi: buzgʻunchi tokenlar, sessiya kalitlari va shaxsiy ma'lumotlarga kirish huquqini oladi. PCI Security Standards Council kabi tartibga soluvchi organlar toʻlov ilovalaridan root kirishini aniqlash va unga munosabat bildirishni talab qiladi. Bunga javoban Android dasturchilari Root Detectionni proaktiv himoya strategiyasining bir qismi sifatida kiritadilar.

Aniqlashning ikki yondashuvi mavjud: fayl tizimi va oʻrnatilgan paketlarni tahlil qiluvchi statik, va runtime-da tekshiruvlarni amalga oshiruvchi dinamik. Kombinatsiyalangan yondashuv eng ishonchli hisoblanadi, chunki u chetlab oʻtishning turli vektorlarini qamrab oladi. NowSecure (2025) tadqiqotiga koʻra, Google Play top-100 dagi bank ilovalarining 76% i qandaydir shaklda Root Detectionni oʻz ichiga oladi.

Rootni aniqlashning statik usullari

Statik usullar ilova ishga tushganda bajariladi va root vositalari fayl tizimida qoldirgan root kirishi belgilarini tekshiradi. Bu usullar imtiyozli buyruqlarni bajarishni talab qilmaydi va oddiy ilova kontekstida ishlaydi.

su-binar faylining mavjudligini tekshirish

Root kirishining asosiy belgisi — standart yo'llarda su bajariladigan faylining mavjudligi: /system/bin/su, /system/xbin/su, /sbin/su, /su/bin/su. Ilova faylning mavjudligini File.exists() yoki libc dan access() nativ tatbiqi orqali tekshiradi. Qo'shimcha ravishda su --version yoki su -c id bajarishga va chiqish kodini tekshirishga harakat qilish mumkin.

Root menejerlarini qidirish

Root kirishini boshqarish uchun odatiy ilovalar: Superuser, SuperSU, Magisk Manager, KingRoot. Ularning mavjudligi PackageManager.getPackageInfo() yoki /data/app/ katalogini oʻqish orqali tekshiriladi. Tekshiriladigan paketlar: com.topjohnwu.magisk, eu.chainfire.supersu, com.noshufou.android.su, com.thirdparty.superuser, com.koushikdutta.superuser, com.zacharee1.systemuituner.

Tizim xususiyatlarini tekshirish

Android tizim holati haqidagi ma'lumotni System.getProperty va Build.TAGS orqali mavjud bo'lgan tizim xususiyatlarida saqlaydi. Build.TAGS qiymati release-keys emas, test-keys ni oʻz ichiga olgan boʻlsa — bu koʻpincha root kirishiga ega bo'lgan maxsus proshivkani koʻrsatadi. Qo'shimcha ravishda ro.build.tags, ro.debuggable va ro.secure /system/build.prop ni oʻqish orqali tekshiriladi.

java
public class RootDetectionChecker {
    private static final String[] SU_PATHS = {
        "/system/bin/su",
        "/system/xbin/su",
        "/sbin/su",
        "/su/bin/su",
        "/system/sd/xbin/su"
    };

    public boolean checkRootByFiles() {
        for (String path : SU_PATHS) {
            if (new File(path).exists()) {
                return true;
            }
        }
        return false;
    }

    public boolean checkRootByPackages(Context ctx) {
        String[] packages = {
            "com.topjohnwu.magisk",
            "eu.chainfire.supersu",
            "com.noshufou.android.su",
            "com.koushikdutta.superuser"
        };
        for (String pkg : packages) {
            try {
                ctx.getPackageManager().getPackageInfo(pkg, 0);
                return true;
            } catch (PackageManager.NameNotFoundException e) {
                // paket topilmadi
            }
        }
        return false;
    }
}

Dinamik tekshirish usullari

Dinamik usullar ilova ishlayotgan paytda bajariladi va bajarish muhitini tahlil qiladi. Statik usullardan farqli oʻlaroq, ular Magisk Hide yoki Zygisk orqali yashirilgan rootni aniqlay oladi, chunki faqat fayl tuzilmasini emas, balki tizimning xatti-harakatini tekshiradi.

Mount nuqtalarini tekshirish

Root kirishi mavjud boʻlganda, ba'zi tizim boʻlimlari ro (read-only) oʻrniga rw (read-write) flagi bilan mount qilinadi. Ilova /proc/mounts ni oʻqiydi va /system ning ro sifatida mount qilinganligini tekshiradi. Agar /system rw sifatida mount qilingan boʻlsa — bu oʻzgartirilgan tizimning belgisidir. Qo'shimcha ravishda Magisk orqali /su mount qilinishining mavjudligi tekshiriladi.

Xavfsiz rejim testi

Android Safe Mode uchinchi tomon ilovalarini, shu jumladan root menejerlarini oʻchiradi. Root Detectionning toʻgʻri tatbiqi qurilmaning xavfsiz rejimda ishlayotganligini tekshirishi mumkin. Agar ilova root menejerlari koʻrinmayotganini, ammo su-binar fayli mavjudligini aniqlasa — bu Magisk Hide belgisidir.

Buyruqlarni bajarishni tekshirish

ProcessBuilder yoki Runtime.exec orqali su -c id ni bajarishga urinish — root kirishining toʻgʻridan-toʻgʻri testi. Biroq, Magisk bu chaqiruvni tutib olishi mumkin. Ishonchliroq variant — nativ kod orqali tekshirish: /proc/1/limits yoki /proc/self/maps ni ochish va ishlayotgan jarayonlarning UID sini tahlil qilish. Agar ilova UID 0 ga ega boʻla olsa yoki faqat root uchun mavjud fayllarni oʻqiy olsa — qurilma buzilgan.

java
public boolean checkRootDynamically() {
    // Yig'ish flaglarini tekshirish
    String buildTags = Build.TAGS;
    if (buildTags != null && buildTags.contains("test-keys")) {
        return true;
    }

    // /system mount qilinishini tekshirish
    try {
        BufferedReader reader = new BufferedReader(
            new InputStreamReader(new FileInputStream("/proc/mounts"))
        );
        String line;
        while ((line = reader.readLine()) != null) {
            if (line.contains("/system")
                && line.contains("rw")) {
                reader.close();
                return true;
            }
        }
        reader.close();
    } catch (IOException e) {
        // mountni o'qishda xato
    }

    return false;
}

Root Detectionni C++ da nativ tatbiqi

Java da tatbiq qilingan Root Detection Java metodlarini tutib oladigan va qaytariladigan qiymatlarni almashtiradigan Xposed modullari yoki Frida orqali osonlik bilan chetlab oʻtiladi. C++ da JNI orqali nativ tatbiq sezilarli darajada chidamli: Java darajasida ishlaydigan dinamik tahlil vositalari stat, access, popen va dlopen kabi libc nativ chaqiruvlarini koʻrmaydi.

cpp
#include <unistd.h>
#include <sys/stat.h>
#include <cstring>
#include <vector>

extern "C"
JNIEXPORT jboolean JNICALL
Java_com_example_checker_RootCheck_nativeCheck(
    JNIEnv* env, jobject instance) {

    std::vector<const char*> paths = {
        "/system/bin/su",
        "/system/xbin/su",
        "/sbin/su",
        "/data/local/su"
    };

    struct stat st;
    for (const char* path : paths) {
        if (stat(path, &st) == 0) {
            return JNI_TRUE;
        }
    }
    return JNI_FALSE;
}

Nativ tekshirish Java API dan foydalanmaydi, bu uni Dalvik/ART darajasida ishlaydigan chetlab oʻtish vositalari uchun koʻrinmas qiladi. Qoʻshimcha himoya uchun konstantalarni (yo'llar ro'yxati) read-only bo'limida emas, balki oddiy qaytariladigan funksiyalar orqali hisoblash tavsiya etiladi. Stat chaqiruvi libc dan to'g'ridan-to'g'ri Linux yadrosiga murojaat qiladi, Java o'ramlarini chetlab o'tadi va uni Xposed orqali tutib olish mumkin emas.

Root Detectionni chetlab o'tish usullari

Himoya ishlab chiqaruvchilari chidamli aniqlash tizimini qurish uchun mavjud chetlab o'tish usullarini tushunishlari kerak. Har bir chetlab o'tish usuli tegishli darajada qarshi chora talab qiladi.

Magisk Hide va Zygisk orqali chetlab o'tish

Magisk — Android 9–14 da eng mashhur root vositasi. Magisk Hide su ning /proc dan mavjudligini yashiradi va yo'llarni tekshirish natijalarini almashtiradi. Magisk yadro darajasida ishlaydi va ilova ko'rishidan oldin stat() va access() ni tutib oladi. Qarshi chora: /sbin/.magisk mavjudligi yoki o'z maps ni o'qish orqali Magiskning o'zini tekshirish — Magisk o'z kutubxonasini har bir jarayonga joylashtiradi.

Frida orqali chetlab o'tish

Frida — Ptrace yoki Dobby orqali nativ funksiyalarni tutib olishi mumkin bo'lgan dinamik instrumentatsiya vositasi. Frida har bir tekshiruvning qaytariladigan qiymatini almashtiradi, stat natijasini ENOENT ga o'zgartiradi. Qarshi chora: xotiradagi ko'rsatmalarning checksum ini hisoblash orqali nativ funksiyalar yaxlitligini tekshirish va Frida ni /proc/self/maps da frida-agent.so yoki frida-helper mavjudligi uchun tahlil qilish.

APK yamog'i orqali chetlab o'tish

Java da tatbiq qilingan Root Detection 2–3 daqiqada olib tashlanadi: APK apktool orqali ochiladi, smali kodida metodning qaytarish qiymati false ga o'zgartiriladi, APK qayta yig'iladi va imzolanadi. Qarshi chora: kritik mantiqni nativ kodga ko'chirish va runtime da Signature API yoki APK hashini serverdagi etalon bilan solishtirish orqali ilovaning raqamli imzosini tekshirish.

Ishonchli himoya bo'yicha tavsiyalar

Samarali Root Detection ko'p qatlamli arxitekturaga asoslanadi. Hech bir usul alohida yetarli himoya darajasini ta'minlamaydi. Statik va dinamik tekshiruvlar, nativ kod va server tekshiruvi kombinatsiyasi maksimal chidamlilikni beradi.

Server tomonida tekshirish

Faqat client-side tekshiruviga ishonmang. Root Detection natijalarini bir martalik sessiya tokeni bilan birga serverga yuboring. Server bloklash yoki funksionallikni cheklash to'g'risida qaror qabul qiladi. Bu mijoz ilovasi o'zgartirilishi mumkin bo'lgan, ammo server ishonchli tomon bo'lib qoladigan API darajasidagi hujumlarning oldini oladi.

Tekshirish kodini obfuskatsiya qilish

Root Detection kodi obfuskatsiya qilinishi kerak. Agar buzg'unchi jadx da su yo'llarining aniq ketma-ketligini ko'rsa — chetlab o'tish daqiqalar davom etadi. Boshqaruv oqimini chigallashtirish va satrlarni shifrlash uchun ProGuard yoki DexGuard dan foydalaning. Obfuskatsiya himoya kodini tahlil qilish vaqtini bir necha daqiqadan bir necha soatgacha oshiradi.

Imzolarni muntazam yangilash

Tekshiriladigan yo'llar, paketlar va ko'rsatkichlar ro'yxati ilovaning har bir relizi bilan yangilanishi kerak. Yangi root va chetlab o'tish vositalari har oyda paydo bo'ladi. Bir yil davomida o'zgarmagan statik ro'yxat zamonaviy usullarni aniqlamaydi. Tekshiruvlarni amalga oshirishdan oldin ilova ishga tushganda serverdan joriy imzolarni yuklash tavsiya etiladi.

Ko'p beriladigan savollar

Ilovalarga Root Detection nima uchun kerak?

Root Detection ilovani Android sandbox o'chirilgan qurilmada ishga tushirishdan himoya qiladi. Root qilingan qurilmada har qanday ilova boshqa ilovalarning ma'lumotlarini o'qiy oladi. Bank va to'lov ilovalari PCI DSS talablari va OWASP Mobile Security tavsiyalariga ko'ra root qilingan qurilmalarda ishni bloklashi shart.

Magisk Hide qanday ishlaydi?

Magisk Hide mount nomlar maydoni (mount namespace) mexanizmidan foydalanadi. Istisnolar ro'yxatida ko'rsatilgan har bir jarayon uchun Magisk izolyatsiyalangan nomlar maydonini yaratadi, unda su-binar fayli ko'rinmas bo'ladi. Bu nomlar maydonida tizim chaqiruvlari stat, access va open Magisk fayllarini ko'rmaydi. Magiskni /proc/self/maps mavjudligi va magisk dump ni qidirish orqali aniqlash mumkin.

Root Detectionni rootsiz chetlab o'tish mumkinmi?

Ha, agar ilova o'z kodining yaxlitligini tekshirmasa. Frida orqali Java tekshirish metodini tutib olish va majburan false qaytarish mumkin. Qarshi chora — kritik mantiqni C++ da nativ tatbiq qilish va DEX faylining hashi orqali yaxlitlikni tekshirish. Obfuskatsiyasiz, Java dagi har qanday Root Detection 5–10 daqiqada chetlab o'tiladi.

Safety net va attestatsiya nima?

SafetyNet (eskirgan) va Play Integrity API — bu qurilmaning yaxlitligini tasdiqlovchi Google ning server tekshiruvlari. Ular bootloader, tizim imzosi va root holatini tekshirishni o'z ichiga oladi. Play Integrity API — SafetyNet ga tavsiya etilgan o'rinbosar, uch darajani beradi: BASIC, DEVICE va STRONG. Client tomondagi Root Detection server attestatsiyasini to'ldiradi.

O'z ilovangizda Root Detectionni qanday tekshirish mumkin?

Ilovani haqiqiy root qilingan qurilmaga (masalan, Magisk bilan Pixel) o'rnating. Bloklash ishga tushishini tekshiring. Keyin rootni Magisk Hide orqali ilovangiz uchun yashirishga harakat qiling va testni takrorlang. Chuqur tekshirish uchun maqsadli metodlarni tutib olishda Frida dan foydalaning va nativ himoyaning chetlab o'tib bo'lmasligiga ishonch hosil qiling.

Xulosa

  • Root Detection — bank, to'lov va korporativ Android ilovalari uchun majburiy xavfsizlik komponenti, statik va dinamik tekshiruvlar kombinatsiyasida ishlaydi
  • Statik usullar standart yo'llarda su-binar faylini qidirish, o'rnatilgan root menejerlarini tekshirish va Build.TAGS tizim xususiyatlarini tahlil qilishni o'z ichiga oladi
  • Dinamik usullar /system ni rw rejimida mount qilinishini tahlil qiladi, /proc/mounts yaxlitligini tekshiradi va imtiyozli buyruqlarni bajarish testlarini o'tkazadi
  • Nativ tatbiq C++ da JNI orqali tekshiruvlarni Java darajasida ishlaydigan Xposed va Frida uchun ko'rinmas qiladi va Dobby yoki Ptrace orqali chetlab o'tishni talab qiladi
  • Magisk Hide — mount namespaces orqali Root Detectionni chetlab o'tishning asosiy vositasi, /proc/self/maps da magisk kutubxonalari mavjudligini tahlil qilish orqali aniqlanadi
  • Tavsiya etilgan arxitektura: nativ tekshiruvlar + kod obfuskatsiyasi + natijalarni server tekshiruvi + imzolarni muntazam yangilash
  • Google ning Play Integrity API client tomondagi Root Detectionni qurilmaning server attestatsiyasi bilan to'ldiradi, kompleks himoyani ta'minlaydi

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing