APK'ni qanday ochish va qanday tahrirlash kerak? apktool-dan foydalanish apk faylini qismlarga ajratish va yig'ish uchun dastur

Ba'zida Android-dagi ba'zi ilovalar qaysidir ma'noda foydalanuvchiga mos kelmaydi. Masalan, intruziv reklama. Va shunday bo'ladiki, dastur hamma uchun yaxshi, lekin undagi tarjima yo egri yoki umuman yo'q. Yoki, masalan, dastur sinovdir, lekin to'liq versiyani olishning hech qanday usuli yo'q. Vaziyatni qanday o'zgartirish mumkin?

Kirish

Ushbu maqolada biz APK paketini ilova yordamida qanday qismlarga ajratish, uning ichki tuzilishini ko'rib chiqish, bayt kodini qismlarga ajratish va dekompilyatsiya qilish, shuningdek, bizga u yoki bu foyda keltirishi mumkin bo'lgan ilovalarga bir nechta o'zgartirishlar kiritishga harakat qilamiz.

Bularning barchasini o'zingiz qilish uchun sizga Android ilovalari yozilgan Java tili va Android-ning hamma joyida qo'llaniladigan XML tili haqida hech bo'lmaganda asosiy bilim kerak bo'ladi - ilovaning o'zi va unga kirish huquqlarini tavsiflashdan tortib, satrlarni saqlashgacha. ekranda aks etadi. Shuningdek, sizga maxsus konsol dasturiy ta'minotidan foydalanish qobiliyati kerak bo'ladi.

Xo'sh, barcha Android dasturlari tarqatilgan APK to'plami nima?

Ilovani dekompilyatsiya qilish

Ushbu maqolada biz faqat qismlarga ajratilgan dastur kodi bilan ishladik, lekin agar katta ilovalarga jiddiyroq o'zgarishlar kiritilsa, smali kodini tushunish ancha qiyin bo'ladi. Yaxshiyamki, biz dex kodini Java kodiga dekompilyatsiya qilishimiz mumkin, garchi asl bo'lmasa ham, qayta kompilyatsiya qilinmagan bo'lsa ham, dastur mantig'ini o'qish va tushunish ancha oson. Buning uchun bizga ikkita vosita kerak bo'ladi:

  • dex2jar - Dalvik baytekodini JVM baytekodiga tarjimon, uning asosida Java tilida kod olishimiz mumkin;
  • jd-gui bu dekompilyatorning o'zi bo'lib, JVM baytkodidan o'qilishi mumkin bo'lgan Java kodini olish imkonini beradi. Muqobil sifatida siz Jad (www.varaneckas.com/jad) dan foydalanishingiz mumkin; U ancha eski bo'lsa-da, ba'zi hollarda u Jd-gui'ga qaraganda ko'proq o'qilishi mumkin bo'lgan kod ishlab chiqaradi.

Ulardan shunday foydalanish kerak. Birinchidan, biz argument sifatida apk paketiga yo'lni belgilab, dex2jar-ni ishga tushiramiz:

% dex2jar.sh mail.apk

Natijada, Java kodini ko'rish uchun jd-gui da ochilishi mumkin bo'lgan joriy katalogda mail.jar Java paketi paydo bo'ladi.

APK paketlarini tartibga solish va ularni qabul qilish

Android ilovalari toʻplami mohiyatan oddiy ZIP fayl boʻlib, uning mazmunini koʻrish yoki uni chiqarib olish uchun maxsus vositalarni talab qilmaydi. Arxivatorga ega bo'lish kifoya - Windows uchun 7zip yoki Linuxda konsolni ochish. Ammo bu o'rash haqida. Ichida nima bor? Umuman olganda, bizda quyidagi tuzilma mavjud:

  • META-INF/- ilovaning yaratuvchisini identifikatsiya qiluvchi raqamli sertifikat va paketli fayllarning nazorat summalarini o'z ichiga oladi;
  • res/ - ilova o'z ishida foydalanadigan turli resurslar, masalan, tasvirlar, interfeysning deklarativ tavsifi, shuningdek, boshqa ma'lumotlar;
  • AndroidManifest.xml- ilova tavsifi. Bunga, masalan, talab qilinadigan ruxsatlar ro'yxati, kerakli Android versiyasi va kerakli ekran o'lchamlari kiradi;
  • classes.dex- Dalvik virtual mashinasi uchun kompilyatsiya qilingan dastur baytkodi;
  • resurslar.arsc- shuningdek, resurslar, lekin boshqa turdagi - xususan, satrlar (ha, bu fayl ruslashtirish uchun ishlatilishi mumkin!).

Ro'yxatda keltirilgan fayllar va kataloglar, agar hammasi bo'lmasa, ehtimol, APK'larning ko'pchiligida. Biroq, eslatib o'tishga arziydigan yana bir nechta oddiy bo'lmagan fayllar/kataloglar mavjud:

  • aktivlar- resurslarning analogi. Asosiy farq shundaki, resursga kirish uchun siz uning identifikatorini bilishingiz kerak, lekin aktivlar ro'yxatini dastur kodidagi AssetManager.list() usuli yordamida dinamik ravishda olish mumkin;
  • lib- NDK (Native Development Kit) yordamida yozilgan mahalliy Linux kutubxonalari.

Bu katalogdan C/C++ da yozilgan oʻyin dvigatellarini oʻsha yerga joylashtirgan oʻyin ishlab chiqaruvchilari, shuningdek, yuqori unumli ilovalarni yaratuvchilar (masalan, Google Chrome) tomonidan foydalaniladi. Biz qurilmani aniqladik. Lekin sizni qiziqtirgan ilovaning paket faylini qanday olish mumkin? APK fayllarini qurilmadan ildizsiz olishning iloji bo'lmagani uchun (ular /data/app katalogida joylashgan) va ildiz otish har doim ham tavsiya etilmaydi, ilova faylini kompyuteringizga olishning kamida uchta usuli mavjud:

  • Chrome uchun APK Downloader kengaytmasi;
  • Haqiqiy APK Leecher ilovasi;
  • turli fayl hosting va Varezniks.

Qaysi birini ishlatish ta'mga bog'liq; biz alohida ilovalardan foydalanishni afzal ko'ramiz, shuning uchun biz Real APK Leecher-dan foydalanishni tasvirlab beramiz, ayniqsa u Java-da yozilgan va shunga mos ravishda Windows yoki Nix-da ishlaydi.

Dasturni ishga tushirgandan so'ng siz uchta maydonni to'ldirishingiz kerak: Elektron pochta, Parol va Device ID - va tilni tanlang. Birinchi ikkitasi qurilmada foydalanadigan Google hisobingizning elektron pochta manzili va parolidir. Uchinchisi, qurilma identifikatori bo'lib, uni teruvchiga kodni kiritish orqali olish mumkin # #8255## va keyin Device ID qatorini toping. To'ldirishda siz android- prefiksisiz identifikatorni kiritishingiz kifoya.

To'ldirish va saqlashdan so'ng, "Serverga ulanishda xato" xabari ko'pincha paydo bo'ladi. Uning Google Play bilan hech qanday aloqasi yo'q, shuning uchun uni e'tiborsiz qoldirib, sizni qiziqtirgan paketlarni qidiring.

Ko'rish va o'zgartirish

Aytaylik, siz o'zingizni qiziqtirgan paketni topdingiz, uni yuklab oldingiz, uni ochdingiz... va ba'zi XML faylini ko'rishga harakat qilganingizda, fayl matn emasligini bilib hayron qoldingiz. Uni qanday dekompilyatsiya qilish va umuman paketlar bilan qanday ishlash kerak? Haqiqatan ham SDK ni o'rnatish kerakmi? Yo'q, SDK ni o'rnatish umuman shart emas. Aslida, APK paketlarini chiqarish, o'zgartirish va paketlash uchun barcha qadamlar quyidagi vositalarni talab qiladi:

  • ZIP arxivi o'rash va qadoqlash uchun;
  • smali- Dalvik virtual mashinasi bayt-kod assembler/disassembler (code.google.com/p/smali);
  • aapt- resurslarni qadoqlash vositasi (sukut bo'yicha, ilovalar ish faoliyatini optimallashtirish uchun resurslar ikkilik shaklda saqlanadi). Android SDK-ga kiritilgan, lekin uni alohida olish mumkin;
  • imzolovchi- o'zgartirilgan paketni raqamli imzolash uchun vosita (bit.ly/Rmrv4M).

Siz ushbu vositalarning barchasini alohida ishlatishingiz mumkin, ammo bu noqulay, shuning uchun ular asosida yaratilgan yuqori darajadagi dasturlardan foydalanish yaxshiroqdir. Agar siz Linux yoki Mac OS X operatsion tizimida ishlayotgan bo'lsangiz, apktool deb nomlangan vosita mavjud. Bu sizga resurslarni asl ko'rinishida (jumladan, ikkilik XML va arsc fayllarini) ochishga, o'zgartirilgan resurslar bilan paketni qayta tiklashga imkon beradi, lekin u paketlarni qanday imzolashni bilmaydi, shuning uchun imzolovchi yordam dasturini qo'lda ishga tushirishingiz kerak bo'ladi. Yordamchi dastur Java-da yozilganiga qaramay, uning o'rnatilishi juda nostandart. Avval jar faylining o'zini olishingiz kerak:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ eksport PATH=~/bin:$PATH

Agar siz Windows-da ishlasangiz, buning uchun Virtuous Ten Studio deb nomlangan ajoyib vosita mavjud bo'lib, u barcha vositalarni (shu jumladan apktool-ning o'zini ham) to'playdi, ammo CLI interfeysi o'rniga u foydalanuvchiga intuitiv grafik interfeysni taqdim etadi, uning yordamida siz uni ishlatishingiz mumkin. bir necha marta bosish orqali ochish, qismlarga ajratish va dekompilyatsiya qilish operatsiyalarini bajarish. Ushbu vosita Donation-ware, ya'ni ba'zida sizdan litsenziya olishingizni so'ragan oynalar paydo bo'ladi, lekin oxir-oqibat bunga chidash mumkin. Uni tavsiflashning ma'nosi yo'q, chunki interfeysni bir necha daqiqada tushunishingiz mumkin. Ammo apktool, konsol xususiyati tufayli, batafsilroq muhokama qilinishi kerak.


Keling, apktool variantlarini ko'rib chiqaylik. Muxtasar qilib aytganda, uchta asosiy buyruq mavjud: d (dekodlash), b (qurilish) va if (ramkani o'rnatish). Agar birinchi ikkita buyruq bilan hamma narsa aniq bo'lsa, uchinchi, shartli bayonot nima qiladi? U ko'rsatilgan UI ramkasini ochadi, bu siz har qanday tizim paketini ajratgan hollarda kerak bo'ladi.

Keling, birinchi buyruqning eng qiziqarli variantlarini ko'rib chiqaylik:

  • -s- dex fayllarni qismlarga ajratmang;
  • -r- resurslarni paketdan chiqarmang;
  • -b- dex faylini demontaj qilish natijalariga disk raskadrovka ma'lumotlarini kiritmang;
  • --ramka-yo'l- apktool-ga o'rnatilgan UI o'rniga belgilangan UI ramkasidan foydalaning. Endi b buyrug'i uchun bir nechta variantni ko'rib chiqamiz:
  • -f- o'zgarishlarni tekshirmasdan majburiy yig'ish;
  • -a- agar biron sababga ko'ra uni boshqa manbadan foydalanmoqchi bo'lsangiz, aaptga (APK arxivini yaratish vositasi) yo'lni ko'rsating.

Buning uchun apktool-dan foydalanish juda oddiy, shunchaki buyruqlardan birini va APK-ga yo'lni belgilang, masalan:

$ apktool d mail.apk

Shundan so'ng, paketning barcha chiqarilgan va demontaj qilingan fayllari pochta katalogida paydo bo'ladi.

Tayyorgarlik. Reklamani o'chirish

Nazariya, albatta, yaxshi, lekin agar biz qadoqlanmagan paket bilan nima qilishni bilmasak, nima uchun kerak? Keling, nazariyani o'z foydamiz uchun qo'llashga harakat qilaylik, ya'ni ba'zi dasturiy ta'minotni bizga reklama ko'rsatmasligi uchun o'zgartiramiz. Misol uchun, bu Virtual mash'al bo'lsin - virtual mash'al. Ushbu dasturiy ta'minot biz uchun juda mos keladi, chunki u zerikarli reklama bilan to'ldirilgan va bundan tashqari, kod o'rmonida adashib qolmaslik uchun juda oddiy.


Shunday qilib, yuqoridagi usullardan birini ishlatib, dasturni bozordan yuklab oling. Agar siz Virtuous Ten Studio-dan foydalanishga qaror qilsangiz, shunchaki dasturda APK faylini oching va uni oching, loyiha yarating (Fayl -> Yangi loyiha), so'ngra loyiha kontekst menyusida Import File-ni tanlang. Agar sizning tanlovingiz apktool-ga tushgan bo'lsa, faqat bitta buyruqni bajaring:

$ apktool d com.kauf.particle.virtualtorch.apk

Shundan so'ng, com.kauf.particle.virtualtorch katalogida oldingi bo'limda tasvirlanganga o'xshash fayl daraxti paydo bo'ladi, lekin dex fayllari va apktool.yml fayli o'rniga qo'shimcha smali katalogi mavjud. Birinchisi dasturning bajariladigan dex faylining qismlarga ajratilgan kodini o'z ichiga oladi, ikkinchisi paketni qayta yig'ish uchun apktool uchun zarur bo'lgan xizmat ma'lumotlarini o'z ichiga oladi.

Biz izlashimiz kerak bo'lgan birinchi joy, albatta, AndroidManifest.xml. Va bu erda biz darhol quyidagi qatorga duch kelamiz:

Ilovaga Internetga ulanishdan foydalanish uchun ruxsat berish uchun javobgar ekanligini taxmin qilish qiyin emas. Aslida, agar biz shunchaki reklamadan xalos bo'lishni istasak, dasturni Internetdan bloklashimiz kerak bo'ladi. Keling, buni qilishga harakat qilaylik. Belgilangan qatorni o'chirib tashlaymiz va apktool yordamida dasturiy ta'minotni yaratishga harakat qilamiz:

$ apktool b com.kauf.particle.virtualtorch

Olingan APK fayli com.kauf.particle.virtualtorch/build/ katalogida paydo bo'ladi. Biroq, uni o'rnatib bo'lmaydi, chunki unda raqamli imzo va fayl nazorat summalari yo'q (shunchaki u META-INF/ katalogiga ega emas). Biz apk-signer yordam dasturidan foydalanib paketni imzolashimiz kerak. Ishga tushirildi. Interfeys ikkita yorliqdan iborat - birinchisida (Key Generator) biz kalitlarni yaratamiz, ikkinchisida (APK Signer) imzolaymiz. Shaxsiy kalitimizni yaratish uchun quyidagi maydonlarni to'ldiring:

  • Maqsadli fayl- kalit do'koni chiqish fayli; odatda bir juft kalitni saqlaydi;
  • Parol Va Tasdiqlang- saqlash uchun parol;
  • Taxallus- saqlashdagi kalitning nomi;
  • Taxallus parol Va Tasdiqlang- maxfiy kalit paroli;
  • Yaroqlilik- amal qilish muddati (yillarda). Standart qiymat optimal hisoblanadi.

Qolgan maydonlar, odatda, ixtiyoriy, lekin kamida bittasi to'ldirilishi kerak.


OGOHLANTIRISH

Apk-signer yordamida ilovaga imzo chekish uchun siz Android SDK-ni o'rnatishingiz va ilova sozlamalarida unga to'liq yo'lni belgilashingiz kerak.

Barcha ma'lumotlar faqat ma'lumot olish uchun taqdim etiladi. Na muharrirlar, na muallif ushbu maqola materiallaridan kelib chiqishi mumkin bo'lgan har qanday zarar uchun javobgar emas.

Endi siz ushbu kalit bilan APK-ni imzolashingiz mumkin. APK Signer yorlig'ida yangi yaratilgan faylni tanlang, parol, kalit taxallus va parolni kiriting, so'ng APK faylini toping va "Imzolash" tugmasini jasorat bilan bosing. Har bir narsa yaxshi bo'lsa, paket imzolanadi.

MA'LUMOT

Paketni o'z kalitimiz bilan imzolaganimiz sababli, u asl dasturga zid keladi, ya'ni biz dasturiy ta'minotni bozor orqali yangilashga harakat qilganimizda, biz xatoga duch kelamiz.

Raqamli imzo faqat uchinchi tomon dasturlari uchun talab qilinadi, shuning uchun agar siz o'rnatilgan tizim ilovalarini /system/app/ katalogiga nusxalash orqali o'zgartirayotgan bo'lsangiz, ularga imzo chekishingiz shart emas.

Shundan so'ng paketni smartfoningizga yuklab oling, o'rnating va ishga tushiring. Voila, reklama yo'qoldi! Buning o'rniga bizda Internet yo'q yoki tegishli ruxsatnomalar yo'q degan xabar paydo bo'ldi. Nazariy jihatdan, bu etarli bo'lishi mumkin, ammo xabar zerikarli ko'rinadi va rostini aytsam, biz shunchaki ahmoqona dastur bilan omadli bo'ldik. Odatda yozilgan dasturiy ta'minot, ehtimol, hisob ma'lumotlarini aniqlaydi yoki Internetga ulanishni tekshiradi va aks holda ishga tushirishni rad etadi. Bu holatda qanday bo'lish kerak? Albatta, kodni tahrirlang.

Odatda, dastur mualliflari ilova yoki uning "faoliyati" dan biri (oddiy qilib aytganda, ilova ekranlari) ishga tushirilganda reklamalarni ko'rsatish va ushbu sinflarni chaqirish usullari uchun maxsus sinflarni yaratadilar. Keling, ushbu sinflarni topishga harakat qilaylik. Biz smali katalogiga o'tamiz, keyin com (org faqat ochiq grafik kutubxonasini o'z ichiga oladi cocos2d), keyin kauf (bu erda, chunki bu ishlab chiquvchining nomi va uning barcha kodi o'sha erda) - va bu erda, marketing katalogi. Ichkarida biz smali kengaytmali bir qator fayllarni topamiz. Bular sinflar bo'lib, ulardan eng diqqatga sazovori Ad.smali sinfidir, uning nomidan reklamani ko'rsatadigan sinf ekanligini taxmin qilish oson.

Biz uning ishlash mantig'ini o'zgartirishimiz mumkin edi, ammo dasturning o'zidan uning har qanday usullariga qo'ng'iroqlarni olib tashlash ancha oson bo'lar edi. Shuning uchun biz marketing katalogini tark etamiz va qo'shni zarrachalar katalogiga, keyin esa virtual mash'alaga o'tamiz. MainActivity.smali fayli bu erda alohida e'tiborga loyiqdir. Bu Android SDK tomonidan yaratilgan va ilovaga kirish nuqtasi sifatida o'rnatiladigan standart Android klassi (C dagi asosiy funksiyaga o'xshash). Faylni tahrirlash uchun oching.

Ichkarida smali kodi (mahalliy assembler) mavjud. Bu past darajadagi tabiati tufayli juda chalkash va o'qish qiyin, shuning uchun biz uni o'rganmaymiz, shunchaki koddagi Reklama sinfiga barcha havolalarni topamiz va ularga izoh beramiz. Qidiruvda "Reklama" qatorini kiritamiz va 25-qatorga o'tamiz:

Dala xususiy e'lon: Lcom/kauf/marketing/Ad;

Bu yerda Reklama sinfi obyektini saqlash uchun reklama maydoni yaratiladi. Biz chiziq oldiga ### belgisini qo'yish orqali izoh beramiz. Biz qidiruvni davom ettiramiz. 423-qator:

Yangi namunali v3, Lcom/kauf/marketing/Ad;

Bu erda ob'ektni yaratish sodir bo'ladi. Keling, fikr bildiraylik. Biz qidiruvni davom ettiramiz va 433, 435, 466, 468, 738, 740, 800 va 802-qatorlarda E'lonlar sinfining usullariga qo'ng'iroqlarni topamiz. Keling, fikr bildiraylik. Qarang, shunday. Saqlash. Endi paketni qayta birlashtirish va funksionallik va reklama mavjudligini tekshirish kerak. Tajribaning tozaligi uchun biz AndroidManifest.xml dan olib tashlangan chiziqni qaytaramiz, paketni yig'amiz, imzolaymiz va o'rnatamiz.

Bizning gvineya cho'chqamiz. Ko'rinadigan reklama

Voy! Reklama faqat dastur ishlayotgan vaqtda yo'qoldi, lekin biz dasturiy ta'minotni ishga tushirganimizda ko'ramiz asosiy menyuda qoldi. Xo'sh, kuting, lekin kirish nuqtasi MainActivity sinfidir va dastur ishlayotgan paytda reklama yo'qolgan, lekin asosiy menyuda qolgan, shuning uchun kirish nuqtasi boshqacha? Haqiqiy kirish nuqtasini aniqlash uchun AndroidManifest.xml faylini qayta oching. Va ha, unda quyidagi qatorlar mavjud:

Ular bizga (va eng muhimi, androidga) android.intent.category.LAUNCHER toifasidan android.intent.action.MAIN niyatini (voqea) yaratishga javoban Start nomli faoliyatni ishga tushirish kerakligini aytadi. Ushbu hodisa ishga tushirgichdagi ilova belgisini bosganingizda hosil bo'ladi, shuning uchun u kirish nuqtasini, ya'ni Start sinfini aniqlaydi. Ehtimol, dasturchi birinchi navbatda asosiy menyusiz dasturni yozgan, unga kirish nuqtasi standart MainActivity klassi bo'lgan, so'ngra menyuni o'z ichiga olgan va Start sinfida tasvirlangan yangi oyna (faoliyat) qo'shilgan va uni qo'lda kiritgan. nuqta.

Start.smali faylini oching va yana "Reklama" qatorini qidiring, biz 153 va 155 qatorlarda FirstAd klassi haqida eslatma topamiz. Shuningdek, u manba kodida va nomiga ko'ra, asosiy ekranda reklamalarni ko'rsatish uchun javobgardir. Keling, batafsilroq ko'rib chiqaylik, FirstAd sinfining namunasini yaratish va kontekstga ko'ra, ushbu misol bilan bog'liq bo'lgan niyat, so'ngra shartli o'tish misol yaratishdan oldin amalga oshiriladigan cond_10 yorlig'i mavjud. sinfdan:

If-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :cond_10

Ehtimol, dastur qandaydir tarzda reklamaning asosiy ekranda ko'rsatilishi kerakligini hisoblab chiqadi va agar bo'lmasa, to'g'ridan-to'g'ri cond_10 ga o'tadi. OK, keling, uning vazifasini soddalashtiramiz va shartli o'tishni shartsiz bilan almashtiramiz:

#if-ne p1, v0, :cond_10 goto:cond_10

Kodda FirstAd haqida boshqa eslatma yo'q, shuning uchun biz faylni yopamiz va apktool yordamida virtual mash'alimizni qayta yig'amiz. Uni smartfoningizga nusxalang, o'rnating, ishga tushiring. Voila, barcha reklamalar yo'qoldi, buning uchun barchamizni tabriklaymiz.

Natijalar

Ushbu maqola Android ilovalarini buzish va o'zgartirish usullari haqida qisqacha ma'lumotdir. Himoyani olib tashlash, tushunarsiz kodni tahlil qilish, dastur resurslarini tarjima qilish va almashtirish, shuningdek, Android NDK yordamida yozilgan ilovalarni o'zgartirish kabi ko'plab muammolar sahna ortida qoldi. Biroq, asosiy bilimga ega bo'lish, barchasini tushunish uchun vaqt masalasidir.

Ushbu maqoladan siz Android ilovasi nimadan iboratligini, APK faylini qanday ochishni va qanday dasturlar bilan bilib olasiz.

APK fayli nima?

APK arxivlangan bajariladigan dastur fayllari uchun ishlatiladigan Android operatsion tizimining formati bo'lib, fayl nomi har qanday bo'lishi mumkin, lekin kengaytma faqat this.apk kabi ko'rinishi kerak. Boshqa operatsion tizimlardagi APK analoglari Windowsda .msi, Symbianda .sis, Linuxda .rpm yoki .deb.

Keling, ichkarida nima borligini ko'rib chiqaylik
Aslida, .apk ZIP arxividir, shuning uchun siz har qanday fayl menejeri yoki arxivator, masalan, WinRAR yoki X-plore mobil ilovasi yordamida ichki qurilmaga qarashingiz mumkin.




Shuni esda tutish kerakki, siz faqat ichki manbalarga vizual kirish imkoniyatiga ega bo'lasiz;

Keling, strukturani ko'rib chiqaylik
.apk ichida biz bir qancha fayl va papkalarni ko'ramiz, keling, ular nima uchun ekanligini bilib olaylik:

  • AndroidManifest.xml - bu dasturning o'ziga xos "pasporti" bo'lib, undan barcha asosiy fikrlar, talablar, versiya, ruxsatlar va hokazolarni bilib olishingiz mumkin.
  • META-INF ushbu faylda metadata, ya'ni ma'lumotlar, nazorat summalari, ma'lumotlarga yo'llar, resurslarning yo'llari va nazorat yig'indilari, sertifikatlar haqidagi ma'lumotlar mavjud. Ushbu faylni istalgan matn muharriri bilan ochishingiz mumkin, lekin Notepad++ dan foydalanish tavsiya etiladi.
  • Res papkasida barcha dastur resurslari, grafikalar, piktogrammalar, rasmlar, matnlar va grafik interfeys elementlari mavjud. Bundan tashqari, jildga osongina kirishingiz mumkin.
  • classes.dex - bu Dalvik VM virtual mashinasi tomonidan bajariladigan to'g'ridan-to'g'ri dastur kodi, siz bu faylning ichida nima borligini faqat .apk ni dekompilyatsiya qilish orqali ko'rishingiz mumkin, biz bu haqda boshqa maqolalarda gaplashamiz. resources.arsc - kompilyatsiya qilingan XML fayli, bu fayl dasturda ishtirok etgan barcha resurslar haqidagi ma'lumotlarni o'z ichiga oladi.
  • lib - manbalariga faqat maxsus dasturlardan foydalanganda kirish mumkin bo'lgan mahalliy kutubxonalarga ega papka. Shuningdek, APK-da com, org, udk kabi fayl va papkalar bo'lishi mumkin, lekin har doim ham emas.

Endi ichki tuzilmani batafsil ko'rib chiqaylik, buning uchun bizga dekompilyatsiya dasturi, Java va APK fayli kerak. .apk ni demontaj qilish uchun asosiy vosita Apktool, ammo bu dastur faqat chiziqdan ishlaydi, bu juda qulay emas. Tezroq va qulayroq tahlil qilish uchun siz APKing-dan foydalanishingiz mumkin, bu hali ham bir xil Apktool, ammo kontekst menyusidan ishlash qobiliyatiga ega.


Shunday qilib, biz APKingni Windows uchun har qanday dastur kabi o'rnatamiz va .apk ni tanlab, sichqonchaning o'ng tugmasi va Shift tugmasi bilan bir vaqtning o'zida bosing, shundan so'ng biz quyidagilarni ko'ramiz:



Va kerakli amalni tanlang, masalan, to'liq dekompilyatsiya qiling, keyin dastur operatsiyani yakunlaydi va xuddi shu nomdagi papkani yaratadi.



Jildni ochish orqali biz APK faylining barcha resurslariga kirish huquqiga ega bo'lamiz.



Endi barcha matnli fayllarni tahrirlash mumkin, asosiy qoidalarga rioya qilgan holda siz mashhur Notepad++ dasturidan foydalanishingiz mumkin, masalan, AndroidManifest.xml ni ko'rib chiqing.

Men SmartAPKTool ilovasini eslatib o'tdim. U o'zgartirilgan apk fayllarini ajratib olishi, ziplashi va imzolashi mumkin. Uning afzalligi - grafik interfeysning mavjudligi. Biroq, jiddiy kamchilik bor. SmartAPKTool uzoq vaqt davomida yangilanmagan va dastur Android-ning so'nggi versiyalari uchun ilovalarni to'g'ri ochib, to'plamaydi. Shuning uchun, bu erda men ushbu maqsadlar uchun ilovadan qanday foydalanishni tushuntirishga harakat qilaman apktool.

Eslatma 1.
SmartAPKTool dasturi to'plangan apk fayllarini imzolash uchun hali ham qulay.
Eslatma 2.
Maqolada keltirilgan dasturlarga havolalar ↓

Dastur apktool grafik interfeysga ega emas. Bu buyruq satri bilan ishlashga odatlanmaganlar uchun kamchilik. Ammo ortiqcha narsa ham bor: SmartAPKTool-dan farqli o'laroq, biz barcha xatolarni ko'ramiz, ya'ni nima tuzatish kerakligini bilib olamiz.

Keling, ikkita arxivni yuklab olamiz: biri barcha tizimlar uchun, ikkinchisi bizning tizimimiz uchun (misolda Windows):

Keling, ikkala arxivni bitta bo'sh papkaga ochamiz (bizning misolimizda, C:\apktool\). Uning mazmuni quyidagicha ko'rinishi kerak:

Bundan buyon biz dasturdan foydalanishimiz mumkin apktool.

Eslatma 3.
Linuxning 64-bitli versiyalari foydalanuvchilari ia32-libs paketini o'rnatishlari kerak bo'ladi:

sudo apt-get install ia32-libs

Xuddi shu papkaga biz ochishimiz kerak bo'lgan faylni joylashtiramiz. Misol uchun, u orig.apk deb nomlansin
Shift tugmachasini bosib ushlab turing va papkadagi bo'sh joyni o'ng tugmasini bosing (fayllarni bosmang!). Shundan so'ng, "Buyruqlar oynasini ochish" -ni tanlang. Ko'rsatilgan konsolda quyidagilarni yozing:

apktool dekodlash orig.apk

Fayl paketdan chiqariladi:

Endi bizda C:\apktool\ katalogida ochilmagan ilovaga ega papka mavjud. U manba fayli bilan bir xil deb ataladi, kengaytmani hisobga olmaganda: C:\apktool\orig\ . Android maqolasida tasvirlanganidek manba fayllarini o'zgartirishimiz mumkin: bitta telefonga ikkita bir xil dasturni qanday o'rnatish kerak. O'zgarishlarni amalga oshirganimizdan so'ng, manba fayllarni apk-ga o'rash orqali dastur nusxasini yig'amiz:

apktool build orrig result.apk

Bu yerda result.apk - biz nusxa ko'chirish uchun o'ylab topgan fayl nomi. Agar xato bo'lmasa, fayl yig'iladi:

Qolganlari maqola doirasidan tashqarida:

  1. Yig'ish paytida xatolar bo'lsa, ularning sababini topib, ularni tuzatishingiz kerak.
  2. Olingan natija.apk fayliga imzo qo'yish qoladi. Buni yuqorida aytib o'tilganidek SmartAPKTool yordamida amalga oshirish mumkin; Bu haqda hamma narsa intuitivdir. Apk faylini imzolashning boshqa usullari ham mavjud.
  3. Nusxani o'rnatishda, uni ishga tushirish yoki ishlatish paytida xatolar ham paydo bo'lishi mumkin. Ularni Android SDK-ga kiritilgan adb yordam dasturi yordamida qo'lga olish kerak.

Ilovaga imzo chekishingiz kerak, aks holda u o'rnatilmaydi. Xatolar tez-tez uchramaydi va ularni keltirib chiqaradigan eng keng tarqalgan muammolar maqolada tasvirlangan

Android qurilmalari uchun turli xil proshivkalardan foydalanish jarayonida ba'zida operatsion tizimga o'rnatilgan tizim ilovalarini u yoki bu tarzda o'zgartirish kerak bo'ladi. Ushbu materialda biz ushbu masalani batafsil ko'rib chiqamiz.

Tabiiyki, tizim APK faylini to'g'ri va barqaror ishlashi uchun qismlarga ajratish va qayta yig'ishingiz kerak. Buning uchun nima qilish kerakligini bosqichma-bosqich aniqlaylik.

Birinchidan, tizim APK fayllarini deodexing jarayonini amalga oshirishingiz kerak. Buni qanday qilishni sizga aytib beramiz.

Shunday qilib, .apk fayli deodexatsiya qilindi va dekompilyatsiya qilindi. Keling, bizni qiziqtirgan dasturni tahlil qilaylik, masalan, aniqlik uchun uning nomi bo'lsin, ramka- res. apk. Biz uni asl dastur sifatida eslaymiz.

Aytaylik, biz ilovaga barcha kerakli o‘zgartirishlarni kiritdik. APK fayllarining barcha jihatlari haqida ko'proq gaplashamiz. Endi siz uni qaytarib olishingiz kerak. Keling, tayyor paketlangan dasturni o'zgartirilgan ilova 2 sifatida eslaylik.

Endi biz nima uchun ilovalarni asl va o'zgartirilgan deb aqliy eslab qolish kerakligini tushuntiramiz 2. ApkTool dasturi (yoki SmartApkTool kabi grafik foydalanuvchi interfeysi kengaytmasi yordamida) tomonidan tuzilgan dastur ishlamaydi, ammo bu muammo emas. Biz quyidagi amallarni bajaramiz:

Bunday fayllarni yana APK-ga yig'ish juda oddiy. Buni amalga oshirish uchun apktool-ni tegishli o'rnatish bayrog'i bilan ishga tushirishingiz va uni ichidagi dekompilyatsiya qilingan ilova bilan papkaga yo'llashingiz kerak. Masalan, apktool bilan bir xil katalogda joylashgan ilova papkamiz bo'lsa, buyruq quyidagicha ko'rinadi:

Shell

java -jar apktool.jar b ilovasi

java - jar apktool .jar b ilovasi

Yig'ishdan so'ng, tugallangan APK fayli katalogda joylashgan bo'ladi ilova/qurilish. Keyinchalik APK-ni imzolashingiz kerak. Bu dastur nosozliklarni tuzatish taqiqlangan qurilmalarda ishlashini ta'minlash uchun amalga oshiriladi. Ya'ni, bunday qurilmalarda imzolanmagan ilovalarni ishga tushirish taqiqlanadi. Raqamli sertifikatlar va faylni imzolash tartibi haqida bu yerda koʻproq oʻqishingiz mumkin.

Faylni imzolash juda oddiy: buning uchun signapk deb nomlangan maxsus yordamchi dastur mavjud. U birinchi navbatda sertifikatlarni argument sifatida, so'ngra dasturga yo'lni va nihoyat imzolangan dastur uchun yo'lni (natija, uni qaerga saqlash kerak) o'tkazish orqali ishga tushirilishi kerak. Bu shunday ko'rinadi:

Shell

java -jar signapk.jar testkey.x509.pem testkey.pk8 *.apk apk_signed.apk

java - jar signapk .jar testkey .x509 .pem testkey .pk8 * .apk apk_signed .apk

Bunday sertifikatni qayerdan olish mumkin, deb so'raysizmi? Sertifikatlarni Internetda topish mumkin. Yoki uni o'zingiz yarating. Barcha kerakli fayllarni o'rnatish va yaratish bo'yicha batafsil ko'rsatmalarni topish mumkin, masalan, .

Xulosa

Ko'rib turganingizdek, APK fayllarini kompilyatsiya qilish va yig'ish juda oddiy jarayon bo'lib, u qo'shimcha ravishda avtomatlashtirilishi mumkin va tadqiqotchining ishini osonlashtiradi. Dalvik virtual mashinasining o'zi ham oson o'rganish va ochish, bu, bir tomondan, ishlab chiquvchilar uchun kirish to'siqlarini kamaytiradi, boshqa tomondan, Android platformasida qaroqchilikning bunday katta foizining asosiy sababidir. Qisman shuning uchun o'yin ishlab chiquvchilari, masalan, syujetli qiziqarli o'yinlarni chiqarishdan umuman manfaatdor emaslar. Foydalanuvchilarning hozirgi munosabatini hisobga olgan holda, fermalarni bir-biriga juda o'xshash xayr-ehsonlar bilan bog'lash ancha foydalidir. Shuning uchun biz ilovalarni sotib olamiz, ishlab chiquvchilarni qo'llab-quvvatlaymiz va natijada qiziqarli tarkibga ega bo'lamiz. Ammo xayriya qilishning mutlaqo hojati yo'q!

Barchangizga rahmat, yana ko'rishguncha.