Sparround

App hardening: root detection, Play Integrity, R8, FLAG_SECURE

Hardening — tətbiqin düşmən mühitdə (root, emulator, hook framework-ləri) işləməsinə qarşı qatlı müdafiə:

  • Play Integrity API — Google-un attestasiya servisi: cihazın bütövlüyü (MEETS_DEVICE_INTEGRITY), tətbiqin orijinallığı (rəsmi APK-dır, Play-dən quraşdırılıb), lisenziya vəziyyəti barədə server tərəfdə yoxlanılan verdict. Lokal root yoxlamalarından fərqi: cavab Google serverindən imzalı gəlir, tətbiq daxilində saxtalaşdırmaq çətindir.
  • Root/tamper detection — lokal yoxlamalar (su binary, Magisk izləri, debuggable flag, emulator əlamətləri): tez keçilə bilir, amma hücum xərcini artırır. Nəticə siyasəti bankdan asılıdır: tam blok / məhdud rejim / server-ə signal.
  • R8/ProGuard — minification + obfuscation: kod kiçilir, adlar mənasızlaşır — reverse engineering çətinləşir (amma qeyri-mümkün olmur). mapping.txt crash deobfuscation üçün saxlanmalıdır.
  • FLAG_SECURE — ekran görüntüsü və screen recording qadağası; recents ekranında məzmun gizlədilir. Bank ekranlarında standart.
  • Debug qorumalarıandroid:debuggable release-də false (default), debugger-attach yoxlamaları.
kotlin
// Həssas ekranlarda screenshot/recording qadağası
class TransactionActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        window.setFlags(
            WindowManager.LayoutParams.FLAG_SECURE,
            WindowManager.LayoutParams.FLAG_SECURE
        )
    }
}

// build.gradle.kts — release hardening
android {
    buildTypes {
        release {
            isMinifyEnabled = true          // R8: kod kiçilir + obfuscate
            isShrinkResources = true        // istifadə olunmayan resurslar silinir
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
}

FLAG_SECURE və R8 konfiqurasiyası

Balans sualı gəlir: "Root olunmuş cihazda tətbiqi tam bloklamaq düzgündür?" Yaxşı cavab trade-off göstərir: tam blok → təhlükəsizlik auditləri üçün sadə, amma legitim power-user-lər itir və detection bypass-ları yarış yaradır; risk-əsaslı yanaşma → root aşkarlananda görüntüləmə işləyir, pul əməliyyatları məhdudlaşır/step-up tələb edir, server risk skoruna signal gedir. Qərar texniki yox, risk komitəsi qərarıdır — bunu demək fintech kontekstini anladığını göstərir.

🛠 Tapşırıq

Release build-i sərtləşdir və nəticəsini yoxla:

  • isMinifyEnabled = true ilə release APK yığ, mapping.txt-in yarandığını təsdiqlə; APK-nı decompile alətində açıb adların dəyişdiyini gör.
  • Həssas ekrana FLAG_SECURE əlavə et və screenshot çəkməyə çalış.
  • Recents ekranında məzmunun necə göründüyünü yoxla.
  • Bir reflection əsaslı DTO-nu keep qaydası olmadan release-də test et — "debug işləyir, release sınır" halını canlandır.

Bitdi sayılır: öz tətbiqin üçün qatlı müdafiə cədvəlini doldurmusansa.

📚 Mənbələr və sənədlər