Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Java e rindërtimit të aplikacionit android për Windows. Një mënyrë e thjeshtë për të modifikuar një aplikacion Android

Ndonjëherë disa aplikacione në Android nuk i përshtaten përdoruesit për ndonjë arsye. Një shembull janë reklamat e bezdisshme. Dhe ndodh kështu - të gjithë janë të mirë në program, por vetëm përkthimi në të është ose i shtrembër, ose mungon plotësisht. Ose, për shembull, programi është provë, por nuk ka asnjë mënyrë për të marrë versionin e plotë. Si të ndryshoni situatën?

Prezantimi

Në këtë artikull, ne do të flasim se si të çmontojmë një APK me një aplikacion, të shikojmë strukturën e tij të brendshme, të çmontojmë dhe dekompilojmë bajtkodin, dhe gjithashtu të përpiqemi të bëjmë disa ndryshime në aplikacione që mund të na sjellin këtë ose atë përfitim.

Për t'i bërë të gjitha këto vetë, do t'ju duhet të paktën një njohuri bazë për gjuhën Java, në të cilën janë shkruar aplikacionet Android, dhe gjuhën XML, e cila përdoret kudo në Android - nga përshkrimi i vetë aplikacionit dhe të drejtat e tij të aksesit deri te ruajtjen e vargjeve që do të shfaqen në ekran. Do t'ju duhet gjithashtu aftësia për të trajtuar softuerin e specializuar të konsolës.

Pra, cila është paketa APK në të cilën shpërndahet absolutisht i gjithë softueri për Android?

Dekompilimi i aplikacionit

Në këtë artikull, ne kemi punuar vetëm me kodin e aplikacionit të çmontuar, megjithatë, nëse bëni ndryshime më serioze në aplikacione të mëdha, do të jetë shumë më e vështirë të kuptoni kodin smali. Për fat të mirë, ne mund ta dekompilojmë kodin dex në kodin Java, i cili, edhe pse nuk është origjinal dhe i pa kompilueshëm, është shumë më i lehtë për t'u lexuar dhe kuptuar logjikën e aplikacionit. Për ta bërë këtë, na duhen dy mjete:

  • dex2jar - përkthyes i bajtkodit Dalvik në bajtkod JVM, në bazë të të cilit mund të marrim kodin Java;
  • jd-gui është vetë një dekompilues që ju lejon të merrni kodin Java të lexueshëm nga bytecode JVM. Përndryshe, mund të përdorni Jad (www.varanecas.com/jad); megjithëse është mjaft i vjetër, në disa raste gjeneron kod më të lexueshëm se Jd-gui.

Ato duhet të përdoren si kjo. Së pari, ne nisim dex2jar, duke specifikuar rrugën drejt paketës apk si argument:

%dex2jar.sh mail.apk

Si rezultat, paketa mail.jar Java do të shfaqet në drejtorinë aktuale, e cila tashmë mund të hapet në jd-gui për të parë kodin Java.

Rregullimi i paketave APK dhe marrja e tyre

Një paketë aplikacioni Android është në thelb një skedar i rregullt ZIP që nuk kërkon ndonjë mjet të veçantë për të parë përmbajtjen dhe për të shpaketuar. Mjafton të keni një arkivues - 7zip për Windows ose tastierë unzip në Linux. Por kjo ka të bëjë me mbështjellësin. Çfarë ka brenda? Brenda, ne përgjithësisht kemi strukturën e mëposhtme:

  • META-INF/- përmban një certifikatë dixhitale të aplikacionit, që vërteton krijuesin e tij, dhe kontrolle të skedarëve të paketës;
  • res/ - burime të ndryshme që aplikacioni përdor në punën e tij, si imazhe, një përshkrim deklarativ i ndërfaqes dhe të dhëna të tjera;
  • AndroidManifest.xml- përshkrimi i aplikacionit. Kjo përfshin, për shembull, listën e lejeve të kërkuara, versionin e kërkuar të Android dhe rezolucionin e kërkuar të ekranit;
  • klasat.dex- bitekodi i përpiluar i aplikacionit për makinën virtuale Dalvik;
  • burimet.arsc- gjithashtu burime, por të një lloji tjetër - në veçanti, vargjet (po, ky skedar mund të përdoret për Rusifikimin!).

Skedarët dhe drejtoritë e listuara janë, nëse jo në të gjitha, atëherë, ndoshta, në shumicën dërrmuese të APK-ve. Sidoqoftë, ka disa skedarë/drejtori më pak të zakonshme që ia vlen të përmenden:

  • aseteve- analog i burimeve. Dallimi kryesor është se për të hyrë në një burim, duhet të dini identifikuesin e tij, ndërsa lista e aseteve mund të merret në mënyrë dinamike duke përdorur metodën AssetManager.list() në kodin e aplikacionit;
  • lib- Bibliotekat vendase Linux të shkruara me ndihmën e NDK (Native Development Kit).

Ky direktori përdoret nga prodhuesit e lojërave, ku ata vendosin motorin e tyre të lojës të shkruar në C/C++, si dhe nga krijuesit e aplikacioneve me performancë të lartë (për shembull, Google Chrome). Kuptoi pajisjen. Por si të merrni skedarin e paketës së aplikacionit të interesit? Meqenëse nuk është e mundur të merrni skedarë APK nga pajisja pa rrënjë (ato janë në drejtorinë / të dhëna / aplikacion), dhe rrënjosja nuk këshillohet gjithmonë, ekzistojnë të paktën tre mënyra për të marrë skedarin e aplikacionit në kompjuter:

  • Shtesa e Shkarkuesit APK për Chrome;
  • Aplikacioni i vërtetë APK Leecher;
  • hosting të ndryshëm të skedarëve dhe warezniki.

Cilin të përdorni është çështje shije; ne preferojmë të përdorim aplikacione të veçanta, kështu që do të përshkruajmë përdorimin e Real APK Leecher, veçanërisht pasi është shkruar në Java dhe, në përputhje me rrethanat, do të funksionojë edhe në Windows, madje edhe në nix.

Pas fillimit të programit, duhet të plotësoni tre fusha: Email, Fjalëkalim dhe ID e pajisjes - dhe zgjidhni një gjuhë. Dy të parat janë posta elektronike dhe fjalëkalimi i llogarisë suaj Google që përdorni në pajisje. E treta është ID e pajisjes dhe mund ta merrni duke thirrur kodin në telefonues # #8255## dhe më pas gjetja e linjës Device ID. Kur plotësoni, duhet të vendosni vetëm ID-në pa prefiksin android.

Pas plotësimit dhe ruajtjes, shpesh shfaqet mesazhi "Gabim gjatë lidhjes me serverin". Nuk ka të bëjë fare me Google Play, ndaj mos ngurroni ta shpërfillni atë dhe të kërkoni paketa që ju interesojnë.

Rishikimi dhe modifikimi

Le të themi se keni gjetur një paketë për të cilën jeni të interesuar, e keni shkarkuar atë, e shpaketoni ... dhe kur u përpoqët të shikonit disa skedarë XML, u habitët kur zbuluat se skedari nuk është një skedar teksti. Si ta dekompiloni atë dhe si të punoni me paketat në përgjithësi? A është vërtet e nevojshme të instaloni SDK-në? Jo, nuk keni nevojë të instaloni SDK. Në fakt, për të gjitha hapat për të shpaketuar, modifikuar dhe paketuar paketat APK, nevojiten mjetet e mëposhtme:

  • arkivues ZIP për paketim dhe paketim;
  • i vogël- montues/çmontues i bytekodit të makinës virtuale Dalvik (code.google.com/p/smali);
  • aapt- një mjet për paketimin e burimeve (si parazgjedhje, burimet ruhen në formë binare për të optimizuar performancën e aplikacionit). Përfshihet me Android SDK, por mund të merret veçmas;
  • Nënshkrues- një mjet për nënshkrimin dixhital të një pakete të modifikuar (bit.ly/Rmrv4M).

Ju mund t'i përdorni të gjitha këto mjete veç e veç, por kjo është e papërshtatshme, kështu që është më mirë të përdorni softuer të nivelit më të lartë të ndërtuar mbi bazën e tyre. Nëse jeni në Linux ose Mac OS X, ekziston një mjet i quajtur apktool. Kjo ju lejon të shpaketoni burimet në formën e tyre origjinale (përfshirë skedarët binar XML dhe arsc), të rindërtoni paketën me burime të modifikuara, por nuk di të nënshkruajë paketat, kështu që do t'ju duhet të ekzekutoni manualisht programin e nënshkruesit. Përkundër faktit se programi është shkruar në Java, instalimi i tij është mjaft jo standard. Së pari ju duhet të merrni vetë skedarin 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 $ eksport PATH=~/bin:$PATH

Nëse punoni në Windows, atëherë ekziston një mjet i shkëlqyer për të i quajtur Virtual Ten Studio, i cili gjithashtu grumbullon të gjitha këto mjete (përfshirë vetë apktool), por në vend të një ndërfaqeje CLI, ai i siguron përdoruesit një ndërfaqe grafike intuitive me të cilën mund të kryeni operacione për zbërthimin, çmontimin dhe dekompilimin me disa klikime. Ky mjet është Donation-ware, domethënë dritaret ndonjëherë shfaqen me një propozim për të marrë një licencë, por kjo, në fund të fundit, mund të tolerohet. Nuk ka kuptim ta përshkruani atë, sepse mund ta kuptoni ndërfaqen në pak minuta. Por apktool, për shkak të natyrës së tij të konsolës, duhet të diskutohet më në detaje.

Merrni parasysh opsionet e apktool. Shkurtimisht, ekzistojnë tre komanda kryesore: d (deshifroni), b (ndërtoni) dhe if (instaloni kornizën). Nëse gjithçka është e qartë me dy komandat e para, atëherë çfarë bën i treti, operatori i kushtëzuar? Ai shpaketon kornizën e specifikuar të ndërfaqes së përdoruesit, e cila nevojitet kur zbërtheni një paketë sistemi.

Konsideroni opsionet më interesante të komandës së parë:

  • -s- mos i çmontoni skedarët dex;
  • -r- mos i shpaketoni burimet;
  • -b- mos futni informacionin e korrigjimit në rezultatet e çmontimit të skedarit dex;
  • --kornizë-rrugë- përdorni kornizën e specifikuar të UI në vend të apktool-it të integruar. Tani merrni parasysh disa opsione për komandën b:
  • -f- montim i detyruar pa kontrolluar ndryshimet;
  • -a- specifikoni rrugën për aapt (mjet për ndërtimin e arkivit APK) nëse për ndonjë arsye dëshironi ta përdorni nga një burim tjetër.

Përdorimi i apktool është shumë i thjeshtë, gjithçka që duhet të bëni është të specifikoni një nga komandat dhe shtegun për në APK, për shembull:

$ apktool d mail.apk

Pas kësaj, të gjithë skedarët e paketës së nxjerrë dhe të çmontuar do të shfaqen në drejtorinë e postës.

Përgatitja. Çaktivizo reklamat

Teoria është, sigurisht, e mirë, por pse është e nevojshme nëse nuk dimë çfarë të bëjmë me paketën e papaketuar? Le të përpiqemi ta zbatojmë teorinë për përfitimin tonë, përkatësisht, modifikojmë disa softuer që të mos na shfaqin reklama. Për shembull, le të jetë Virtual Torch - një pishtar virtual. Për ne, ky softuer është i përsosur, sepse është plot me reklama të bezdisshme dhe është mjaft i thjeshtë për të mos humbur në egërsinë e kodit.


Pra, duke përdorur një nga metodat e mësipërme, shkarkoni aplikacionin nga tregu. Nëse vendosni të përdorni Virtuous Ten Studio, thjesht hapni skedarin APK në aplikacion dhe zbërthejeni atë, për të cilin krijoni një projekt (File -> Projekti i ri), pastaj zgjidhni Import File nga menyja e kontekstit të projektit. Nëse zgjedhja juaj ra në apktool, atëherë mjafton të ekzekutoni një komandë:

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

Pas kësaj, një pemë skedari do të shfaqet në drejtorinë com.kauf.particle.virtualtorch, e ngjashme me atë të përshkruar në seksionin e mëparshëm, por me një drejtori shtesë smali në vend të skedarëve dex dhe një skedari apktool.yml. I pari përmban kodin e çmontuar të skedarit dex të ekzekutueshëm të aplikacionit, i dyti përmban informacionin e shërbimit të nevojshëm nga apktool për të mbledhur paketën përsëri.

Vendi i parë që duhet të shohim është, sigurisht, AndroidManifest.xml. Dhe këtu menjëherë takojmë rreshtin e mëposhtëm:

Është e lehtë të merret me mend se ajo është përgjegjëse për dhënien e lejeve të aplikacionit për të përdorur lidhjen e internetit. Në fakt, nëse thjesht duam të heqim qafe reklamat, me shumë mundësi do të na mjaftojë të ndalojmë aplikacionin nga interneti. Le të përpiqemi ta bëjmë. Fshini rreshtin e specifikuar dhe provoni të përpiloni softuerin duke përdorur apktool:

$ apktool b com.kauf.particle.virtualtorch

Skedari APK që rezulton do të shfaqet në drejtorinë com.kauf.particle.virtualtorch/build/. Megjithatë, nuk mund të instalohet sepse nuk ka një nënshkrim dixhital dhe kontrolle të skedarëve (thjesht nuk ka një direktori META-INF/). Ne duhet ta nënshkruajmë paketën me programin apk-signer. Nisur. Ndërfaqja përbëhet nga dy skeda - në të parën (Key Generator) ne krijojmë çelësa, në të dytën (APK Signer) ne nënshkruajmë. Për të krijuar çelësin tonë privat, plotësoni fushat e mëposhtme:

  • Skedari i synuar- skedari dalës i dyqanit të çelësave; zakonisht ruan një palë çelësa;
  • Fjalëkalimi dhe Konfirmo- fjalëkalimi për ruajtje;
  • Alias- emri i çelësit në depo;
  • Fjalëkalimi i pseudonimit dhe Konfirmo- fjalëkalimi i çelësit sekret;
  • Vlefshmëria- Periudha e vlefshmërisë (në vite). Vlera e paracaktuar është optimale.

Fushat e mbetura, në përgjithësi, janë opsionale - por duhet të plotësoni të paktën një.


PARALAJMËRIM

Për të nënshkruar një aplikacion me apk-signer, duhet të instaloni Android SDK dhe të specifikoni rrugën e plotë drejt tij në cilësimet e aplikacionit.

I gjithë informacioni jepet vetëm për qëllime informative. As redaktorët dhe as autori nuk janë përgjegjës për ndonjë dëm të mundshëm të shkaktuar nga materialet e këtij artikulli.

Tani mund të nënshkruani APK-në me këtë çelës. Në skedën APK Signer, zgjidhni skedarin e krijuar rishtazi, futni fjalëkalimin, pseudonimin kryesor dhe fjalëkalimin për të, më pas gjeni skedarin APK dhe klikoni me guxim butonin "Sign". Nëse gjithçka shkon mirë, paketa do të nënshkruhet.

INFO

Meqenëse e kemi nënshkruar paketën me çelësin tonë, ajo do të jetë në konflikt me aplikacionin origjinal, që do të thotë se kur të përpiqemi të përditësojmë softuerin përmes tregut, do të kemi një gabim.

Vetëm softueri i palëve të treta ka nevojë për një nënshkrim dixhital, kështu që nëse po modifikoni aplikacionet e sistemit që janë instaluar duke i kopjuar në drejtorinë /system/app/, atëherë nuk keni nevojë t'i nënshkruani ato.

Pas kësaj, ne e hedhim paketën në smartphone, instalojmë dhe ekzekutojmë. Voila, reklama është zhdukur! Në vend të kësaj, megjithatë, u shfaq një mesazh se ne nuk kemi internet ose nuk kemi lejet e duhura. Në teori, kjo mund të jetë e mjaftueshme, por mesazhi duket i bezdisshëm dhe, për të qenë i sinqertë, thjesht patëm fat me një aplikim budalla. Një softuer i shkruar mirë ka shumë të ngjarë të qartësojë kredencialet e tij ose të kontrollojë për një lidhje interneti dhe përndryshe thjesht refuzon të fillojë. Si të jesh në këtë rast? Sigurisht, modifikoni kodin.

Në mënyrë tipike, autorët e aplikacioneve krijojnë klasa të veçanta për shfaqjen e reklamave dhe metodat e thirrjeve të këtyre klasave gjatë lëshimit të aplikacionit ose një prej "aktiviteteve" të tij (me fjalë të thjeshta, ekranet e aplikacionit). Le të përpiqemi të gjejmë këto klasa. Shkojmë te drejtoria smali, pastaj com (në org ekziston vetëm biblioteka grafike e hapur cocos2d), pastaj kauf (pikërisht aty, sepse ky është emri i zhvilluesit dhe i gjithë kodi i tij është atje) - dhe ja ku është, drejtoria e marketingut. Brenda gjejmë një mori skedarësh me ekstensionin smali. Këto janë klasa, dhe më e dalluara prej tyre është klasa Ad.smali, me emrin e së cilës është e lehtë të merret me mend se shfaq reklama.

Ne mund të ndryshonim logjikën e punës së tij, por do të ishte shumë më e lehtë të hiqnin marrëzi thirrjet për ndonjë nga metodat e tij nga vetë aplikacioni. Prandaj, ne dalim nga direktoria e marketingut dhe shkojmë te drejtoria fqinje e grimcave, dhe më pas te virtual Torch. Skedari MainActivity.smali meriton vëmendje të veçantë këtu. Kjo është një klasë standarde Android që gjenerohet nga Android SDK dhe vendoset si pikë hyrëse në aplikacion (analog me funksionin kryesor në C). Hapni skedarin për redaktim.

Brenda është kodi smali (assembler lokal). Është mjaft konfuze dhe e vështirë për t'u lexuar për shkak të natyrës së tij të nivelit të ulët, kështu që ne nuk do ta studiojmë atë, por thjesht do t'i gjejmë të gjitha përmendjet e klasës Ad në kod dhe do t'i komentojmë ato. Ne futemi në vargun "Ad" në kërkim dhe arrijmë në rreshtin 25:

Reklamë private në terren:Lcom/kauf/marketing/Ad;

Këtu, krijohet një reklamë në terren për të ruajtur një objekt të klasës Ad. Ne komentojmë duke vendosur shenjën ### përpara rreshtit. Ne vazhdojmë kërkimin. Rreshti 423:

Instance e re v3, Lcom/kauf/marketing/Ad;

Këtu krijohet objekti. Ne komentojmë. Ne vazhdojmë kërkimin dhe gjejmë në linjat 433, 435, 466, 468, 738, 740, 800 dhe 802 thirrjet e metodave të klasës Ad. Ne komentojmë. Dukej se kaq është. Ne kursejmë. Tani paketa duhet të mblidhet përsëri dhe të kontrollohet për performancën e saj dhe praninë e reklamave. Për pastërtinë e eksperimentit, ne e kthejmë linjën e hequr nga AndroidManifest.xml, e mbledhim paketën, e nënshkruajmë dhe e instalojmë.

Derri ynë gini. Reklamim i dukshëm

Op-pa! Reklamimi u zhduk vetëm gjatë ekzekutimit të aplikacionit, por mbeti në menynë kryesore, të cilën e shohim kur lëshojmë softuerin. Pra, prisni, por pika e hyrjes është klasa MainActivity, dhe reklama u zhduk gjatë ekzekutimit të aplikacionit, por mbeti në menunë kryesore, pra pika e hyrjes është e ndryshme? Për të zbuluar pikën e vërtetë të hyrjes, ne rihapim skedarin AndroidManifest.xml. Dhe po, ai përmban rreshtat e mëposhtëm:

Ata na thonë (dhe më e rëndësishmja, androidi) se aktiviteti me emrin Start duhet të nisë në përgjigje të gjenerimit të synimit (ngjarjes) android.intent.action.MAIN nga kategoria android.intent.category.LAUNCHER. Kjo ngjarje gjenerohet kur trokitni lehtë mbi ikonën e aplikacionit në lëshuesin, kështu që ajo përcakton pikën e hyrjes, përkatësisht klasën Start. Me shumë mundësi, programuesi fillimisht shkroi një aplikacion pa një meny kryesore, pika hyrëse në të cilën ishte klasa standarde MainActivity, dhe më pas shtoi një dritare (aktivitet) të re që përmban menunë dhe të përshkruar në klasën Start, dhe e bëri manualisht një hyrje. pikë.

Hapim skedarin Start.smali dhe përsëri kërkojmë rreshtin "Ad", gjejmë në rreshtat 153 dhe 155 përmendjen e klasës FirstAd. Është gjithashtu në kodin burimor dhe, duke gjykuar nga emri, është përgjegjës për shfaqjen e reklamave në ekranin kryesor. Ne shikojmë më tej, ekziston një krijimi i një shembulli të klasës FirstAd dhe një qëllim, sipas kontekstit që lidhet me këtë shembull, dhe më pas etiketës cond_10, kalimi i kushtëzuar në të cilin kryhet pikërisht përpara krijimit të një shembulli të klasës. :

If-ne p1, v0, :cond_10 .rreshti 74 i ri-instance v0, Landroid/content/Intent; ... :cond_10

Me shumë mundësi, programi disi llogarit rastësisht nëse është e nevojshme të shfaqen reklama në ekranin kryesor, dhe nëse jo, hidhet drejtpërdrejt në cond_10. Ok, le të thjeshtojmë detyrën e saj dhe të zëvendësojmë tranzicionin e kushtëzuar me një të pakushtëzuar:

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

Nuk ka më përmendje të FirstAd në kod, kështu që ne mbyllim skedarin dhe ri-montim pishtarin tonë virtual duke përdorur apktool. Kopjoni në smartphone, instaloni, ekzekutoni. Voila, të gjitha reklamat janë zhdukur, urime për të gjithë ne.

Rezultatet

Ky artikull është vetëm një hyrje e shkurtër e metodave të hapjes dhe modifikimit të aplikacioneve Android. Shumë çështje mbetën prapa skenave, si heqja e mbrojtjes, analizimi i kodit të turbullt, përkthimi dhe zëvendësimi i burimeve të aplikacionit, si dhe modifikimi i aplikacioneve të shkruara duke përdorur Android NDK. Sidoqoftë, të kesh njohuri themelore, të kuptuarit e gjithë kësaj është vetëm çështje kohe.

Ndodh që pas lëshimit të aplikacionit, kodi burimor i tij zhduket diku. A është e vërtetë që kjo ndodh gjatë gjithë kohës? Dhe nuk mbetet gjë tjetër veçse ta dekompilojmë dhe të rregullojmë disa qindra rreshta kodi, dhe e gjithë kjo duhet bërë sa më shpejt që të jetë e mundur.

Kështu që unë kisha për detyrë të modifikoja aplikacionin duke pasur vetëm apk-në e tij. Dhe ata që janë përfshirë në dekompilimin e aplikacioneve e dinë se sa e vështirë është përpilimi i tij më vonë.

Dekompilimi

Për Android "dhe ekzistojnë shërbimet e mëposhtme:
  • ApkTool për dekompilimin e burimeve.
  • Dex2Jar për të kthyer dex në kavanoz.
  • JD-GUI për të marrë burime nga jar.
  • Unë rekomandoj gjithashtu JAD, disa vende dekompilohen më mirë se JD-GUI.
Ka informacion të mjaftueshëm për përdorimin e tyre në internet.

Nëse përpiqeni të përpiloni aplikacionin pas dekompilimit, atëherë ka shumë të ngjarë që nuk do të përpilohet për shkak të gabimeve, është veçanërisht e vështirë të dekompiloni ciklet dhe kushtet. Disa gabime korrigjohen lehtësisht, por përsëri, nuk do të jetë e lehtë të kuptosh shumë kërcime të kushtëzuara, dhe kur numri i tyre është më shumë se njëqind apo edhe disa mijëra, atëherë kjo mënyrë për të rivendosur aplikacionin humbet efektivitetin e saj, është më shpejt për të shkruar gjithçka përsëri.

Mbi këtë mund të përfundoni eksperimentet me dekompilim, por dembelizmi është motori i përparimit dhe lindi një metodë e re.

Ripërcaktimi i klasave

Pra, jar është një bibliotekë, kështu që pse të mos e përfshini atë në një projekt të ri? E hedhim në dosjen libs, trashëgojmë nga aktiviteti kryesor dhe e përpilojmë. Gjithçka funksionon, gjëja kryesore është që emrat e klasave të mos përputhen, kështu që emrat e paketave duhet të ndryshojnë, përndryshe BuildConfig dhe R e krijuar të paktën do të përputhen.

Në këtë mënyrë, ju mund të trashëgoni nga Activity, Service, BroadcastReceiver dhe, ndoshta, disa klasa të tjera të deklaruara në manifest, gjithashtu do t'ju duhet të specifikoni emrat e klasave të reja në manifest, përndryshe ato nuk do të përdoren.

Tani mund të ripërcaktoni funksionet virtuale, por kjo është e gjitha, veçanërisht pasi fjala kyçe përfundimtare nuk do t'ju lejojë ta bëni këtë dhe të trashëgoni gjithashtu, kështu që le të vazhdojmë.

Zëvendësimi i klasave

Pas zbërthimit të bibliotekës së kavanozit, marrim skedarë të klasës, këto janë klasa të përpiluara, vërejmë se gjatë ndërtimit të projektit, të njëjtat skedarë të klasës janë në dosjen bin / klasa, por çka nëse vendosim skedarë nga biblioteka atje ...

Jo gjithçka është aq e thjeshtë, së pari ju duhet të përpiloni projektin. Për të përdorur klasat e aplikacionit origjinal, duhet ta bashkëngjitni disi me projektin, por mos e eksportoni. Kjo bëhet thjesht: nga dosja libs, vetë Eclipse eksporton biblioteka, kështu që ne e zhvendosim bibliotekën jar në dosjen lib dhe e lidhim atë me projektin, në Eclipse është Project-> Preferences-> Java Build Path-> Libraries-> Shto Kavanoza ... më tej në skedën Porosi dhe eksport, duhet të sigurohesh që kutia e kontrollit nuk është vendosur, sepse nuk kemi nevojë të eksportojmë bibliotekën, gjithçka do të jetë në skedarët e klasës.

Tani marrim një klasë nga burimet e aplikacionit të dekompiluar, rregullojmë gabimet e përpilimit në të, shtojmë, për shembull, duke shfaqur një dialog për t'u siguruar që klasa e re është përdorur. Më pas, pastrojmë projektin, në Eclipse është Project-> Clean, kopjojmë skedarët e klasës në dosjen bin / classes, ndërtojmë projektin dhe gjithçka funksionon!

Me ndërtimet e ardhshme të projektit, nuk ka nevojë ta pastroni atë, kështu që përdorimi i kësaj metode është mjaft i përshtatshëm. Për ta bërë më të lehtë rregullimin e gabimeve pas dekompilimit, përdora burime të marra nga JD-GUI dhe JAD, zakonisht kjo ishte e mjaftueshme.

Por tani është koha për të përpiluar versionin e lëshimit, dhe për të, natyrisht, përdoret një pengues dhe do të japë qindra gabime për ndeshjet e emrave të klasës dhe referenca të pazgjidhura. Tani është koha për të hequr klasat që janë zëvendësuar nga skedarët e klasës së përpiluar, pas së cilës nuk duhet të ketë gabime. Një veçori tjetër e pakëndshme e ndërtimit të lëshimit është se ju duhet të pastroni projektin çdo herë dhe të kopjoni skedarët e klasës, përndryshe ato zhduken diku.

konkluzioni

Vetëm skedarët e modifikueshëm dekompilohen në këtë mënyrë, gjë që eliminon nevojën për korrigjimin e gabimeve në të gjitha burimet dhe përmirëson besueshmërinë, pasi e gjithë pjesa e kodit do t'i nënshtrohet procesit të dekompilimit - rregullimit - kompilimit.

Me një probabilitet të lartë nuk do të jetë e mundur të fshihen të gjitha gjurmët e aplikacionit origjinal, emrat e klasave jo të përziera si Aktiviteti dhe Shërbimi, si dhe emrat e paketave të tyre, do të ruhen dhe do të jenë të disponueshëm pas dekompilimit. aplikacioni i modifikuar, por për versionet pirate ky nuk është problem, prandaj ia vlen të mbrohet aplikacioni, metodat e mbrojtjes janë të ngjashme me metodat e tjera të mbrojtjes nga ndryshimet e kodit.

Ndodh që pas lëshimit të aplikacionit, kodi burimor i tij zhduket diku. A është e vërtetë që kjo ndodh gjatë gjithë kohës? Dhe nuk mbetet gjë tjetër veçse ta dekompilojmë dhe të rregullojmë disa qindra rreshta kodi, dhe e gjithë kjo duhet bërë sa më shpejt që të jetë e mundur.

Kështu që unë kisha për detyrë të modifikoja aplikacionin duke pasur vetëm apk-në e tij. Dhe ata që janë përfshirë në dekompilimin e aplikacioneve e dinë se sa e vështirë është përpilimi i tij më vonë.

Dekompilimi

Për Android "dhe ekzistojnë shërbimet e mëposhtme:
  • ApkTool për dekompilimin e burimeve.
  • Dex2Jar për të kthyer dex në kavanoz.
  • JD-GUI për të marrë burime nga jar.
  • Unë rekomandoj gjithashtu JAD, disa vende dekompilohen më mirë se JD-GUI.
Ka informacion të mjaftueshëm për përdorimin e tyre në internet.

Nëse përpiqeni të përpiloni aplikacionin pas dekompilimit, atëherë ka shumë të ngjarë që nuk do të përpilohet për shkak të gabimeve, është veçanërisht e vështirë të dekompiloni ciklet dhe kushtet. Disa gabime korrigjohen lehtësisht, por përsëri, nuk do të jetë e lehtë të kuptosh shumë kërcime të kushtëzuara, dhe kur numri i tyre është më shumë se njëqind apo edhe disa mijëra, atëherë kjo mënyrë për të rivendosur aplikacionin humbet efektivitetin e saj, është më shpejt për të shkruar gjithçka përsëri.

Mbi këtë mund të përfundoni eksperimentet me dekompilim, por dembelizmi është motori i përparimit dhe lindi një metodë e re.

Ripërcaktimi i klasave

Pra, jar është një bibliotekë, kështu që pse të mos e përfshini atë në një projekt të ri? E hedhim në dosjen libs, trashëgojmë nga aktiviteti kryesor dhe e përpilojmë. Gjithçka funksionon, gjëja kryesore është që emrat e klasave të mos përputhen, kështu që emrat e paketave duhet të ndryshojnë, përndryshe BuildConfig dhe R e krijuar të paktën do të përputhen.

Në këtë mënyrë, ju mund të trashëgoni nga Activity, Service, BroadcastReceiver dhe, ndoshta, disa klasa të tjera të deklaruara në manifest, gjithashtu do t'ju duhet të specifikoni emrat e klasave të reja në manifest, përndryshe ato nuk do të përdoren.

Tani mund të ripërcaktoni funksionet virtuale, por kjo është e gjitha, veçanërisht pasi fjala kyçe përfundimtare nuk do t'ju lejojë ta bëni këtë dhe të trashëgoni gjithashtu, kështu që le të vazhdojmë.

Zëvendësimi i klasave

Pas zbërthimit të bibliotekës së kavanozit, marrim skedarë të klasës, këto janë klasa të përpiluara, vërejmë se gjatë ndërtimit të projektit, të njëjtat skedarë të klasës janë në dosjen bin / klasa, por çka nëse vendosim skedarë nga biblioteka atje ...

Jo gjithçka është aq e thjeshtë, së pari ju duhet të përpiloni projektin. Për të përdorur klasat e aplikacionit origjinal, duhet ta bashkëngjitni disi me projektin, por mos e eksportoni. Kjo bëhet thjesht: nga dosja libs, vetë Eclipse eksporton biblioteka, kështu që ne e zhvendosim bibliotekën jar në dosjen lib dhe e lidhim atë me projektin, në Eclipse është Project-> Preferences-> Java Build Path-> Libraries-> Shto Kavanoza ... më tej në skedën Porosi dhe eksport, duhet të sigurohesh që kutia e kontrollit nuk është vendosur, sepse nuk kemi nevojë të eksportojmë bibliotekën, gjithçka do të jetë në skedarët e klasës.

Tani marrim një klasë nga burimet e aplikacionit të dekompiluar, rregullojmë gabimet e përpilimit në të, shtojmë, për shembull, duke shfaqur një dialog për t'u siguruar që klasa e re është përdorur. Më pas, pastrojmë projektin, në Eclipse është Project-> Clean, kopjojmë skedarët e klasës në dosjen bin / classes, ndërtojmë projektin dhe gjithçka funksionon!

Me ndërtimet e ardhshme të projektit, nuk ka nevojë ta pastroni atë, kështu që përdorimi i kësaj metode është mjaft i përshtatshëm. Për ta bërë më të lehtë rregullimin e gabimeve pas dekompilimit, përdora burime të marra nga JD-GUI dhe JAD, zakonisht kjo ishte e mjaftueshme.

Por tani është koha për të përpiluar versionin e lëshimit, dhe për të, natyrisht, përdoret një pengues dhe do të japë qindra gabime për ndeshjet e emrave të klasës dhe referenca të pazgjidhura. Tani është koha për të hequr klasat që janë zëvendësuar nga skedarët e klasës së përpiluar, pas së cilës nuk duhet të ketë gabime. Një veçori tjetër e pakëndshme e ndërtimit të lëshimit është se ju duhet të pastroni projektin çdo herë dhe të kopjoni skedarët e klasës, përndryshe ato zhduken diku.

konkluzioni

Vetëm skedarët e modifikueshëm dekompilohen në këtë mënyrë, gjë që eliminon nevojën për korrigjimin e gabimeve në të gjitha burimet dhe përmirëson besueshmërinë, pasi e gjithë pjesa e kodit do t'i nënshtrohet procesit të dekompilimit - rregullimit - kompilimit.

Me një probabilitet të lartë nuk do të jetë e mundur të fshihen të gjitha gjurmët e aplikacionit origjinal, emrat e klasave jo të përziera si Aktiviteti dhe Shërbimi, si dhe emrat e paketave të tyre, do të ruhen dhe do të jenë të disponueshëm pas dekompilimit. aplikacioni i modifikuar, por për versionet pirate ky nuk është problem, prandaj ia vlen të mbrohet aplikacioni, metodat e mbrojtjes janë të ngjashme me metodat e tjera të mbrojtjes nga ndryshimet e kodit.

Në lidhje me mënyrën e dekompilimit të aplikacioneve për Android, ju e dini që unë ndalova se si të mbledh të gjithë skedarët që dolën gjatë çmontimit të aplikacionit përsëri në APK.

Digresion lirik

Rekomandohet për montim një dosje me skedarë të marrë si rezultat i dekompilimit duke përdorur apktool. Skedarët e kodit, të cilët janë një grup udhëzimesh për makinën virtuale Dalvik, përpilohen përsëri në arkivin e klasës pa asnjë problem. Ndërsa konvertimi nga Dalvik në Java dhe mbrapa mund të çojë në probleme të papajtueshmërisë. Si rezultat, programi nuk do të funksionojë siç duhet. Prandaj, për të modifikuar me sukses programet, dhe jo vetëm për hir të kërkimit, duhet të studioni udhëzimet e Dalvik.

Kuvendi

Mbledhja e skedarëve të tillë përsëri në një APK është mjaft e thjeshtë. Për ta bërë këtë, duhet të ekzekutoni apktool me flamurin e duhur të ndërtimit dhe t'i kaloni shtegun në dosje me aplikacionin e dekompiluar brenda. Për shembull, nëse kemi një dosje aplikacioni që ndodhet në të njëjtën direktori si apktool, atëherë komanda do të duket kështu:

Guaskë

java -jar apktool.jar b app

java - jar apktool .jar b app

Pas montimit, skedari i përfunduar APK do të jetë në drejtori aplikacion/ndërtim. Hapi tjetër është nënshkrimi i APK-së. Kjo bëhet në mënyrë që aplikacioni të funksionojë në pajisjet ku korrigjimi është i ndaluar. Kjo është, lëshimi i aplikacioneve të panënshkruara në pajisje të tilla është i ndaluar. Mund të lexoni më shumë rreth certifikatave dixhitale dhe procedurës për nënshkrimin e skedarëve këtu.

Nënshkrimi i një skedari është shumë i thjeshtë: ekziston një mjet i veçantë për këtë që quhet signapk. Duhet të ekzekutohet duke kaluar certifikatat si argumente, më pas shtegun për në aplikacion dhe në fund shtegun për aplikacionin e nënshkruar (rezultati ku të ruhet). Duket diçka si kjo:

Guaskë

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

Ku mund të marr një certifikatë të tillë, ju pyesni? Certifikatat mund të gjenden në internet. Ose gjenerojeni vetë. Mund të gjenden udhëzime të hollësishme për konfigurimin dhe gjenerimin e të gjithë skedarëve të nevojshëm, për shembull,.

konkluzioni

Siç mund ta shihni, dekompilimi dhe ndërtimi i skedarëve APK është një proces mjaft i thjeshtë, i cili, përveç kësaj, mund të automatizohet, duke e bërë më të lehtë për studiuesin. Vetë makina virtuale Dalvik është gjithashtu e lehtë për t'u mësuar dhe hapur, e cila, nga njëra anë, ul pragun e hyrjes për zhvilluesit, dhe nga ana tjetër, është arsyeja kryesore për një përqindje kaq të madhe të piraterisë në platformën Android. Kjo është pjesërisht arsyeja pse zhvilluesit, për shembull, të lojërave, në përgjithësi nuk janë të interesuar të lëshojnë lojëra interesante me një histori. Është shumë më fitimprurëse me qëndrimin aktual të përdoruesve të thumbash ferma çuditërisht të ngjashme me donacione. Prandaj, ne blejmë aplikacione, mbështesim zhvilluesit dhe, si rezultat, marrim përmbajtje interesante. Por nuk ka absolutisht nevojë për të dhuruar!

Faleminderit të gjithëve, shihemi përsëri.

Kohët e fundit, ju thashë se si të përdorni shërbimet falas në internet (kontrolloni skedarin APK). Sot do të vazhdojmë temën e skedarëve APK dhe do t'ju tregoj se si të dekompiloni një skedar APK në internet.

Por së pari, për ata që nuk janë në dijeni, do t'ju tregoj se çfarë është dekompilimi dhe dekompilimi APK në përgjithësi dhe në cilat raste mund të nevojitet. Koduesit, IT-shnikam dhe kompjuterët e tjerë nuk rekomandohen të lexojnë kapitullin tjetër! Shkoni direkt në përmbledhjen e shërbimeve në internet.

  • Parathënie
  • Çfarë është dekompilimi
  • Dekompiluesi i skedarëve APK në internet
    • Shërbimi Online i Dekompiluesve APK
    • Shërbimi online Javadekompilues
    • Shërbimi online APK-Deguard
  • konkluzionet

Çfarë është një proces dekompilimi ose dekompilimi?

Dekompiluesi përpiqet të përkthejë përsëri binarin e përpiluar në një lloj kodi burimor. Cilësia e këtij operacioni varet drejtpërdrejt nga veçoritë e gjuhës së programimit burimor.

Ekziston një numër i madh i dekompiluesve për gjuhën e programimit Java. Bajtkodi Java përmban shumë informacion. Kjo e bën më të lehtë për dekompiluesin të rivendosë kodin origjinal në një gjendje të ripërpilueshme.

Dekompilimi i APK-së

Siç e dini, aplikacionet Android zakonisht shkruhen në Java. Që nga lëshimi i versionit të parë të Android, programuesit janë përballur me detyrën që jo vetëm të përpilojnë nga skedarët Java në një skedar APK për ta instaluar atë në një pajisje Android, por edhe të kryejnë veprimin e kundërt, d.m.th. dekompiloni skedarin APK.

Pse keni nevojë të dekompiloni skedarin APK?

Përgjigja është e thjeshtë - në mënyrë që së pari të shihni se si funksionon ky apo ai aplikacion Android, dhe natyrisht ta ndryshoni nëse është e nevojshme. Kur dekompiloni një skedar APK (nëse nuk është turbulluar më parë), ju merrni një grup të plotë skedarësh Java me kod burim.

Shumica e njerëzve thjesht duhet të shikojnë përmbajtjen, dhe për ta bërë këtë, shumë mjete të ndryshme duhet të instalohen në kompjuter. Kërkon makinë Java, Android SDK dhe mjete të tilla si: JavaDecompiler, dex2jar, etj. të instaluara. Në fakt, megjithëse është e vështirë, por mënyra më korrekte, mjerisht, kërkon disa njohuri dhe aftësi nga përdoruesi, dhe sigurisht bujë.

A ka ndonjë mënyrë më të lehtë për të dekompiluar një aplikacion Android?

Oh sigurisht. Me zhvillimin e teknologjive cloud, janë shfaqur shërbime falas në internet, të cilat tani do t'i diskutoj.

Dekompiloni APK-në në internet me Javadekompilues

Le të fillojmë rishikimin tonë me një shërbim online. Ky mjet bazohet në versionin offline të dekompiluesit Jadx.

1. Shkojmë në faqen e internetit Javadecompilers, klikojmë butonin "Browse" dhe zgjedhim aplikacionin e kërkuar.

2. Klikoni në butonin "Ngarko dhe Dekompiloje".

Dekompiluesit Java

3. Pas disa minutash (në varësi të madhësisë së aplikacionit), do të shfaqet rezultati, i cili mund të shkarkohet në kompjuterin tuaj duke klikuar në butonin "Ruaj".


Dekompiluesit Java

4. Ju gjithashtu mund të shikoni të gjithë skedarët në drejtori dhe të shkarkoni secilin veç e veç.


Dekompiluesit Java

Përveç kësaj, ka mjete të tjera në faqe. Në përgjithësi, faqja është shumë e mirë. Shënuar patjetër!

Dekompiloni APK-në në internet me APK-Deguard

Një tjetër shërbim interesant online quhet. Punon në të njëjtin parim. Ne hyjmë, ngarkojmë skedarin e nevojshëm në sit dhe klikojmë në butonin "Ngarko".


APK Deguard

Ja se si duket skedari APK i dekompiluar në sit.


APK Deguard

Shërbimi në internet APK-Deguard, si faqja e mëparshme, ju lejon të shkarkoni kodin burimor. Në format txt, zip dhe apk.


APK Deguard

Ekziston një kufi në madhësinë maksimale të aplikacionit të shkarkuar. Madhësia e skedarit nuk duhet të kalojë 16 MB. Shërbimi nuk është i keq dhe mjaft i përdorshëm, ka kohë që është shënuar në faqe.

Dekompiluesit APK

Dhe së fundi, me pak fjalë për shërbimin. Me pak fjalë, sepse nuk ka shumë për të folur, një faqe për dekompilimin e skedarëve APK.


Dekompiluesit APK

Për sa i përket funksionalitetit, është inferior ndaj atyre të mëparshme. Ju lejon të shkarkoni burime në kompjuterin tuaj pa aftësinë për të parë drejtoritë dhe skedarët në sit.

Artikujt kryesorë të lidhur