Reverse Engineering (tərs mühəndislik) — mobil tətbiqin məntiq və strukturunun mənbə koduna çıxış olmadan bərpa edilməsi. Android və iOS kontekstində bu, alqoritmləri, şifrələmə açarlarını, API endpointlərini və biznes məntiqini çıxarmaq üçün DEX/APK və Mach-O/IPA ikili fayllarının dekompilasiyası deməkdir. Veracode Security Research (2025) məlumatlarına görə, top-200-dəki mobil tətbiqlərin 60%-dən çoxu reverse engineering-i asanlaşdıran ən azı bir göstərici ehtiva edir. Reverse Engineering təkcə hücumlar üçün deyil, həm də təhlükəsizlik auditi, patent analizi və penetrasiya testi üçün tətbiq edilir.
Başlıca
Reverse Engineering (reversing) — ikili təsvirdən tətbiqin xarakteristikalarını, məntiqini və strukturunu bərpa etməyƏ yönəlmiş proqram təminatının analizi intizamıdır. Mobil tətbiqlər üçün analiz obyektləri kompilyasiya olunmuş kodu, resursları, manifestləri və sertifikatları ehtiva edən APK faylları (Android) və IPA fayllarıdır (iOS). Reversing-in nəticəsi — alqoritmlərin, protokolların, şifrələmə açarlarının, API sxemlərinin və biznes məntiqinin çıxarılmasıdır.
Tərs mühəndislik məqsədləri qanuni və qeyri-qanuni bölünür. Qanuni: müdafiə vasitələri yaratmaq üçün zərərli proqramların analizi, öz tətbiqlərinin zəifliklərə qarşı auditi, qapalı protokollarla uyğunluğun təmin edilməsi, patent analizi və təhsil. Qeyri-qanuni: əqli mülkiyyət oğurluğu, lisenziya məhdudiyyətlərinin yan keçilməsi, qorsan nüsxələrin yaradılması və istifadəçi məlumatlarını oğurlamaq üçün tətbiqin dəyişdirilməsi. Google Play Protect (2025) məlumatlarına görə, bank tətbiqlərinin zərərli modifikasiyalarının 78%-i reverse engineering-dən keçirilmiş orijinal APK əsasında yaradılır.
Reversing metodologiyası iki əsas istiqaməti əhatə edir: statik analiz (tətbiqi işlətmədən) və dinamik analiz (icra zamanı). Hər bir yanaşma müxtəlif məlumat səviyyəsi verir. Statik — kodun tam şəklini, lakin icra vaxtı məlumatları olmadan. Dinamik — real davranışı, məlumat axınını, şəbəkə çağırışlarını, lakin yalnız konkret icra ssenarisi çərçivəsində. Peşəkar reversing həmişə hər iki yanaşmanı birləşdirir.
Statik analiz — tərs mühəndisliyin ilk mərhələsidir. Orijinal APK və ya IPA paketdən çıxarılır və hər bir komponent ayrıca analiz edilir. Əsas məqsədlər: DEX bayt kodu, resurslar, manifest, yerli kitabxanalar (.so, .dylib) və metamelumatlar.
jadx — Android tətbiqlərinin statik analizi üçün əsas alətdir. O, DEX bayt kodunu minimal itkilərlə oxuna bilən Java koduna çevirir. jadx dəstəkləyir: multidex dekompilasiyası, lambda və daxili Kotlin siniflərinin tanınması, Gradle layihəsinə ixrac. Obfuskasiya olunmuş kod (ProGuard) üçün jadx a, b, c adları ilə kod göstərir, lakin sinif strukturu və çağırış ardıcıllığı qorunur. Müstəqil testlərə görə, jadx hətta obfuskasiya ilə belə kodun 85–92%-ni düzgün dekompilasiya edir.
apktool APK-nı smali koduna (DEX assembler) dekodlaşdırır və resursları oxuna bilən formada bərpa edir: AndroidManifest.xml AXML-dən oxuna bilən XML-ə, layoutlar — XML işarətləməsinə, strings.xml — düz mətnə çevrilir. apktool resursları dəyişdirməyə və APK-nı yenidən yığmağa imkan verir. apktool vasitəsilə çıxarıldıqdan və resurslar dəyişdirildikdən sonra tətbiq dəyişdirilmiş məzmunla quraşdırıla bilər.
Ghidra (NSA) — Android .so və iOS .dylib kitabxanalarının analizi üçün əvəzolunmaz reverse engineering freymvorkudur. Ghidra ARM64 kodunu dezasemble edir, C psevdokodunu bərpa edir və çağırış qrafiki qurur. Mobil reversing üçün Ghidra kriptoqrafiya və DRM mexanizmlərinin yerli tətbiqlərinin analizi üçün istifadə olunur. Ghidra analizi avtomatlaşdırmaq üçün Python və Java-da skript yazmağı dəstəkləyir.
# APK-nın açılması və dekompilasiyası
$ jadx -d output_dir app.apk
# apktool vasitəsilə resursların çıxarılması
$ apktool d app.apk -o app_unpacked
# Ghidra vasitəsilə yerli kitabxananın analizi
$ ghidra app.apk/lib/arm64-v8a/libnative.so
# DEX-də sətr sabitlərinin axtarışı
$ strings classes.dex | grep -i api_key
Dinamik analiz işləyən tətbiq üzərində aparılır. Analizator prosesə qoşulur və real vaxtda funksiya çağırışlarını, arqumentləri və qaytarılan dəyərləri tutur.
Frida — mobil tətbiqlərin dinamik analizi üçün aparıcı alətdir. Frida tətbiq prosesinə (Android ART və ya iOS app) JavaScript mühərrikini yeridir və həm Java/Objective-C, həm də C/C++ funksiyalarının çağırışlarını tutmağa imkan verir. Frida ilə revers mühəndisləri: AES.decrypt() metodunun bütün çağırışlarını parametrlərlə qeyd edə, qaytarılan dəyəri ixtiyari ilə əvəz edə, Universal Android SSL Unpin vasitəsilə SSL-pinning-i silə, Stalker vasitəsilə yerli çağırışları izləyə bilərlər. Frida APK/IPA dəyişdirilmədən işləyir, bu da onu penetrasiya testi üçün əvəzolunmaz edir.
Objection JavaScript skriptləri yazmadan tipik reversing tapşırıqları üçün hazır əmrlər təqdim edir: disable-pinning (SSL pinning-i söndürmə), dump-keychain (iOS), explore (sinif iyerarxiyasını gəzinti), memory search (yaddaşda sətrlərin axtarışı). Objection bir sɑ1ir kod yazmadan tam dinamik analiz aparmağa imkan verir. iOS tətbiqləri üçün Objection avtomatik olaraq NSURLSession, CFNetwork və NSKeyedArchiver çağırışlarını tapır və qeyd edir.
Xposed — Zygote-də app_process faylını əvəz etməklə işləyən Android freymvorkudur. Fridadan fərqli olaraq, Xposed quraşdırmadan sonra root girişi tələb etmir. Xposed modulları istənilən tətbiqdə metod çağırışlarını tuta bilər. Reversing üçün Xposed uzunmüddətli analiz üçün əlverişlidir: modul quraşdırılır və davamlı işləyərək tətbiqin müxtəlif ssenarilərdə davranışını qeyd edir. Xposed Android 8.1-ə qədər olan versiyaları dəstəkləyir; Android 9+ üçün SandHook əsasında EdXposed istifadə olunur.
// Frida: tətbiqdə decrypt() metodunun tutulması
let aesClass = Java.use("javax.crypto.Cipher");
aesClass.doFinal.overload(
"[B", "int", "int"
).implementation = function(
input, offset, len
) {
console("[AES] decrypt called, len=" + len);
return this.doFinal(input, offset, len);
};
Standart reversing iş axını ardıcıl addımlardan ibarətdir, hər biri müəyyən məlumat səviyyəsi verir.
Analitik APK-nı metamelumatlar səviyyəsində öyrənir: targetSdk, uses-permission (hansı icazələrin tələb olunduğu), intent-filter və exported components. İcazələrə əsasən hansı API-lərin istifadə edildiyi müəyyən edilir (android.permission.CAMERA → kamera, android.permission.RECORD_AUDIO → səs). Exported activity əsasənda avtorizasiyasız giriş nöqtələri müəyyən edilir. Bu mərhələ aapt və ya ApkAnalyzer vasitəsilə yerinə yetirilir və 1–2 dəqiqə çəkir.
APK çıxarılır, classes.dex (və ya multidex) jadx-ə ötürülür. Nəticədə — paketlərdə Java/Kotlin kodu. Analitik əsas sinifləri axtarır: CryptoUtils, ApiClient, AuthManager, DatabaseHelper və hansı alqoritmlərin istifadə edildiyini yoxlayır. Kodda AES/CBC/PKCS5Padding sətrləri varsa — tətbiq şifrələmə istifadə edir və açar tapılmalıdır. Bu mərhələdə müəyyən edilir: sərt kodlaşdırılmış açarlar, API URL-ləri, OAuth tokenləri və sirlər. Obfuskasiyasız tətbiqin bütün kodu adi Java layihəsi kimi oxunur.
SSL-pinning-i söndürmək üçün Frida və ya Objection quraraq, analitik tətbiqi işə salır və Burp Suite və ya mitmproxy vasitəsilə şəbəkə trafikini tutur. Trafik məlumatları əsasında API sxemi bərpa olunur: hansı endpointlər, hansı parametrlər, hansı formatda. Mümkün olduqda analitik sorğuları dəyişdirir və serverin səhv və ya zərərli məlumatlara reaksiyasını yoxlayır. Server tərəfində validasiyanın olmaması bu mərhələdə aşkar edilən birbaşa zəiflikdir.
Analiz nəticələri strukturlaşdırılmış formada qeyd olunur. Tapılan hər bir zəif yer üçün göstərilir: sinif və metod, zəifliyin təsviri, istismar vektoru və düzəltmə tövsiyəsi. Bu məlumat dəsti inkişaf komandasına ötürülür və ya pentest hesabatının hazırlanması üçün istifadə olunur. Avtomatlaşdırılmış mühitlərdə (MobSF) hesabat statik və dinamik analizin nəticələrinə əsasən avtomatik yaradılır.
iOS tətbiqlərinin reverse engineering-i Apple-ın daha sərt təhlükəsizlik arxitekturası və stock cihazlarda fayl sisteminə birbaşa çıxışın olmaması səbəbindən Android-dən çətindir. iOS analizi üçün jailbreak tələb olunur.
IPA arxivi Mach-O ikili faylını ehtiva edir — Apple-ın universal icra olunan fayl formatı. Dekompilasiya üçün Hopper Disassembler və ya IDA Pro istifadə olunur. Minimal itkilərlə Java-ya dekompilasiya olunan Android DEX-dən fərqli olaraq, Mach-O daha az dəqiqliklə C psevdokoduna bərpa olunan yerli ARM64 kodunu ehtiva edir. Hopper 60–70% bərpa ilə öhdələşir, qalanı assembler səviyyəsində analiz edilməlidir.
iOS-da Frida jailbreak və frida-server quraşdırılmasını tələb edir. Qoşulduqdan sonra Frida API message routing vasitəsilə Objective-C metodlarını tutur. iOS tətbiqləri üçün tipik ssenari: HTTP sorğularını qeyd etmək üçün NSURLSession.dataTaskWithRequest metodlarının tutulması, seriallaşdırılmış məlumatların analizi üçün NSKeyedUnarchiver-in tutulması və frida-trace vasitəsilə CoreData sorğularının izlənməsi. Frida Dopamine jailbreak-ının buraxılması ilə iOS 15–17 üçün əlçatan oldu.
Reversing IPA-nın dəyişdirilməsini, sonra yenidən yığılmasını və cihaza quraşdırılmasını əhatə edə bilər. Alətlər: çıxarılması üçün ipatool, bölmələrə baxmaq üçün MachOView və kod yeridilməsi üçün optool. Dəyişdirildikdən sonra IPA jailbreak edilmiş cihazda quraşdırmaq üçün ldid və ya fastlane sigh ilə imzalanır. iOS 16+ üçün kod imzası Secure Enclave səviyyəsində yoxlanılır və dəyişdirilmiş IPA jailbreak edilməmiş cihazda işləməyəcək.
// Frida: iOS tətbiqində HTTP sorğularının tutulması
if (ObjC.available) {
let NSURLSession = ObjC.classes.NSURLSession;
let dataTaskWithRequest = ObjC.protocol("NSURLSessionDelegate")
.method("- URLSession:dataTask:didReceiveData:");
Interceptor.attach(dataTaskWithRequest.implementation, {
onEnter(args) {
let data = ObjC.Object(args[3]);
console("[HTTP Response]", data.toString());
}
});
}
Tərs mühəndislikdən qorunma layered security prinsipi üzərində qurulur: heç bir metod 100% qorunma təmin etmir, lakin kombinasiya reversing-i iqtisadi cəhətdən məqsədəuyğun etmir.
Əsas səviyyə — sinif və metod adlarını bir simvolla əvəz edən Android üçün ProGuard. Gücləndirmə üçün overload induction (müxtəlif imzalarla eyni ada malik bir neçə metod) və AES-256 sətr şifrələməsi əlavə edən DexGuard istifadə olunur. Obfuskasiya kod analizi vaxtını səviyyədən asılı olaraq 5 dəqiqədən 5–20 saata qədər artırır. DexGuard əlavə olaraq idarəetmə axışını qarışdıraraq kodu jadx üçün oxunmaz edir.
Bütün sətr sabitləri — URL-lər, açarlar, tokenlər, SQL sorğuları — qurma mərhələsində şifrələnir və runtime-da deşifrələnir. Bu, DEX faylının sətrlərinin statik analizindən qoruyur. strings app.apk işə salan hücumçu heç bir API endpointi görməyəcək. Hətta dekompilasiyadan sonra belə bütün sətrlər ikili məlumat kimi görünür. Hər bir sətr üçün ayrıca açar istifadə edilə bilər ki, bu da deobfuskasiyanı çətinləşdirir.
Tətbiq daxilindəki RASP agenti runtime-da Frida və debug-u aşkarlayır. APK-nın SHA-256 heşi ilə bütövlük nəzarəti dəyişdirilmiş tətbiq versiyasının işə salınmasının qarşısını alır. APK heşi etalonla (yerli təbəqədə saxlanılır) üst-üstə düşmürsə — tətbiq dayanır. Bu, repackaging daxil olmaqla APK modifikasiyasına əsaslanan hücumları bloklayır.
Kritik biznes məntiqi serverdə icra edilməlidir, müştəridə yox. Hücumçu tətbiqi tam dekompilasiya etsə belə, server kodu əlçatmaz qalır. Bütün sorğuların və parametrlərin server tərəfində validasiyası reversing zamanı tapılan zəifliklərin istismarının qarşısını alır. Play Integrity API və ya App Attest vasitəsilə server attestasiyası sorğunun həqiqi, dəyişdirilməmiş tətbiqdən gəldiyini təsdiqləyir.
Tez-tez verilən suallar
ABŞ-da reverse engineering DMCA ilə tənzimlənir — uyğunluq, təhlükəsizlik testi və arxiv məqsədləri üçün icazə verilir. Texniki qoruma tədbirlərinin (DRM) yan keçilməsi qadağandır. Avropada EUCD-nin 6-cı maddəsi DMCA-ya bənzərdir. Rusiyada müəllif hüququ sahibinin razılığı olmadan reverse engineering müəllif hüquqlarının pozulması kimi şərh edilə bilər. Kommersiya reversingindən əvvəl hüquqi məsləhət müləqimdir.
Xeyr. Hücumçunun cihazında icra olunan istənilən kod analiz edilə bilər — bu, müştəri tərəfi qoruma modelinin prinsipial məhdudiyyətidir. Qorumanın məqsədi reversing-i iqtisadi cəhətdən sərfəsiz etməkdir: vaxt və resurs xərcləri əldə edilən nəticənin dəyərindən çox olmalıdır. Obfuskasiya, RASP və server məntiqinin kombinasiyası cari qoruma standartıdır.
Repackaging — reverse engineering vasitəsilə tətbiqin dəyişdirilməsi və sonra APK-nın yenidən yığılması. Hücumçu APK-nı apktool ilə açır, zərərli kod əlavə edir və ya API açarlarını dəyişdirir, yenidən yığır və öz sertifikatı ilə imzalayır. Repackaging Kaspersky Threat Report (2025) məlumatlarına görə Android-dəki bütün hücumların 86%-ni təşkil edir. Əks tədbir: runtime-da rəqəmsal imzanın yoxlanılması.
Universal Android SSL Unpin Frida skripti TrustManager.checkServerTrusted və iOS-da ServerTrustManager çağırışlarını tutaraq tətbiqi allow-all ilə əvəz edir. Həmçinin OkHttp və URLConnection-da X509TrustManager metodlarının tutulması istifadə olunur. SSL-pinning Frida-da hazır skriptlə 10 saniyəyə yan keçilir. Daha davamlı qoruma — server tərəfində sertifikatın yoxlanılması ilə certificate transparency.
.so/.dylib kitabxanalarındakı yerli C/C++ kodu DEX-dəki Java-dan çox daha çətin reversing edilir. PGO və Osize kompilasiyası ilə Swift Objective-C-dən daha qarışıq ikili fayl verir. Rust runtime metamelumatları və Objective-C standart bağlantısı olmadan yerli koda kompilyasiya olunur, bu da onu müasir mobil inkişaf dilləri arasında reversing üçün ən çətin edir.
Nəticələr
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