Kod obfuskasiyası — tətbiqin mənbə və ya bayt kodunun reverse-engineering-i çətinləşdirmək üçün qəsdən gizlədilməsi prosesidir. Verizon Data Breach Investigations Report (2025) hesabatına görə, kommersiya tətbiqlərinin obfuskasiyası qorunmayan qurularla müqayisədə intellektual mülkiyyət sızması riskini 40% azaldır. Obfuskasiya metodları identifikatorların adlandırılmasından proqramın idarəetmə axınının tam dəyişdirilməsinə qədər dəyişir.
Əsas məqamlar
Obfuskasiya — proqram kodunun funksionallığını qoruyan, lakin alqoritmlərin analizini və anlaşılmasını maksimum dərəcədə çətinləşdirən çevirmə metodları kompleksidir. Şifrələmədən fərqli olaraq, obfuska edilmiş kod birbaşa icra olunur, əlavə deşifrələmə tələb olunmur. Obfuskasiyanın məqsədi tətbiqə hücumun dəyərini iqtisadi cəhətdən məqsədəuyğun olmayan səviyyəyə qaldırmaqdır.
Kommersiya tətbiqləri üçün obfuskasiya texniki seçim deyil, hüquqi tələbdir. Bir çox lisenziya müqavilələri (EULA) birbaşa kodun reverse-engineering-dən qorunmasını tələb edir. BSA Global Software Survey (2024) araşdırmasına görə, dünyadakı proqram təminatının 37%-i lisenziyasız istifadə olunur və obfuskasiya piratçılıq üçün əsas maneələrdən biridir.
Mobil tətbiqlər reverse-engineering-ə xüsusilə həssasdır, çünki paylama (APK/IPA) birbaşa istifadəçi cihazında yerləşir. İstənilən cihaz sahibi JADX, Apktool və ya Hopper kimi alətlərlə kodu çıxarıb analiz edə bilər. Obfuskasiya hücumçuya tətbiqin iş məntiqini tez başa düşməyə, daxil edilmiş API açarlarını, şifrələmə alqoritmlərini və ya serverlə inteqrasiya nöqtələrini tapmağa imkan vermir.
Müasir obfuskasiya hər biri tətbiq analizinin müəyyən mərhələsini çətinləşdirən bir neçə texnikanın kombinasiyasından istifadə edir. Ən effektiv metodları nəzərdən keçirək.
Obfuskasiyanın əsas metodu — siniflərin, metodların və sahələrin mənalı adlarının qısa mənasız ardıcıllıqlarla əvəz edilməsi: android.app.Activity a.a.a-ya çevrilir. Hücumçu üçün sinif və ya metodun təyinatını adına görə müəyyən etmək qeyri-mümkün olur. Bu, dekompilyasiya edilmiş koddan naviqasiyanı əhəmiyyətli dərəcədə çətinləşdirir. ProGuard-dan Dotfuscator-a qədər bütün müasir obfuskasiya alətləri bu texnikanı defolt olaraq tətbiq edir.
Daha qabaqcıl texnika — idarəetmə axınının obfuskasiyası. Alət proqramın axın qrafını dəyişdirərək ölü budaqlar, mənasız dövrlər və gözlənilməz keçidlər əlavə edir. Dekompilyator məntiqi cəhətdən düzgün görünən, lakin son dərəcə qarışıq və analizi çətin olan kodu bərpa edir. Native kod üçün məşhur alət olan Obfuscator-LLVM bu texnikanı C++ və Objective-C tətbiqləri üçün istifadə edir.
Məxfi sətirlər — API açarları, server URL-ləri, sirlər — dekompilyasiya edilmiş koddan sadə axtarışla asanlıqla tapılır. Sətir şifrələməsi sətirləri yalnız icra zamanı deşifrələnən şifrələnmiş ardıcıllıqlarla əvəz edir. Etibarlı obfuskasiya alətləri sətirləri hər qurma üçün unikal açarla şifrələyir, tətbiqin klonlaşdırılması zamanı sirlərin təkrar istifadəsinin qarşısını alır.
// Mənbə kodu
private String API_URL = "https://api.example.com/v1";
// Sətir şifrələmə ilə obfuskasiyadan sonra
private String API_URL = decrypt("x3kF9#mP2$", 0xA3F2);
private String decrypt(String data, int key) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < data.length(); i++) {
result.append((char) (data.charAt(i) ^ key));
}
return result.toString();
}
Koddan əlavə, obfuskasiyaya tətbiqin resursları da məruz qalır: res/values-dəki fayl adları, layout faylları, strings.xml sətir resursları. Obfuskasiya alətləri resursların adlarını qısa identifikatorlarla dəyişdirir və onları yenidən paketləyərək resursların analizini və lüğətlərdə sətir axtarışını xeyli çətinləşdirir.
Obfuskasiya alətinin seçimi hədəf platformadan, proqramlaşdırma dilindən və performans tələblərindən asılıdır. Mobil inkişafda istifadə olunan əsas alətləri nəzərdən keçirək.
| Alət | Platforma | Obfuskasiya metodları |
|---|---|---|
| ProGuard | Android / Java | Adlandırma, sıxlaşdırma, optimallaşdırma |
| R8 | Android | ProGuard + minifikasiya, desuqarinq |
| DexGuard | Android | ProGuard-dan hər şey + idarəetmə axını, sətir şifrələməsi |
| iXGuard | iOS | Simvol obfuskasiyası, idarəetmə axını, sətir şifrələməsi |
| LLVM Obfuscator | iOS / native kod | İdarəetmə axını, zibil təlimatları, BCE |
ProGuard — Android SDK-ya inteqrasiya edilmiş Android və Java üçün standart obfuskasiya alətidir. O, sıxlaşdırma (istifadə olunmayan kodun silinməsi), optimallaşdırma və adlandırma yolu ilə obfuskasiya həyata keçirir. R8 — onun varisi, Android Gradle Plugin 3.4-də debüt edib. R8 daha sürətli işləyir və kodu daha aqressiv optimallaşdırır, AGP 8.0 versiyasından isə defolt olaraq ProGuard-ı tamamilə əvəz edib.
DexGuard (Guardsquare kommersiya məhsulu) — Android üçün ProGuard-ın genişləndirilmiş versiyası, idarəetmə axını, sətir şifrələməsi, debugdan qorunma və resurs obfuskasiyası əlavə edir. iOS üçün şirkət Swift və Objective-C tətbiqləri üçün oxşar texnika dəsti ilə iXGuard təklif edir. Bu alətlər bank və AAA oyun layihələrində tətbiq olunur, burada reverse-engineering birbaşa maliyyə riskləri daşıyır.
Proqramçılar tez-tez obfuskasiya və şifrələməni qarışdıraraq onları bir-birini əvəz edə bilən hesab edirlər. Praktikada bunlar müxtəlif vəzifələri həll edən prinsipial fərqli qoruma mexanizmləridir.
Şifrələmə — məlumatları deşifrələmədən oxunmaz hala gətirən açardan istifadə edərək məlumatların çevrilməsidir. Obfuskasiya — kodun funksional ekvivalent, lakin anlaşılması çətin formaya çevrilməsidir. Şifrələnmiş kodu deşifrələmədən icra etmək mümkün deyil, obfuska edilmiş kod isə birbaşa icra olunur. Hər mexanizm öz vəzifəsini həll edir: şifrələmə məlumatları istirahətdə və ötürmədə qoruyur, obfuskasiya kodu analizdən qoruyur.
Maksimum qoruma səviyyəsi hər iki texnikanın birləşməsi ilə əldə edilir. Kod statik analizi çətinləşdirmək üçün obfuska edilir, kritik əhəmiyyətli məlumatlar (açarlar, tokenlər) əlavə olaraq şifrələnir və icra zamanı deşifrələnir. DexGuard və iXGuard kimi müasir alətlər vahid qurma pipeline-ında hər iki metod üçün daxili dəstək təmin edir.
Maliyyə əməliyyatları, tibbi məlumatlar və ya kritik intellektual mülkiyyəti emal edən tətbiqlər üçün tək obfuskasiya kifayət deyil. Kompleks qoruma tələb olunur: kod obfuskasiyası, cihazda məlumat şifrələməsi, anti-debuq, APK bütövlüyünün yoxlanılması və server validasiyası. OWASP Mobile Security Testing Guide (2025) görə, yalnız bütün bu tədbirlərin kombinasiyası high-risk tətbiqləri üçün adekvat qoruma səviyyəsini təmin edir.
Anlamaq vacibdir ki, obfuskasiya əksər yurisdiksiyalarda məhkəmələr tərəfindən tanınan intellektual mülkiyyətin qorunmasının qanuni metodudur. Lakin lisenziyasız surətlər yaratmaq üçün obfuskasiyanın yan keçilməsi və dekompilyasiya müəllif hüquqları, DMCA və müxtəlif ölkələrdə oxşar tənzimləmələri poza bilər.
Geniş yayılmasına baxmayaraq, obfuskasiya ətrafında çoxlu yanlış anlaşılmalar mövcuddur. Proqramçıların tətbiqin qorunmasını planlaşdırarkən nəzərə almalı olduğu real məhdudiyyətləri nəzərdən keçirək.
Ən vacib fakt: obfuskasiya kodu sındırılmaz etmir. Obfuska edilmiş kodu analiz etmək üçün çoxlu alətlər mövcuddur: .NET üçün əl ilə deobfuskator de4dot-dan simvolik icraya əsaslanan yarı avtomatik sistemlərə qədər (Angr, Triton). Obfuskasiya hücumun dəyərini artırır, lakin kifayət qədər motivasiya olduqda hücumçu istənilən qorumanı dəf edə bilər.
Təhlükəsizlik mütəxəssisləri tətbiqlərdə obfuskasiyanın aşkarlanması üçün alətlərdən istifadə edirlər. Smali koduna dekompilyasiya ilə APKTool adlandırılmış sinifləri və metodları görməyə imkan verir. JADX-GUI Java təsvirini göstərir, burada a, b, c adları olan siniflər obfuskasiyanın tətbiqini göstərir. Aşkarlamanı çətinləşdirmək üçün qabaqcıl alətlər ölü kod əlavə edir və idarəetmə axınını gizlədərək statik analizi əhəmiyyətli dərəcədə daha çox əmək tələb edən hala gətirir.
Aqressiv obfuskasiya tətbiqin performansına mənfi təsir göstərə bilər. İdarəetmə axınının gizlədilməsi kodun ölçüsünü artırır, icranı yavaşladır və yükləmə vaxtını uzadır. Bu, məhdud resurslu mobil tətbiqlər üçün xüsusilə kritikdir. Hədəf cihazlarda obfuskasiya tətbiq edildikdən sonra performansın sınaqdan keçirilməsi tövsiyə olunur.
Obfuska edilmiş kod səhvlərin diaqnostikasını çətinləşdirir. Obfuskasiyadan sonra stack trace productController.loadProduct() əvəzinə a.a.a() kimi adlar ehtiva edir ki, bu da onu proqramçı üçün faydasız edir. Bütün obfuskasiya alətləri analizdən əvvəl stack trace-ləri deobfuska etməyə imkan verən mapping faylının yaradılmasını dəstəkləyir. Mapping faylı tətbiqin hər nəşr olunmuş versiyası üçün təhlükəsiz yerdə saxlanmalıdır.
// build.gradle — ProGuard/R8 obfuskasiya konfiqurasiyası
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
'proguard-rules.pro'
}
}
}
Tez-tez verilən suallar
Xeyr, obfuskasiya mütləq qoruma təmin etmir. İstənilən kod nəzəri olaraq kifayət qədər resurs və vaxtla analiz edilə bilər. Obfuskasiyanın məqsədi hücumun dəyərini iqtisadi cəhətdən məqsədəuyğun olmayan səviyyəyə qaldırmaqdır. Əksər kommersiya tətbiqləri üçün hətta əsas ProGuard obfuskasiyası təsadüfi sındırma cəhdlərinin 90%-ni kənarlaşdırır.
Android Gradle Plugin 8.0 və daha yuxarıda R8 ProGuard-ı əvəz edən standart alətdir. R8 daha sürətlidir, ART icra mühiti üçün kodu daha yaxşı optimallaşdırır və Java 8 sintaksis desuqarinqini dəstəkləyir. Əgər AGP-nin cari versiyasından istifadə edirsinizsə, ProGuard-a qayıtmaq üçün heç bir səbəb yoxdur. Köhnə layihələr üçün incə qayda konfiqurasiyası ilə ProGuard uyğun seçim olaraq qalır.
Əsas obfuskasiya (identifikatorların adlandırılması) icra sürətinə təsir etmir, çünki adlar yalnız kompilyasiya mərhələsində mövcuddur. Lakin idarəetmə axınının gizlədilməsi və sətir şifrələməsi işi 5-15% yavaşlada bilər. Obfuskasiyadan əvvəl və sonra hədəf cihazlarda performansın ölçülməsi tövsiyə olunur.
Qurma zamanı ProGuard/R8 tərəfindən yaradılan mapping faylından istifadə edin. Android Studio daxili deobfuskasiya aləti təqdim edir: APK-nı Analyse APK-də açın və stack trace-i pəncərəyə sürükləyin. Mapping faylları production-a buraxılmış hər versiya üçün saxlanmalıdır.
Xeyr, obfuskasiya şifrələmədən prinsipial olaraq fərqlənir: obfuska edilmiş kod prosessor tərəfindən deşifrələmədən birbaşa icra olunur, şifrələnmiş kod isə deşifrələmədən icra edilə bilməz. Obfuskasiya tətbiqin strukturunu, sinif adlarını və icra axınını gizlədir, şifrələmə məlumatları açarsız əlçatmaz edir. Bu texnikalar kompleks tətbiq qorunmasında bir-birini tamamlayır.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun