APK хэрхэн нээх, хэрхэн засах вэ? apktool ашиглах. apk файлыг задлах, угсрах програм

Заримдаа Android дээрх зарим програмууд ямар нэгэн байдлаар хэрэглэгчдэд тохирохгүй байдаг. Жишээ нь интрузив зар сурталчилгаа юм. Мөн энэ програм нь хүн бүрт сайн байдаг ч орчуулга нь муруй эсвэл огт байхгүй байдаг. Эсвэл жишээ нь, програм нь туршилтын хувилбар боловч бүрэн хувилбарыг нь авах боломжгүй юм. Нөхцөл байдлыг хэрхэн өөрчлөх вэ?

Оршил

Энэ нийтлэлд бид APK багцыг програмын тусламжтайгаар хэрхэн задлах, түүний дотоод бүтцийг харах, байт кодыг задлах, задлах, мөн бидэнд нэг юм уу өөр ашиг тус авчрах програмуудад хэд хэдэн өөрчлөлт хийхийг оролдох болно.

Энэ бүгдийг өөрөө хийхийн тулд танд Android програмууд бичигдсэн Java хэл, Android-д хаа сайгүй хэрэглэгддэг XML хэлний тухай наад зах нь анхан шатны мэдлэг хэрэгтэй болно. дэлгэц дээр гарч ирнэ. Мөн танд тусгай консол програм хангамж ашиглах чадвар хэрэгтэй болно.

Тэгэхээр, бүх Android програм хангамжийг түгээдэг APK багц гэж юу вэ?

Аппликешн задлах

Энэ нийтлэлд бид зөвхөн задалсан програмын кодтой ажилласан боловч хэрэв том програмуудад илүү ноцтой өөрчлөлт хийвэл smali кодыг ойлгоход илүү хэцүү байх болно. Аз болоход бид dex кодыг Java код болгон задлах боломжтой бөгөөд энэ нь анхдагч биш, буцааж хөрвүүлээгүй ч програмын логикийг уншиж, ойлгоход илүү хялбар байдаг. Үүнийг хийхийн тулд бидэнд хоёр хэрэгсэл хэрэгтэй болно:

  • dex2jar нь Dalvik байт кодыг JVM байт код руу орчуулагч бөгөөд үүний үндсэн дээр бид Java хэл дээрх кодыг авах боломжтой;
  • jd-gui нь өөрөө задлагч бөгөөд JVM байт кодоос унших боломжтой Java кодыг авах боломжийг олгодог. Өөр хувилбар болгон та Jad (www.varaneckas.com/jad) ашиглаж болно; Хэдийгээр энэ нь нэлээд хуучирсан ч зарим тохиолдолд Jd-gui-ээс илүү унших боломжтой код үүсгэдэг.

Тэднийг ингэж ашиглах ёстой. Эхлээд бид apk багц руу хүрэх замыг аргумент болгон зааж өгсөн dex2jar-г ажиллуулна.

% dex2jar.sh mail.apk

Үүний үр дүнд Java кодыг үзэхийн тулд jd-gui дээр аль хэдийн нээгдэж болох одоогийн лавлахад mail.jar Java багц гарч ирэх болно.

APK багцуудыг зохион байгуулах, хүлээн авах

Android програмын багц нь үндсэндээ энгийн ZIP файл бөгөөд агуулгыг нь үзэх, задлахад ямар нэгэн тусгай хэрэгсэл шаарддаггүй. Архивлагчтай байх нь хангалттай юм - Windows-д зориулсан 7zip эсвэл Linux дээр консол задлах. Гэхдээ энэ нь боодлын тухай юм. Дотор нь юу байна? Ерөнхийдөө бид дараах бүтэцтэй байна.

  • META-INF/- програмын дижитал гэрчилгээ, түүнийг үүсгэгчийг тодорхойлсон, багц файлуудын хяналтын нийлбэр агуулсан;
  • res/ - зураг, интерфэйсийн тунхаглал, түүнчлэн бусад өгөгдөл гэх мэт програмын ажилд ашигладаг төрөл бүрийн нөөцүүд;
  • AndroidManifest.xml- хэрэглээний тодорхойлолт. Үүнд, жишээлбэл, шаардлагатай зөвшөөрлийн жагсаалт, шаардлагатай Android хувилбар, шаардлагатай дэлгэцийн нягтрал зэрэг орно;
  • ангиуд.dex- Dalvik виртуал машинд зориулсан програмын байт кодыг эмхэтгэсэн;
  • нөөц.arsc- мөн нөөцүүд, гэхдээ өөр төрлийн - тухайлбал, мөрүүд (тиймээ, энэ файлыг оросжуулахад ашиглаж болно!).

Жагсаалтад орсон файлууд болон лавлахууд нь бүхэлдээ биш юмаа гэхэд APK-ийн дийлэнх нь байж магадгүй юм. Гэсэн хэдий ч, энд дурдах нь зүйтэй хэд хэдэн тийм ч нийтлэг биш файлууд / лавлахууд байдаг:

  • хөрөнгө- нөөцийн аналог. Гол ялгаа нь нөөцөд хандахын тулд түүний танигчийг мэдэх шаардлагатай боловч хөрөнгийн жагсаалтыг програмын код дахь AssetManager.list() аргыг ашиглан динамик байдлаар авч болно;
  • либ- NDK (Native Development Kit) ашиглан бичигдсэн Linux-ийн уугуул сангууд.

Энэ лавлахыг C/C++ хэл дээр бичигдсэн тоглоомын хөдөлгүүрээ тэнд байрлуулсан тоглоом үйлдвэрлэгчид, мөн өндөр гүйцэтгэлтэй програм бүтээгчид (жишээлбэл, Google Chrome) ашигладаг. Бид төхөөрөмжийг олж мэдсэн. Харин сонирхож буй програмынхаа багц файлыг яаж авах вэ? APK файлуудыг root-гүй төхөөрөмжөөс авах боломжгүй (тэдгээр нь /data/app лавлах санд байрладаг) ба root хийх нь үргэлж зөвлөдөггүй тул програмын файлыг компьютерт оруулах дор хаяж гурван арга бий.

  • Chrome-д зориулсан APK Downloader өргөтгөл;
  • Жинхэнэ APK Leecher програм;
  • төрөл бүрийн файл байршуулах болон Varezniks.

Аль нь хэрэглэх нь амтанд хамаарах асуудал юм; Бид тусдаа програмуудыг ашиглахыг илүүд үздэг тул бид Real APK Leecher-ийн хэрэглээг тайлбарлах болно, ялангуяа энэ нь Java хэл дээр бичигдсэн тул Windows эсвэл Nix дээр ажиллах болно.

Хөтөлбөрийг эхлүүлсний дараа та имэйл, нууц үг, төхөөрөмжийн ID гэсэн гурван талбарыг бөглөж, хэлээ сонгох хэрэгтэй. Эхний хоёр нь таны төхөөрөмж дээр ашигладаг Google акаунтын имэйл болон нууц үг юм. Гурав дахь нь төхөөрөмжийн таниулбар бөгөөд залгагч дээрх кодыг бичиж авах боломжтой # #8255## дараа нь Төхөөрөмжийн ID мөрийг олно. Бөглөхдөө та зөвхөн ID-г android- угтваргүйгээр оруулах хэрэгтэй.

Бөглөж, хадгалсны дараа "Сервертэй холбогдоход алдаа гарлаа" гэсэн мессеж ихэвчлэн гарч ирдэг. Энэ нь Google Play-тэй ямар ч холбоогүй тул үүнийг үл тоомсорлож, өөрийн сонирхсон багцуудыг хайж олоорой.

Харах, өөрчлөх

Та өөрийн сонирхсон багцыг олоод, татаж аваад задлаад... XML файлыг үзэх гэж оролдохдоо тэр файл нь текст биш байсныг мэдээд гайхсан гэж бодъё. Үүнийг хэрхэн задлах, ерөнхийдөө багцуудтай хэрхэн ажиллах вэ? SDK суулгах үнэхээр шаардлагатай юу? Үгүй ээ, SDK суулгах шаардлагагүй. Үнэн хэрэгтээ APK багцуудыг задлах, өөрчлөх, багцлах бүх алхмууд нь дараах хэрэгслүүдийг шаарддаг:

  • ZIP архивлагчзадлах, савлах зориулалттай;
  • смали- Dalvik виртуал машины байт код ассемблер/зассемблер (code.google.com/p/smali);
  • aapt- нөөцийг савлах хэрэгсэл (анхдагчаар програмын гүйцэтгэлийг оновчтой болгохын тулд нөөцийг хоёртын хэлбэрээр хадгалдаг). Android SDK-д багтсан боловч тусад нь авах боломжтой;
  • гарын үсэг зурсан- өөрчилсөн багцад дижитал гарын үсэг зурах хэрэгсэл (bit.ly/Rmrv4M).

Та эдгээр бүх хэрэгслийг тусад нь ашиглаж болно, гэхдээ энэ нь тохиромжгүй тул тэдгээрийн үндсэн дээр бүтээгдсэн дээд түвшний програм хангамжийг ашиглах нь дээр. Хэрэв та Linux эсвэл Mac OS X дээр ажилладаг бол apktool гэж нэрлэгддэг хэрэгсэл байдаг. Энэ нь нөөцийг анхны хэлбэрээр нь задлах (хоёртын XML болон arsc файлуудыг оруулаад), өөрчлөгдсөн нөөцөөр багцыг дахин бүтээх боломжийг олгодог боловч багцад хэрхэн гарын үсэг зурахаа мэдэхгүй тул гарын үсэг зурах хэрэгслийг гараар ажиллуулах шаардлагатай болно. Уг хэрэгсэл нь Java хэл дээр бичигдсэн хэдий ч түүний суурилуулалт нь стандарт бус юм. Эхлээд та jar файлыг өөрөө авах хэрэгтэй:

$ 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 $ экспортын PATH=~/bin:$PATH

Хэрэв та Windows дээр ажилладаг бол Virtuous Ten Studio нэртэй маш сайн хэрэгсэл байдаг бөгөөд энэ нь эдгээр бүх хэрэгслийг (apktool өөрөө) хуримтлуулдаг боловч CLI интерфейсийн оронд хэрэглэгчдэд ойлгомжтой график интерфэйсийг өгдөг. задлах, задлах, задлах үйлдлийг хэдхэн товшилтоор гүйцэтгэнэ. Энэ хэрэгсэл нь Donation-ware, өөрөөр хэлбэл заримдаа лиценз авахыг хүссэн цонх гарч ирдэг ч эцэст нь үүнийг тэвчих боломжтой. Үүнийг тайлбарлах нь утгагүй юм, учир нь та интерфэйсийг хэдхэн минутын дотор ойлгох болно. Гэхдээ apktool нь консол шинж чанартай тул илүү нарийвчлан авч үзэх хэрэгтэй.


apktool сонголтуудыг харцгаая. Товчхондоо, гурван үндсэн тушаал байдаг: d (декод тайлах), b (бүтээх) болон if (суулгах хүрээ). Хэрэв эхний хоёр тушаалаар бүх зүйл тодорхой бол гурав дахь нөхцөлт мэдэгдэл юу хийдэг вэ? Энэ нь заасан UI хүрээг задалдаг бөгөөд энэ нь аливаа системийн багцыг задлах тохиолдолд шаардлагатай байдаг.

Эхний командын хамгийн сонирхолтой сонголтуудыг авч үзье.

  • -s- dex файлуудыг задалж болохгүй;
  • - нөөцийг задлахгүй байх;
  • - dex файлыг задлах үр дүнд дибаг хийх мэдээллийг оруулахгүй байх;
  • --хүрээний зам- apktool-д суулгагдсаны оронд заасан UI хүрээг ашиглана уу. Одоо b командын хэд хэдэн сонголтыг авч үзье:
  • -f- өөрчлөлтийг шалгахгүйгээр албадан угсрах;
  • - Хэрэв та ямар нэг шалтгааны улмаас өөр эх сурвалжаас ашиглахыг хүсч байвал aapt руу (APK архив үүсгэх хэрэгсэл) хүрэх замыг зааж өгнө үү.

Үүнийг хийхийн тулд apktool ашиглах нь маш энгийн, жишээ нь:

$ apktool d mail.apk

Үүний дараа багцын задалсан болон задалсан бүх файлууд шуудангийн санд гарч ирнэ.

Бэлтгэл ажил. Зар сурталчилгааг идэвхгүй болгож байна

Онол нь мэдээж сайн, гэхдээ задалсан багцыг юу хийхээ мэдэхгүй байгаа бол яагаад хэрэгтэй байна вэ? Энэ онолыг өөрсдөдөө ашигтайгаар хэрэгжүүлэхийг хичээцгээе, тухайлбал зарим програм хангамжийг бидэнд зар сурталчилгаа үзүүлэхгүйн тулд өөрчилье. Жишээлбэл, энэ нь виртуал бамбар - виртуал бамбар байг. Энэхүү програм хангамж нь бидний хувьд хамгийн тохиромжтой, учир нь энэ нь ядаргаатай зар сурталчилгаагаар дүүрэн бөгөөд үүнээс гадна кодын ширэнгэн ойд төөрөхгүй байх хангалттай хялбар юм.


Тиймээс дээрх аргуудын аль нэгийг ашиглан програмыг зах зээлээс татаж аваарай. Хэрэв та Virtuous Ten Studio-г ашиглахаар шийдсэн бол програмын APK файлыг нээж, задлаад төсөл үүсгээд (Файл -> Шинэ төсөл), дараа нь төслийн контекст цэснээс Импорт файлыг сонгоно уу. Хэрэв таны сонголт apktool дээр унасан бол нэг командыг ажиллуулна уу:

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

Үүний дараа com.kauf.particle.virtualtorch санд өмнөх хэсэгт тайлбарласантай төстэй файлын мод гарч ирэх боловч dex файл болон apktool.yml файлын оронд нэмэлт smali лавлах байх болно. Эхнийх нь програмын гүйцэтгэх боломжтой dex файлын задалсан кодыг агуулж байгаа бол хоёр дахь нь багцыг буцааж угсрах apktool-д шаардлагатай үйлчилгээний мэдээллийг агуулдаг.

Бидний хайх ёстой хамгийн эхний газар бол мэдээж AndroidManifest.xml. Энд бид нэн даруй дараах мөртэй тулгардаг.

Энэ нь програмын интернет холболтыг ашиглах зөвшөөрөл олгох үүрэгтэй гэдгийг таахад хэцүү биш юм. Үнэн хэрэгтээ, хэрэв бид сурталчилгаанаас ангижрахыг хүсч байвал програмыг интернетээс хаах хэрэгтэй болно. Үүнийг хийхийг хичээцгээе. Бид заасан мөрийг устгаад apktool ашиглан програм хангамжийг бүтээхийг оролдоно.

$ apktool b com.kauf.particle.virtualtorch

Үүссэн APK файл com.kauf.particle.virtualtorch/build/ директорт гарч ирнэ. Гэсэн хэдий ч тоон гарын үсэг, файл шалгах нийлбэр байхгүй (энэ нь зүгээр л META-INF/ лавлахгүй) тул үүнийг суулгах боломжгүй болно. Бид apk-signer хэрэгслийг ашиглан багцад гарын үсэг зурах ёстой. Эхэлсэн. Интерфэйс нь хоёр табаас бүрдэнэ - эхний (Түлхүүр үүсгэгч) дээр бид түлхүүрүүдийг үүсгэдэг, хоёр дахь дээр (APK Signer) гарын үсэг зурдаг. Манай хувийн түлхүүрийг үүсгэхийн тулд дараах талбаруудыг бөглөнө үү.

  • Зорилтот файл- түлхүүр хадгалах гаралтын файл; энэ нь ихэвчлэн нэг хос түлхүүр хадгалдаг;
  • Нууц үгТэгээд Баталгаажуулах- хадгалах нууц үг;
  • Алиа нэр- хадгалах сан дахь түлхүүрийн нэр;
  • Нууц үгТэгээд Баталгаажуулах- нууц түлхүүрийн нууц үг;
  • Хүчин төгөлдөр байх- хүчинтэй байх хугацаа (жилээр). Анхдагч утга нь оновчтой байна.

Үлдсэн талбарууд нь ерөнхийдөө сонголттой боловч дор хаяж нэг талбарыг бөглөх ёстой.


АНХААРУУЛГА

Apk-signer ашиглан програмд ​​гарын үсэг зурахын тулд та Android SDK-г суулгаж, програмын тохиргоонд бүрэн замыг зааж өгөх ёстой.

Бүх мэдээллийг зөвхөн мэдээллийн зорилгоор өгсөн болно. Энэ нийтлэлийн материалаас учирч болзошгүй хохирлыг редактор болон зохиогч аль аль нь хариуцахгүй.

Одоо та энэ түлхүүрээр APK-д гарын үсэг зурах боломжтой. APK Signer таб дээрээс шинээр үүсгэсэн файлыг сонгоод, нууц үг, түлхүүрийн нэр, нууц үгээ оруулаад APK файлыг олоод "Гарын үсэг зурах" товчийг зоригтой дарна уу. Хэрэв бүх зүйл сайн болвол багцад гарын үсэг зурна.

МЭДЭЭЛЭЛ

Бид багцад өөрийн түлхүүрээр гарын үсэг зурсан тул энэ нь анхны програмтай зөрчилдөх бөгөөд энэ нь програм хангамжийг зах зээлээр шинэчлэх гэж оролдох үед алдаа гарах болно гэсэн үг юм.

Дижитал гарын үсэг нь зөвхөн гуравдагч талын программ хангамжид шаардлагатай тул хэрэв та суулгасан системийн програмуудыг /system/app/ директор руу хуулж өөрчлөх гэж байгаа бол гарын үсэг зурах шаардлагагүй.

Үүний дараа багцаа ухаалаг утсандаа татаж аваад суулгаад ажиллуулна уу. Voila, зар алга болсон! Харин үүний оронд бидэнд интернет байхгүй эсвэл зохих зөвшөөрөл байхгүй гэсэн мессеж гарч ирэв. Онолын хувьд энэ нь хангалттай байж болох ч мессеж нь ядаргаатай мэт санагдаж, үнэнийг хэлэхэд бид тэнэг програмаар азтай болсон. Ердийн бичигдсэн программ хангамж нь итгэмжлэлээ тодруулж эсвэл интернет холболт байгаа эсэхийг шалгах бөгөөд өөрөөр хэлбэл зүгээр л эхлүүлэхээс татгалздаг. Энэ тохиолдолд яаж байх вэ? Мэдээжийн хэрэг, кодыг засах хэрэгтэй.

Ихэвчлэн програм зохиогчид нь програм эсвэл түүний аль нэг "үйл ажиллагаа" (энгийн үгээр хэлбэл, програмын дэлгэц) нээгдэх үед зар сурталчилгаа үзүүлэх тусгай анги, эдгээр ангиудын дуудлагын аргуудыг бий болгодог. Эдгээр ангиудыг олохыг хичээцгээе. Бид smali лавлах руу очиж, дараа нь com (org нь зөвхөн cocos2d нээлттэй график номын санг агуулдаг), дараа нь kauf (энэ нь хөгжүүлэгчийн нэр бөгөөд түүний бүх код тэнд байгаа) - тэгээд энд байна, маркетингийн лавлах. Дотор нь бид smali өргөтгөлтэй олон тооны файлуудыг олдог. Эдгээр нь ангиуд бөгөөд тэдгээрийн хамгийн алдартай нь Ad.smali анги бөгөөд нэрнээс нь харахад энэ нь зар сурталчилгаа үзүүлдэг анги гэдгийг таахад хялбар байдаг.

Бид түүний үйлдлийн логикийг өөрчилж болох ч програмын аль нэг арга руу залгах дуудлагыг устгах нь илүү хялбар байх болно. Тиймээс бид маркетингийн лавлахаас гарч, зэргэлдээ бөөмийн лавлах руу, дараа нь виртуал бамбар руу очно. MainActivity.smali файл энд онцгой анхаарал хандуулах ёстой. Энэ бол Android SDK-ээр үүсгэгдсэн, програм руу нэвтрэх цэг болгон суулгасан стандарт Android анги юм (С хэл дээрх үндсэн функцтэй адил). Засварлахын тулд файлыг нээнэ үү.

Дотор нь smali код (орон нутгийн ассемблер) байдаг. Энэ нь бага түвшний шинж чанартай тул уншихад нэлээд төөрөгдөлтэй тул бид үүнийг судлахгүй, харин зар сурталчилгааны ангийн бүх лавлагааг кодноос олж, тайлбар өгөх болно. Бид хайлтанд "Зар" гэсэн мөрийг оруулаад 25-р мөрөнд очно.

Талбайн хувийн зар: Lcom/kauf/marketing/Ad;

Энд зарын ангиллын объектыг хадгалах зар сурталчилгааны талбар үүсгэгдсэн. Шугамын өмнө ### тэмдэг тавьж тайлбар бичнэ. Бид хайлтаа үргэлжлүүлж байна. 423-р мөр:

Шинэ жишээ v3, Lcom/kauf/marketing/Ad;

Энэ нь объект үүсгэх үйл явц юм. Сэтгэгдэл бичье. Бид хайлтаа үргэлжлүүлж, 433, 435, 466, 468, 738, 740, 800, 802 дугаар мөрөнд зар сурталчилгааны ангиллын аргуудын дуудлагуудыг олдог. Сэтгэгдэл бичье. Ийм л юм шиг байна. Хадгалцгаая. Одоо багцыг дахин нэгтгэж, ажиллагаа, сурталчилгаа байгаа эсэхийг шалгах хэрэгтэй. Туршилтын цэвэр байдлын үүднээс бид AndroidManifest.xml-ээс хасагдсан мөрийг буцааж, багцыг угсарч, гарын үсэг зурж, суулгана.

Манай далайн гахай. Зар сурталчилгаа харагдаж байна

Өө! Зар сурталчилгаа нь зөвхөн програмыг ажиллуулж байх үед алга болсон боловч үндсэн цэсэнд үлдсэн бөгөөд бид програм хангамжийг эхлүүлэх үед хардаг. Тэгэхээр түр хүлээнэ үү, гэхдээ нэвтрэх цэг нь MainActivity анги бөгөөд програм ажиллаж байх үед сурталчилгаа алга болсон ч үндсэн цэсэнд үлдсэн тул нэвтрэх цэг өөр байна уу? Жинхэнэ нэвтрэх цэгийг тодорхойлохын тулд AndroidManifest.xml файлыг дахин нээнэ үү. Тийм ээ, энэ нь дараах мөрүүдийг агуулна.

Тэд бидэнд (мөн хамгийн чухал нь Android) android.intent.category.LAUNCHER ангилалаас android.intent.action.MAIN зорилготой (үйл явдал) үүсгэхийн тулд Start нэртэй үйл ажиллагааг эхлүүлэх ёстойг хэлж байна. Энэ үйл явдал нь эхлүүлэгч дээрх програмын дүрс дээр товших үед үүсдэг тул энэ нь нэвтрэх цэгийг, тухайлбал Start классыг тодорхойлдог. Программист эхлээд үндсэн цэсгүй програм бичиж, орох цэг нь стандарт MainActivity анги байсан бөгөөд дараа нь Start ангилалд тайлбарласан цэсийг агуулсан шинэ цонх (үйл ажиллагаа) нэмж, гараар оруулга хийсэн байх магадлалтай. цэг.

Start.smali файлыг нээж, "Зар" гэсэн мөрийг дахин хайж олоорой, бид 153, 155-р мөрөнд FirstAd ангийн тухай дурдсаныг олно. Энэ нь мөн эх кодонд байгаа бөгөөд нэрнээс нь харахад үндсэн дэлгэц дээр зар харуулах үүрэгтэй. Цаашид харцгаая, FirstAd ангийн жишээг үүсгэсэн бөгөөд контекстийн дагуу энэ инстанстай холбоотой зорилго, дараа нь cond_10 шошго, нөхцөлт шилжилтийг яг жишээ үүсгэхээс өмнө хийдэг. ангийн:

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

Програм нь зар сурталчилгааг үндсэн дэлгэц дээр харуулах эсэхийг санамсаргүй байдлаар тооцоолж, хэрэв үгүй ​​бол cond_10 руу шууд очдог. За, түүний даалгаврыг хялбарчилж, нөхцөлт шилжилтийг болзолгүй шилжилтээр солицгооё:

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

Код дотор FirstAd-ийн талаар дурдагдах зүйл байхгүй тул бид файлыг хааж, apktool ашиглан виртуал бамбараа дахин угсардаг. Үүнийг ухаалаг гар утсандаа хуулж, суулгаж, ажиллуул. Voila, бүх зар сурталчилгаа алга болсон тул бид бүгдэд нь баяр хүргэе.

Үр дүн

Энэ нийтлэл нь зөвхөн Android програмыг хакердах, өөрчлөх аргуудын товч танилцуулга юм. Хамгаалалтаа арилгах, ойлгомжгүй кодыг задлан шинжлэх, програмын нөөцийг орчуулах, солих, мөн Android NDK ашиглан бичсэн программуудыг өөрчлөх зэрэг олон асуудал хөшигний ард үлджээ. Гэсэн хэдий ч анхан шатны мэдлэгтэй бол энэ бүгдийг ойлгох нь зөвхөн цаг хугацааны асуудал юм.

Энэ нийтлэлээс та Android програм нь юунаас бүрдэх, APK файлыг хэрхэн нээх, ямар программ ашиглах талаар мэдэх болно.

APK файл гэж юу вэ?

APK нь архивлагдсан гүйцэтгэх боломжтой програмын файлуудад ашиглагддаг Android үйлдлийн системийн формат бөгөөд файлын нэр нь өөрөө юу ч байж болох ч өргөтгөл нь зөвхөн this.apk шиг харагдах ёстой. Бусад үйлдлийн системүүдийн APK аналогууд нь Windows-д .msi, Symbian-д .sis, Linux-д .rpm эсвэл .deb юм.

Дотор нь юу байгааг харцгаая
Үнэн хэрэгтээ, .apk нь ZIP архив тул та WinRAR эсвэл X-plore гар утасны програм гэх мэт ямар ч файлын менежер эсвэл архивлагч ашиглан дотоод төхөөрөмжийг үзэх боломжтой.




Та зөвхөн дотоод нөөцөд харааны хандалт авах боломжтой гэдгийг санах нь зүйтэй.

Бүтэцийг нь авч үзье
.apk дотор бид хэд хэдэн файл, фолдеруудыг харж байгаа бөгөөд тэдгээр нь юунд зориулагдсан болохыг олж мэдье:

  • AndroidManifest.xml нь програмын нэг төрлийн "паспорт" бөгөөд үүнээс та бүх гол зүйл, шаардлага, хувилбар, зөвшөөрөл гэх мэтийг олж мэдэх боломжтой.
  • META-INF энэ файл нь мета өгөгдөл, өөрөөр хэлбэл өгөгдөл, хяналтын нийлбэр, өгөгдөлд хүрэх зам, нөөцийн зам, хяналтын нийлбэр, гэрчилгээний тухай мэдээлэл агуулдаг. Та энэ файлыг дурын текст засварлагчаар нээж болох боловч Notepad++ ашиглахыг зөвлөж байна.
  • Res хавтас нь дүрс, зураг, текст, график интерфейсийн элементүүд гэх мэт програмын бүх нөөц, графикийг агуулдаг. Та мөн хавтас руу хялбархан хандах боломжтой.
  • classes.dex нь Dalvik VM виртуал машинаар гүйцэтгэдэг програмын шууд код бөгөөд та зөвхөн .apk-г задлах замаар энэ файлын дотор юу байгааг харж болно, бид энэ талаар бусад нийтлэлд ярих болно. resources.arsc - эмхэтгэсэн XML файл, энэ файл нь хөтөлбөрт хамрагдсан бүх нөөцийн талаархи мэдээллийг агуулдаг.
  • lib - эх номын сан бүхий хавтас, нөөцөд зөвхөн тусгай програм ашиглах үед хандах боломжтой. Мөн APK дээр com, org, udk гэх мэт файл, хавтас байж болох ч үргэлж биш.

Одоо дотоод бүтцийг илүү нарийвчлан авч үзье, үүний тулд бидэнд задлах програм, Java болон APK файл хэрэгтэй. .apk-г задлах гол хэрэгсэл нь Apktool боловч энэ програм нь зөвхөн шугаман дээр ажилладаг бөгөөд энэ нь тийм ч тохиромжтой биш юм. Илүү хурдан бөгөөд илүү тохиромжтой задлан шинжлэхийн тулд та APKing ашиглаж болно, энэ нь Apktool хэвээр байгаа боловч контекст цэснээс ажиллах чадвартай.


Тиймээс бид APKing-ийг Windows-д зориулсан ямар ч програмын адил суулгаж, .apk-г сонгоод хулганы баруун товчийг дарж, Shift товчийг нэгэн зэрэг дарсны дараа бид дараахь зүйлийг харах болно.



Мөн шаардлагатай үйлдлийг сонго, жишээлбэл, бүрэн задлах, дараа нь програм нь үйлдлийг дуусгаж, ижил нэртэй хавтас үүсгэх болно.



Фолдерыг нээснээр бид APK файлын бүх нөөцөд хандах боломжтой болно.



Одоо бүх текст файлуудыг засварлах боломжтой бөгөөд үндсэн дүрмийг дагаж мөрдөхийн зэрэгцээ та алдартай Notepad++ програмыг ашиглаж болно, жишээ нь AndroidManifest.xml-г авч үзэх боломжтой.

Би SmartAPKTool програмын талаар дурдсан. Энэ нь өөрчилсөн apk файлуудыг задлах, зиплэх, гарын үсэг зурах боломжтой. Үүний давуу тал нь график интерфэйстэй байх явдал юм. Гэсэн хэдий ч ноцтой дутагдалтай тал бий. SmartAPKTool удаан хугацаанд шинэчлэгдээгүй бөгөөд програм нь Android-ийн хамгийн сүүлийн үеийн хувилбаруудад зориулсан програмуудыг зөв задлах, багцлахгүй байна. Тиймээс, би энд програмыг эдгээр зорилгоор хэрхэн ашиглахыг тайлбарлахыг хичээх болно apktool.

Тайлбар 1.
SmartAPKTool програм нь цуглуулсан apk файлд гарын үсэг зурахад ашиглахад тохиромжтой хэвээр байна.
Тайлбар 2.
Нийтлэлд дурдсан хөтөлбөрүүдийн холбоосууд нь ↓

Програм apktoolграфик интерфэйс байхгүй байна. Энэ нь командын мөртэй ажиллахад дасаагүй хүмүүсийн хувьд сул тал юм. Гэхдээ бас нэг давуу тал бий: SmartAPKTool-ээс ялгаатай нь бид бүх алдааг харах болно, энэ нь бид юу засахаа мэдэх болно гэсэн үг юм.

Хоёр архивыг татаж авцгаая: нэг нь бүх системд, нөгөө нь манай системд зориулагдсан (жишээ нь Windows):

Хоёр архивыг ижил хоосон хавтсанд (бидний жишээнд C:\apktool\) задалцгаая. Түүний агуулга дараах байдлаар харагдах ёстой.

Одооноос эхлэн бид програмыг ашиглаж болно apktool.

Тайлбар 3.
Линуксийн 64 битийн хувилбарын хэрэглэгчид ia32-libs багцыг суулгах шаардлагатай:

sudo apt-get суулгах ia32-libs

Бид задлах шаардлагатай файлыг ижил фолдерт тавьдаг. Жишээлбэл, үүнийг orig.apk гэж нэрлэе
Shift товчийг удаан дарж хавтсанд байгаа хоосон зай дээр хулганы баруун товчийг дарна уу (файл дээр дарж болохгүй!). Үүний дараа "Командын цонхыг нээх" -ийг сонгоно уу. Гарч ирэх консол дээр дараахыг бичнэ үү:

apktool orig.apk кодыг тайлах

Файлыг задлах болно:

Одоо бидэнд C:\apktool\ директор дотор задлагдаагүй програмтай хавтас байна. Энэ нь эх файлтай ижил нэртэй бөгөөд өргөтгөлийг хасч: C:\apktool\orig\ . Бид Android нийтлэлд тайлбарласны дагуу эх файлуудыг өөрчилж болно: нэг утсан дээр хоёр ижил програмыг хэрхэн суулгах талаар. Өөрчлөлт хийсний дараа бид эх файлуудыг apk-д багцлан програмын хуулбарыг цуглуулах болно:

apktool build orrig result.apk

Энд result.apk нь бидний хуулбар бүтээхэд зориулж гаргасан файлын нэр юм. Хэрэв алдаа байхгүй бол файлыг угсарна:

Үлдсэн хэсэг нь нийтлэлийн хамрах хүрээнээс гадуур байна:

  1. Хэрэв угсрах явцад алдаа гарсан бол тэдгээрийн шалтгааныг олж, засах хэрэгтэй.
  2. Үр дүнд нь гарсан result.apk файлд гарын үсэг зурах л үлдлээ. Үүнийг дээр дурдсанчлан SmartAPKTool ашиглан хийж болно; Үүнтэй холбоотой бүх зүйл зөн совинтой байдаг. Мөн apk файлд гарын үсэг зурах өөр аргууд байдаг.
  3. Хуулбарыг суулгах, эхлүүлэх эсвэл ажиллуулах явцад алдаа гарч болно. Тэд Android SDK-д багтсан adb хэрэгслийг ашиглан баригдах хэрэгтэй.

Та програмд ​​гарын үсэг зурах ёстой, эс тэгвээс програм суулгахгүй. Алдаа нь тийм ч олон тохиолддоггүй бөгөөд тэдгээрийг үүсгэдэг хамгийн нийтлэг асуудлуудыг нийтлэлд тайлбарласан болно

Андройд төхөөрөмжид зориулсан янз бүрийн програм хангамжийг ашиглах явцад заримдаа үйлдлийн системд суулгасан системийн програмуудыг ямар нэг байдлаар өөрчлөх шаардлагатай болдог. Энэ материалд бид энэ асуудлыг нарийвчлан авч үзэх болно.

Мэдээжийн хэрэг, та системийн APK файлыг зөв, тогтвортой ажиллуулахын тулд задалж, дахин угсрах хэрэгтэй. Үүний тулд юу хийх хэрэгтэйг алхам алхамаар олж мэдье.

Эхлээд та системийн APK файлуудыг задлах процессыг хийх хэрэгтэй. Үүнийг хэрхэн яаж хийхийг бид танд хэлэх болно.

Тиймээс .apk файлыг задлан задалсан. Бидний сонирхож буй програмд ​​дүн шинжилгээ хийцгээе, жишээ нь ойлгомжтой байхын тулд нэрийг нь авч үзье. хүрээ- res. apk. Бид үүнийг анхны хэрэглээ гэж толгойдоо санаж байна.

Бид програмд ​​шаардлагатай бүх өөрчлөлтийг хийсэн гэж бодъё. Бид APK файлуудын бүх талын талаар дэлгэрэнгүй ярих болно. Одоо та үүнийг буцааж боох хэрэгтэй. Дууссан багцалсан програмыг өөрчилсөн програм 2 гэж санацгаая.

Одоо бид яагаад программуудыг анхны болон өөрчилсөн байдлаар санах шаардлагатай байсныг тайлбарлах болно 2. ApkTool програмаар эмхэтгэсэн програм (эсвэл SmartApkTool гэх мэт график хэрэглэгчийн интерфэйсийн өргөтгөл ашиглан) ажиллахгүй, гэхдээ энэ нь асуудал биш юм. Бид дараах үйлдлүүдийг гүйцэтгэдэг.

Ийм файлуудыг APK руу буцааж цуглуулах нь маш энгийн. Үүнийг хийхийн тулд та apktool-ийг тохирох туг далбаатайгаар ажиллуулж, дотор нь задалсан програмтай хавтас руу шилжүүлэх хэрэгтэй. Жишээлбэл, хэрэв бидэнд apktool-тэй ижил директорт байрлах програмын хавтас байгаа бол тушаал дараах байдалтай харагдана.

Бүрхүүл

java -jar apktool.jar b програм

java - jar apktool .jar b програм

Угсарсны дараа дууссан APK файл нь лавлахад байрлана програм/бүтээл. Дараа нь та APK дээр гарын үсэг зурах хэрэгтэй. Энэ нь дибаг хийхийг хориглосон төхөөрөмж дээр програм ажиллаж байгаа эсэхийг баталгаажуулахын тулд хийгддэг. Өөрөөр хэлбэл, ийм төхөөрөмж дээр гарын үсэг зураагүй програмуудыг ажиллуулахыг хориглоно. Та дижитал гэрчилгээ болон файлд гарын үсэг зурах журмын талаар эндээс уншиж болно.

Файлд гарын үсэг зурах нь маш энгийн: үүнд зориулсан signapk гэж нэрлэгддэг тусгай хэрэгсэл байдаг. Үүнийг эхлээд гэрчилгээг аргумент болгон дамжуулж, дараа нь програм руу хүрэх зам, эцэст нь гарын үсэг зурсан програмын замыг (үр дүн, хаана хадгалах вэ) эхлүүлэх ёстой. Энэ нь иймэрхүү харагдаж байна:

Бүрхүүл

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

Ийм гэрчилгээг хаанаас авах вэ гэж асууж байна уу? Гэрчилгээг интернетээс олж болно. Эсвэл өөрөө үүсгэж болно. Шаардлагатай бүх файлыг тохируулах, үүсгэх талаар дэлгэрэнгүй зааврыг олж болно, жишээлбэл, .

Дүгнэлт

Таны харж байгаагаар APK файлыг задлах, угсрах нь нэлээд энгийн процесс бөгөөд үүнийг автоматжуулж, судлаачийн ажлыг хөнгөвчлөх боломжтой. Dalvik виртуал машин нь өөрөө сурах, нээхэд хялбар байдаг бөгөөд энэ нь нэг талаас хөгжүүлэгчдэд нэвтрэх саадыг багасгаж, нөгөө талаас Android платформ дээрх хулгайн ийм их хувийг эзэлдэг гол шалтгаан юм. Энэ нь зарим талаараа ийм учраас тоглоом хөгжүүлэгчид, тухайлбал, сонирхолтой тоглоомуудыг хуйвалдаантай гаргах сонирхолгүй байдаг. Хэрэглэгчдийн одоогийн хандлагыг харгалзан фермүүдийг бие биентэйгээ гайхалтай төстэй хандиваар холбох нь илүү ашигтай юм. Тиймээс бид програм худалдаж авч, хөгжүүлэгчдийг дэмжиж, үр дүнд нь сонирхолтой контентыг олж авдаг. Гэхдээ хандив өгөх шаардлагагүй!

Бүгдэд нь баярлалаа, дахин уулзацгаая.