Reverse Engineering (teskari muhandislik) — mobil ilovaning mantiqiy va strukturasini manba kodiga kirishsiz tiklash. Android va iOS kontekstida bu DEX/APK va Mach-O/IPA ikkilik fayllarini dekompilyatsiya qilish orqali algoritmlar, shifrlash kalitlari, API endpointlari va biznes mantiqini olish demakdir. Veracode Security Research (2025) ma’lumotlariga ko‘ra, top-200 dagi mobil ilovalarning 60% dan ortig‘i reverse engineering-ni osonlashtiradigan kamida bitta ko‘rsatkichga ega. Reverse Engineering nafaqat hujumlar, balki xavfsizlik auditi, patent tahlili va penetratsion testlash uchun ham qo‘llaniladi.
Asosiy
Reverse Engineering (reversing) — ikkilik ko‘rinishidan ilovaning xususiyatlari, mantiqi va strukturasini tiklashga qaratilgan dasturiy ta’minot tahlili fanidir. Mobil ilovalar uchun tahlil ob’ektlari kompilyatsiya qilingan kod, resurslar, manifestlar va sertifikatlarni o‘z ichiga olgan APK fayllari (Android) va IPA fayllari (iOS) hisoblanadi. Reversing natijasi — algoritmlar, protokollar, shifrlash kalitlari, API sxemalari va biznes mantiqini olishdir.
Teskari muhandislik maqsadlari qonuniy va noqonuniyga bo‘linadi. Qonuniy: zararli dasturlarni himoya vositalarini yaratish uchun tahlil qilish, o‘z ilovalarining zaifliklarini audit qilish, yopiq protokollar bilan moslikni ta’minlash, patent tahlili va ta’lim. Noqonuniy: intellektual mulkni o‘g‘irlash, litsenziya cheklovlarini chetlab o‘tish, qaroqchi nusxalarni yaratish va foydalanuvchi ma’lumotlarini o‘g‘irlash uchun ilovani o‘zgartirish. Google Play Protect (2025) ma’lumotlariga ko‘ra, bank ilovalarining zararli modifikatsiyalarining 78% reverse engineering dan o‘tgan original APK asosida yaratiladi.
Reversing metodologiyasi ikkita asosiy yo‘nalishni o‘z ichiga oladi: statik tahlil (ilovani ishga tushirmasdan) va dinamik tahlil (ijro paytida). Har bir yondashuv turli darajadagi ma’lumot beradi. Statik — kodning to‘liq tasviri, lekin ijro vaqti ma’lumotlarisiz. Dinamik — real xatti-harakat, ma’lumotlar oqimi, tarmoq chaqiruvlari, lekin faqat aniq ijro stsenariysi doirasida. Professional reversing har doim ikkala yondashuvni birlashtiradi.
Statik tahlil — teskari muhandislikning birinchi bosqichi. Original APK yoki IPA paketdan chiqariladi va har bir komponent alohida tahlil qilinadi. Asosiy maqsadlar: DEX bayt kodi, resurslar, manifest, mahalliy kutubxonalar (.so, .dylib) va metama’lumotlar.
jadx — Android ilovalarini statik tahlil qilish uchun asosiy vosita. U DEX bayt kodini minimal yo‘qotishlar bilan o‘qiladigan Java kodiga aylantiradi. jadx quyidagilarni qo‘llab-quvvatlaydi: multidex dekompilyatsiyasi, lambda va ichki Kotlin sinflarini aniqlash, Gradle loyihasiga eksport. Obfuskatsiya qilingan kod (ProGuard) uchun jadx a, b, c nomlari bilan kodni ko‘rsatadi, lekin sinf tuzilishi va chaqiruvlar tartibi saqlanadi. Mustaqil testlarga ko‘ra, jadx hatto obfuskatsiya bilan ham kodning 85–92% ini to‘g‘ri dekompilyatsiya qiladi.
apktool APK ni smali kodiga (DEX assembler) dekodlaydi va resurslarni o‘qiladigan shaklda tiklaydi: AndroidManifest.xml AXML dan o‘qiladigan XML ga, layoutlar — XML belgilariga, strings.xml — oddiy matnga aylantiriladi. apktool resurslarni o‘zgartirish va APK ni qayta yig‘ish imkonini beradi. apktool orqali chiqarilgandan va resurslar almashtirilgandan so‘ng, ilova o‘zgartirilgan tarkib bilan o‘rnatilishi mumkin.
Ghidra (NSA) — Android .so va iOS .dylib kutubxonalarini tahlil qilish uchun ajralmas reverse engineering freymvorkidir. Ghidra ARM64 kodini dezasemblaydi, C psevdokodini tiklaydi va chaqiruv grafigini quradi. Mobil reversing uchun Ghidra kriptografiya va DRM mexanizmlarining mahalliy amalga oshirilishini tahlil qilish uchun ishlatiladi. Ghidra tahlilni avtomatlashtirish uchun Python va Java da skript yozishni qo‘llab-quvvatlaydi.
# APK ni chiqarish va dekompilyatsiya qilish
$ jadx -d output_dir app.apk
# apktool orqali resurslarni chiqarish
$ apktool d app.apk -o app_unpacked
# Ghidra orqali mahalliy kutubxonani tahlil qilish
$ ghidra app.apk/lib/arm64-v8a/libnative.so
# DEX da satr konstantalarini qidirish
$ strings classes.dex | grep -i api_key
Dinamik tahlil ishlayotgan ilovada amalga oshiriladi. Tahlilchi jarayonga ulanadi va real vaqtda funksiya chaqiruvlari, argumentlar va qaytarilgan qiymatlarni tutadi.
Frida — mobil ilovalarni dinamik tahlil qilish uchun yetakchi vosita. Frida ilova jarayoniga (Android ART yoki iOS app) JavaScript dvigatelini joylashtiradi va Java/Objective-C, shuningdek C/C++ funksiyalarining chaqiruvlarini tutish imkonini beradi. Frida yordamida revers muhandislar: AES.decrypt() metodining barcha chaqiruvlarini parametrlar bilan qayd etishlari, qaytarilgan qiymatni ixtiyoriy bilan almashtirishlari, Universal Android SSL Unpin orqali SSL-pinning ni olib tashlashlari, Stalker orqali mahalliy chaqiruvlarni kuzatishlari mumkin. Frida APK/IPA ni o‘zgartirmasdan ishlaydi, bu uni penetratsion testlash uchun ajralmas qiladi.
Objection JavaScript skriptlarini yozmasdan odatiy reversing vazifalari uchun tayyor buyruqlarni taqdim etadi: disable-pinning (SSL pinning ni o‘chirish), dump-keychain (iOS), explore (sinf iyerarxiyasini kezish), memory search (xotirada satrlarni qidirish). Objection bir satr kod yozmasdan to‘liq dinamik tahlil o‘tkazish imkonini beradi. iOS ilovalari uchun Objection avtomatik ravishda NSURLSession, CFNetwork va NSKeyedArchiver chaqiruvlarini topadi va qayd etadi.
Xposed — Zygote da app_process faylini almashtirish orqali ishlaydigan Android freymvorkidir. Fridadan farqli o‘laroq, Xposed o‘rnatishdan so‘ng root kirishini talab qilmaydi. Xposed modullari istalgan ilovada metod chaqiruvlarini tutishi mumkin. Reversing uchun Xposed uzoq muddatli tahlil uchun qulay: modul o‘rnatiladi va doimiy ishlaydi, ilovaning turli stsenariylardagi xatti-harakatini qayd etadi. Xposed Android 8.1 gacha bo‘lgan versiyalarni qo‘llab-quvvatlaydi; Android 9+ uchun SandHook ga asoslangan EdXposed ishlatiladi.
// Frida: ilovada decrypt() metodini tutish
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 ish oqimi ketma-ket qadamlardan iborat bo‘lib, har biri ma’lum darajadagi ma’lumot beradi.
Tahlilchi APK ni metama’lumotlar darajasida o‘rganadi: targetSdk, uses-permission (qanday ruxsatlar so‘raladi), intent-filter va exported components. Ruxsatlar bo‘yicha qaysi API lar ishlatilishi aniqlanadi (android.permission.CAMERA → kamera, android.permission.RECORD_AUDIO → audio). Exported activity bo‘yicha avtorizatsiyasiz kirish nuqtalari aniqlanadi. Bu bosqich aapt yoki ApkAnalyzer orqali amalga oshiriladi va 1–2 daqiqa davom etadi.
APK chiqariladi, classes.dex (yoki multidex) jadx ga uzatiladi. Natijada — paketlarda Java/Kotlin kodi. Tahlilchi asosiy sinflarni qidiradi: CryptoUtils, ApiClient, AuthManager, DatabaseHelper, va qaysi algoritmlar ishlatilganligini tekshiradi. Agar kodda AES/CBC/PKCS5Padding satrlari bo‘lsa — ilova shifrlashdan foydalanadi va kalitni topish kerak. Bu bosqichda aniqlanadi: qattiq kodlangan kalitlar, API URLlari, OAuth tokenlari va sirlar. Obfuskatsiyasiz ilovaning butun kodi oddiy Java loyihasi kabi o‘qiladi.
SSL-pinning ni o‘chirish uchun Frida yoki Objection ni sozlab, tahlilchi ilovani ishga tushiradi va Burp Suite yoki mitmproxy orqali tarmoq trafigini tutadi. Trafik ma’lumotlari asosida API sxemasi tiklanadi: qanday endpointlar, qanday parametrlar, qanday formatda. Iloji bo‘lsa, tahlilchi so‘rovlarni o‘zgartiradi va serverning noto‘g‘ri yoki zararli ma’lumotlarga reaksiyasini tekshiradi. Server tomonida validatsiyaning yo‘qligi — bu bosqichda aniqlangan to‘g‘ridan-to‘g‘ri zaiflikdir.
Tahlil natijalari tuzilgan shaklda qayd etiladi. Topilgan har bir zaif joy uchun ko‘rsatiladi: sinf va metod, zaiflik tavsifi, ekspluatatsiya vektori va tuzatish tavsiyasi. Bu ma’lumotlar to‘plami ishlab chiqish jamoasiga uzatiladi yoki pentest hisobotini tayyorlash uchun ishlatiladi. Avtomatlashtirilgan muhitlarda (MobSF) hisobot statik va dinamik tahlil natijalari asosida avtomatik ravishda yaratiladi.
iOS ilovalarining reverse engineering i Apple ning qattiqroq xavfsizlik arxitekturasi va stock qurilmalarda fayl tizimiga to‘g‘ridan-to‘g‘ri kirishning yo‘qligi sababli Android dan qiyinroq. iOS tahlili uchun jailbreak kerak.
IPA arxivi Mach-O ikkilik faylini o‘z ichiga oladi — Apple ning universal bajariladigan fayl formati. Dekompilyatsiya uchun Hopper Disassembler yoki IDA Pro ishlatiladi. Minimal yo‘qotishlar bilan Java ga dekompilyatsiya qilinadigan Android DEX dan farqli o‘laroq, Mach-O kamroq aniqlik bilan C psevdokodiga tiklanadigan mahalliy ARM64 kodini o‘z ichiga oladi. Hopper 60–70% tiklash bilan bardosh beradi, qolgan qismini assembler darajasida tahlil qilish kerak.
iOS da Frida jailbreak va frida-server o‘rnatishni talab qiladi. Ulangandan so‘ng, Frida API xabarlarni marshrutlash orqali Objective-C metodlarini tutadi. iOS ilovalari uchun odatiy stsenariy: HTTP so‘rovlarini qayd etish uchun NSURLSession.dataTaskWithRequest metodlarini tutish, seriyalashtirilgan ma’lumotlarni tahlil qilish uchun NSKeyedUnarchiver ni tutish va frida-trace orqali CoreData so‘rovlarini kuzatish. Frida Dopamine jailbreak chiqishi bilan iOS 15–17 uchun mavjud bo‘ldi.
Reversing IPA ni o‘zgartirish, keyin qayta paketlash va qurilmaga o‘rnatishni o‘z ichiga olishi mumkin. Vositalar: chiqarish uchun ipatool, bo‘limlarni ko‘rish uchun MachOView va kod kiritish uchun optool. O‘zgartirilgandan so‘ng, IPA jailbreak qilingan qurilmaga o‘rnatish uchun ldid yoki fastlane sigh bilan imzolanadi. iOS 16+ uchun kod imzosi Secure Enclave darajasida tekshiriladi va o‘zgartirilgan IPA jailbreak qilinmagan qurilmada ishlamaydi.
// Frida: iOS ilovasida HTTP so‘rovlarini tutish
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());
}
});
}
Teskari muhandislikdan himoya layered security prinsipi asosida quriladi: hech qanday usul 100% himoyani ta’minlamaydi, lekin kombinatsiya reversing ni iqtisodiy jihatdan maqsadga muvofiq emas qiladi.
Asosiy daraja — Android uchun ProGuard, sinf va metod nomlarini bir belgili bilan almashtiradi. Kuchaytirish uchun overload induction (turli imzolar bilan bir xil nomdagi bir nechta metodlar) va AES-256 satr shifrlashni qo‘shadigan DexGuard ishlatiladi. Obfuskatsiya kod tahlil vaqtini darajaga qarab 5 daqiqadan 5–20 soatgacha oshiradi. DexGuard qo‘shimcha ravishda boshqaruv oqimini chigallashtiradi va kodni jadx uchun o‘qib bo‘lmaydigan qiladi.
Barcha satr konstantalari — URL lar, kalitlar, tokenlar, SQL so‘rovlari — qurish bosqichida shifrlanadi va runtime da deshifrlanadi. Bu DEX faylining satrlarini statik tahlil qilishdan himoya qiladi. strings app.apk ni ishga tushirgan hujumchi hech qanday API endpointini ko‘rmaydi. Hatto dekompilyatsiyadan so‘ng ham barcha satrlar ikkilik ma’lumotlar kabi ko‘rinadi. Har bir satr uchun alohida kalit ishlatilishi mumkin, bu deobfuskatsiyani murakkablashtiradi.
Ilova ichidagi RASP agenti runtime da Frida va disk raskadrovkani aniqlaydi. APK ning SHA-256 heshi orqali yaxlitlik nazorati o‘zgartirilgan ilova versiyasining ishga tushirilishini oldini oladi. Agar APK heşi etalon bilan (mahalliy qatlamda saqlangan) mos kelmasa — ilova tugatiladi. Bu APK modifikatsiyasiga asoslangan hujumlarni, jumladan repackaging ni bloklaydi.
Kritik biznes mantig‘i serverda bajarilishi kerak, mijozda emas. Hujumchi ilovani to‘liq dekompilyatsiya qilsa ham, server kodi erishib bo‘lmaydigan bo‘lib qoladi. Barcha so‘rovlar va parametrlarning server tomonida validatsiyasi reversing paytida topilgan zaifliklardan foydalanishni oldini oladi. Play Integrity API yoki App Attest orqali server attestatsiyasi so‘rovning haqiqiy, o‘zgartirilmagan ilovadan kelganligini tasdiqlaydi.
Tez-tez beriladigan savollar
AQShda reverse engineering DMCA bilan tartibga solinadi — moslik, xavfsizlik testi va arxiv maqsadlari uchun ruxsat etiladi. Texnik himoya choralarini (DRM) chetlab o‘tish taqiqlanadi. Yevropada EUCD ning 6-moddasi DMCA ga o‘xshash. Rossiyada mualliflik huquqi egasining roziligisiz reverse engineering mualliflik huquqlarining buzilishi sifatida talqin qilinishi mumkin. Tijoriy reversingdan oldin yuridik maslahat majburiydir.
Yo‘q. Hujumchi qurilmasida bajariladigan har qanday kod tahlil qilinishi mumkin — bu mijoz tomoni himoya modelining prinsipial cheklovidir. Himoyaning maqsadi reversing ni iqtisodiy jihatdan foydasiz qilishdir: vaqt va resurs xarajatlari olingan natijaning qiymatidan oshib ketishi kerak. Obfuskatsiya, RASP va server mantig‘ining kombinatsiyasi joriy himoya standartidir.
Repackaging — reverse engineering orqali ilovani o‘zgartirish va APK ni qayta yig‘ish. Hujumchi APK ni apktool orqali ochadi, zararli kod qo‘shadi yoki API kalitlarini almashtiradi, qayta yig‘adi va o‘z sertifikati bilan imzolaydi. Repackaging Kaspersky Threat Report (2025) ma’lumotlariga ko‘ra, Android dagi barcha hujumlarning 86% ini tashkil qiladi. Qarshi chora: runtime da raqamli imzoni tekshirish.
Universal Android SSL Unpin Frida skripti TrustManager.checkServerTrusted va iOS da ServerTrustManager chaqiruvlarini tutib, amalga oshirishni allow-all bilan almashtiradi. Shuningdek OkHttp va URLConnection dagi X509TrustManager metodlarini tutish qo‘llaniladi. SSL-pinning Fridada tayyor skript bilan 10 soniyada chetlab o‘tiladi. Bardoshliroq himoya — server tomonida sertifikatni tekshirish orqali certificate transparency.
.so/.dylib kutubxonalaridagi mahalliy C/C++ kodi DEX dagi Java dan ancha qiyinroq reversing qilinadi. PGO va Osize kompilyatsiyasi bilan Swift Objective-C dan ko‘ra chalkashtirilgan ikkilik fayl beradi. Rust runtime metama’lumotlarisiz va standart Objective-C bog‘lamasisiz mahalliy kodga kompilyatsiya qilinadi, bu uni zamonaviy mobil ishlanma tillari orasida reversing uchun eng qiyin qiladi.
Xulosalar
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.