Cum se configurează smartphone-uri și PC-uri. Portal informativ

Aplicația Android de reconstrucție Java pentru Windows. O modalitate simplă de a modifica o aplicație Android

Uneori, unele aplicații de pe Android nu se potrivesc utilizatorului din anumite motive. Un exemplu sunt reclamele enervante. Și se întâmplă așa - toată lumea se pricepe la program, dar numai traducerea din el este fie strâmbă, fie complet absentă. Sau, de exemplu, programul este de încercare, dar nu există nicio modalitate de a obține versiunea completă. Cum să schimbi situația?

Introducere

În acest articol, vom vorbi despre cum să dezasamblam un APK cu o aplicație, să ne uităm la structura sa internă, să dezasamblam și să decompilăm bytecode și, de asemenea, vom încerca să facem mai multe modificări aplicațiilor care ne pot aduce cutare sau cutare beneficiu.

Pentru a face toate acestea pe cont propriu, veți avea nevoie de cel puțin cunoștințe de bază despre limbajul Java, în care sunt scrise aplicațiile Android, și limbajul XML, care este folosit peste tot în Android - de la descrierea aplicației în sine și drepturile sale de acces până la stocarea șirurilor de caractere care vor fi afișate pe ecran. Veți avea nevoie, de asemenea, de capacitatea de a gestiona software-ul de consolă specializat.

Deci, care este pachetul APK în care este distribuit absolut tot software-ul pentru Android?

Decompilarea aplicației

În articol, am lucrat doar cu codul de aplicație dezasamblat, totuși, dacă faceți modificări mai serioase aplicațiilor mari, va fi mult mai dificil de înțeles codul smali. Din fericire, putem decompila codul dex în cod Java, care, deși nu este original și nu poate fi compilat înapoi, este mult mai ușor de citit și de înțeles logica aplicației. Pentru a face acest lucru, avem nevoie de două instrumente:

  • dex2jar - translator de bytecode Dalvik în bytecode JVM, pe baza căruia putem obține cod Java;
  • jd-gui este un decompilator în sine care vă permite să obțineți cod Java lizibil din bytecode JVM. Alternativ, puteți utiliza Jad (www.varanecas.com/jad); deși este destul de vechi, în unele cazuri generează cod mai ușor de citit decât Jd-gui.

Ar trebui folosite așa. Mai întâi, lansăm dex2jar, specificând calea către pachetul apk ca argument:

%dex2jar.sh mail.apk

Ca rezultat, pachetul mail.jar Java va apărea în directorul curent, care poate fi deja deschis în jd-gui pentru a vizualiza codul Java.

Aranjarea pachetelor APK și obținerea lor

Un pachet de aplicații Android este în esență un fișier ZIP obișnuit care nu necesită instrumente speciale pentru a vizualiza conținutul și a despacheta. Este suficient să aveți un arhivator - 7zip pentru Windows sau dezarhivare consolă în Linux. Dar asta e vorba de ambalaj. Ce e inauntru? În interior, avem în general următoarea structură:

  • META-INF/- conține un certificat digital al aplicației, care atestă creatorul acesteia și sume de control ale fișierelor pachetului;
  • res/ - diverse resurse pe care aplicația le folosește în activitatea sa, cum ar fi imagini, o descriere declarativă a interfeței și alte date;
  • AndroidManifest.xml- descrierea aplicatiei. Aceasta include, de exemplu, lista de permisiuni necesare, versiunea necesară de Android și rezoluția necesară a ecranului;
  • clase.dex- codul octet al aplicației compilat pentru mașina virtuală Dalvik;
  • resurse.arsc- de asemenea resurse, dar de alt fel - în special, șiruri (da, acest fișier poate fi folosit pentru rusificare!).

Fișierele și directoarele enumerate sunt, dacă nu în toate, atunci, poate, în marea majoritate a APK-urilor. Cu toate acestea, există câteva fișiere/directoare mai puțin comune care merită menționate:

  • active- analog de resurse. Principala diferență este că pentru a accesa o resursă, trebuie să cunoști identificatorul acesteia, în timp ce lista de active poate fi obținută dinamic folosind metoda AssetManager.list() din codul aplicației;
  • lib- biblioteci native Linux scrise cu ajutorul NDK (Native Development Kit).

Acest director este folosit de producătorii de jocuri, unde își pun motorul de joc scris în C/C++, precum și de creatorii de aplicații de înaltă performanță (de exemplu, Google Chrome). A înțeles dispozitivul. Dar cum să obțineți dosarul pachet al cererii de interes? Deoarece nu este posibil să obțineți fișiere APK de pe dispozitiv fără înrădăcinare (se află în directorul / data / app), iar înrădăcinarea nu este întotdeauna recomandabilă, există cel puțin trei moduri de a aduce fișierul aplicației pe computer:

  • Extensie APK Downloader pentru Chrome;
  • Aplicația Leecher APK reală;
  • diverse găzduire de fișiere și warezniki.

Pe care să-l folosiți este o chestiune de gust; preferăm să folosim aplicații separate, așa că vom descrie utilizarea Real APK Leecher, mai ales că este scris în Java și, în consecință, va funcționa chiar și în Windows, chiar și în nix.

După pornirea programului, trebuie să completați trei câmpuri: E-mail, Parolă și ID dispozitiv - și selectați o limbă. Primele două sunt adresa de e-mail și parola contului dvs. Google pe care le utilizați pe dispozitiv. Al treilea este ID-ul dispozitivului și îl puteți obține formând codul de pe dialer # #8255## și apoi găsirea liniei ID dispozitiv. Când completați, trebuie să introduceți doar ID-ul fără prefixul android.

După completarea și salvarea, apare adesea mesajul „Eroare la conectarea la server”. Nu are nicio legătură cu Google Play, așa că nu ezitați să îl ignorați și să căutați pachete care vă interesează.

Revizuire și modificare

Să presupunem că ați găsit un pachet care vă interesează, l-ați descărcat, l-ați despachetat... iar când ați încercat să vizualizați un fișier XML, ați fost surprins să descoperiți că fișierul nu este un fișier text. Cum să-l decompilați și cum să lucrați cu pachetele în general? Este cu adevărat necesar să instalați SDK-ul? Nu, nu trebuie să instalați SDK-ul. De fapt, pentru toți pașii de despachetare, modificare și ambalare a pachetelor APK, sunt necesare următoarele instrumente:

  • Arhivator ZIP pentru despachetare și ambalare;
  • smali- asamblator/dezasamblator al mașinii virtuale Dalvik bytecode (code.google.com/p/smali);
  • apt- un instrument pentru împachetarea resurselor (în mod implicit, resursele sunt stocate în formă binară pentru a optimiza performanța aplicației). Inclus cu Android SDK, dar poate fi obținut separat;
  • Semnatar- un instrument pentru semnarea digitală a unui pachet modificat (bit.ly/Rmrv4M).

Puteți utiliza toate aceste instrumente separat, dar acest lucru este incomod, deci este mai bine să utilizați software de nivel superior construit pe baza lor. Dacă sunteți pe Linux sau Mac OS X, există un instrument numit apktool. Vă permite să despachetați resurse în forma lor originală (inclusiv fișiere XML binare și arsc), să reconstruiți pachetul cu resurse modificate, dar nu știe cum să semneze pachetele, așa că va trebui să rulați manual utilitarul de semnare. În ciuda faptului că utilitarul este scris în Java, instalarea lui este mai degrabă non-standard. Mai întâi trebuie să obțineți fișierul jar în sine:

$ 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 $ export PATH=~/bin:$PATH

Dacă lucrați pe Windows, atunci există un instrument excelent pentru acesta numit Virtual Ten Studio , care acumulează și toate aceste instrumente (inclusiv apktool în sine), dar în loc de o interfață CLI, oferă utilizatorului o interfață grafică intuitivă cu care să efectuați operațiuni de despachetare, dezasamblare și decompilare în câteva clicuri. Acest instrument este Donation-ware, adică ferestre apar uneori cu o propunere de obținere a unei licențe, dar acest lucru, în cele din urmă, poate fi tolerat. Nu are sens să-l descrii, pentru că poți înțelege interfața în câteva minute. Dar apktool, datorită naturii sale de consolă, ar trebui discutat mai detaliat.

Luați în considerare opțiunile apktool. Pe scurt, există trei comenzi principale: d (decodificare), b (build) și if (install framework). Dacă totul este clar cu primele două comenzi, atunci ce face a treia, operatorul condiționat? Dezambalează cadrul specificat de UI, care este necesar atunci când disecați un pachet de sistem.

Luați în considerare cele mai interesante opțiuni ale primei comenzi:

  • -s- nu dezasamblați fișierele dex;
  • -r- nu despachetați resurse;
  • -b- nu introduceți informații de depanare în rezultatele dezasamblarii fișierului dex;
  • --cadru-cadru- utilizați cadrul specificat de UI în loc de apktool încorporat. Acum luați în considerare câteva opțiuni pentru comanda b:
  • -f- asamblare fortata fara verificarea modificarilor;
  • -A- specificați calea către aapt (instrumentul pentru construirea arhivei APK) dacă dintr-un motiv oarecare doriți să o utilizați din altă sursă.

Utilizarea apktool este foarte simplă, tot ce trebuie să faceți este să specificați una dintre comenzi și calea către APK, de exemplu:

$ apktool d mail.apk

După aceea, toate fișierele pachetului extrase și dezasamblate vor apărea în directorul de e-mail.

Pregătirea. Dezactivați reclamele

Teoria este, desigur, bună, dar de ce este nevoie dacă nu știm ce să facem cu pachetul despachetat? Să încercăm să aplicăm teoria în beneficiul nostru, și anume, modificăm niște software pentru ca acesta să nu ne arate reclame. De exemplu, să fie Virtual Torch - o torță virtuală. Pentru noi, acest software este perfect, deoarece este plin de reclame enervante și este suficient de simplu pentru a nu se pierde în sălbăticia codului.


Deci, folosind una dintre metodele de mai sus, descărcați aplicația de pe piață. Dacă decideți să utilizați Virtuous Ten Studio, deschideți fișierul APK în aplicație și dezarhivați-l, pentru care creați un proiect (Fișier -> Proiect nou), apoi selectați Import File din meniul contextual al proiectului. Dacă alegerea dvs. a căzut pe apktool, atunci este suficient să executați o comandă:

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

După aceea, în directorul com.kauf.particle.virtualtorch va apărea un arbore de fișiere, similar celui descris în secțiunea anterioară, dar cu un director smali suplimentar în loc de fișiere dex și un fișier apktool.yml. Primul conține codul dezasamblat al fișierului executabil dex al aplicației, al doilea conține informațiile de serviciu necesare apktool pentru a asambla pachetul înapoi.

Primul loc în care trebuie să ne uităm este, desigur, AndroidManifest.xml. Și aici întâlnim imediat următoarea linie:

Este ușor de ghicit că ea este responsabilă pentru acordarea permisiunilor aplicației de a utiliza conexiunea la Internet. De fapt, dacă vrem doar să scăpăm de reclame, cel mai probabil ne va fi suficient să interzicem aplicația de pe Internet. Să încercăm să o facem. Ștergeți linia specificată și încercați să compilați software-ul folosind apktool:

$ apktool b com.kauf.particle.virtualtorch

Fișierul APK rezultat va apărea în directorul com.kauf.particle.virtualtorch/build/. Cu toate acestea, nu poate fi instalat deoarece nu are semnătură digitală și sume de verificare a fișierelor (pur și simplu nu are un director META-INF/). Trebuie să semnăm pachetul cu utilitarul apk-signer. Lansat. Interfața este formată din două file - pe prima (Key Generator) creăm chei, pe a doua (APK Signer) semnăm. Pentru a crea cheia noastră privată, completați următoarele câmpuri:

  • Fișierul țintă- fișier de ieșire keystore; de obicei stochează o pereche de chei;
  • ParolaȘi A confirma- parola pentru stocare;
  • Alias- numele cheii din depozit;
  • Parola aliasȘi A confirma- parola cheie secretă;
  • Valabilitate- Perioada de valabilitate (în ani). Valoarea implicită este optimă.

Câmpurile rămase, în general, sunt opționale - dar trebuie să completați cel puțin unul.


AVERTIZARE

Pentru a semna o aplicație cu apk-signer, trebuie să instalați Android SDK și să specificați calea completă către acesta în setările aplicației.

Toate informațiile sunt furnizate doar în scop informativ. Nici editorii, nici autorul nu sunt responsabili pentru eventualele daune cauzate de materialele acestui articol.

Acum puteți semna APK-ul cu această cheie. În fila APK Signer, selectați fișierul nou generat, introduceți parola, aliasul cheii și parola pentru acesta, apoi găsiți fișierul APK și faceți clic cu îndrăzneală pe butonul „Semnați”. Daca totul merge bine, pachetul va fi semnat.

INFO

Deoarece am semnat pachetul cu propria noastră cheie, acesta va intra în conflict cu aplicația originală, ceea ce înseamnă că atunci când vom încerca să actualizăm software-ul prin piață, vom primi o eroare.

Doar software-ul terților necesită o semnătură digitală, așa că dacă modificați aplicațiile de sistem care sunt instalate prin copierea lor în directorul /system/app/, atunci nu este necesar să le semnați.

După aceea, aruncăm pachetul pe smartphone, instalăm și rulăm. Voila, reclama a dispărut! În schimb, a apărut un mesaj că nu avem internet sau nu avem permisiunile corespunzătoare. În teorie, acest lucru ar putea fi suficient, dar mesajul pare enervant și, să fiu sincer, tocmai am avut noroc cu o aplicație stupidă. Un software bine scris, cel mai probabil, își va clarifica acreditările sau va verifica dacă există o conexiune la Internet și, în caz contrar, va refuza pur și simplu să pornească. Cum să fii în acest caz? Desigur, editați codul.

De obicei, autorii aplicației creează clase speciale pentru afișarea reclamelor și a metodelor de apel ale acestor clase în timpul lansării aplicației sau a uneia dintre „activitățile” acesteia (în termeni simpli, ecrane de aplicație). Să încercăm să găsim aceste clase. Mergem la directorul smali, apoi com (în org există doar biblioteca grafică deschisă cocos2d), apoi kauf (exact acolo, pentru că acesta este numele dezvoltatorului și tot codul său este acolo) - și aici este, director de marketing. În interior găsim o grămadă de fișiere cu extensia smali. Acestea sunt clase, iar cea mai notabilă dintre ele este clasa Ad.smali, după numele căreia este ușor de ghicit că afișează reclame.

Am putea schimba logica funcționării sale, dar ar fi mult mai ușor să eliminați prostește apelurile la oricare dintre metodele sale din aplicația în sine. Prin urmare, ieșim din directorul de marketing și mergem la directorul de particule vecine, apoi la virtualtorch. Fișierul MainActivity.smali merită o atenție specială aici. Aceasta este o clasă Android standard care este generată de Android SDK și setată ca punct de intrare în aplicație (analog cu funcția principală din C). Deschideți fișierul pentru editare.

În interior se află codul smali (asambler local). Este destul de confuz și dificil de citit din cauza naturii sale de nivel scăzut, așa că nu îl vom studia, ci pur și simplu găsim toate mențiunile clasei de anunțuri în cod și le vom comenta. Conducem în șirul „Ad” în căutare și ajungem la rândul 25:

Câmp anunț privat:Lcom/kauf/marketing/Ad;

Aici, un anunț de câmp este creat pentru a stoca un obiect din clasa Ad. Comentăm punând semnul ### în fața liniei. Continuăm căutarea. Linia 423:

Noua instanță v3, Lcom/kauf/marketing/Ad;

Aici este creat obiectul. Comentăm. Continuăm căutarea și găsim în rândurile 433, 435, 466, 468, 738, 740, 800 și 802 apeluri la metodele clasei Ad. Comentăm. Arata ca asta e. Salvăm. Acum pachetul trebuie asamblat înapoi și verificat pentru performanța sa și prezența reclamei. Pentru puritatea experimentului, returnăm linia eliminată din AndroidManifest.xml, colectăm pachetul, îl semnăm și îl instalăm.

Cobaiul nostru. Publicitate vizibilă

Op-pa! Publicitatea a dispărut doar în timp ce aplicația rula, dar a rămas în meniul principal, pe care îl vedem când lansăm software-ul. Așadar, așteptați, dar punctul de intrare este clasa MainActivity, iar reclama a dispărut în timp ce aplicația rula, dar a rămas în meniul principal, deci punctul de intrare este diferit? Pentru a dezvălui adevăratul punct de intrare, redeschidem fișierul AndroidManifest.xml. Și da, conține următoarele rânduri:

Ei ne spun (și mai important, androidul) că activitatea numită Start ar trebui să fie lansată ca răspuns la generarea intenției (eveniment) android.intent.action.MAIN din categoria android.intent.category.LAUNCHER. Acest eveniment este generat atunci când atingeți pictograma aplicației din launcher, așa că definește punctul de intrare, și anume clasa Start. Cel mai probabil, programatorul a scris mai întâi o aplicație fără meniu principal, punctul de intrare la care era clasa standard MainActivity, apoi a adăugat o nouă fereastră (activitate) care conține meniul și descrisă în clasa Start și a făcut-o manual o intrare. punct.

Deschidem fisierul Start.smali si cautam din nou linia „Ad”, gasim in randurile 153 si 155 mentiunea clasei FirstAd. Se află și în codul sursă și, judecând după nume, este responsabil pentru afișarea reclamelor pe ecranul principal. Ne uităm mai departe, există o creare a unei instanțe a clasei FirstAd și o intenție, conform contextului legat de această instanță, și apoi eticheta cond_10, tranziția condiționată la care se realizează exact înainte de a crea o instanță a clasei. :

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

Cel mai probabil, programul calculează cumva aleatoriu dacă este necesar să se afișeze reclame pe ecranul principal și, dacă nu, sare direct la cond_10. Ok, să-i simplificăm sarcina și să înlocuim tranziția condiționată cu una necondiționată:

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

Nu mai există mențiuni despre FirstAd în cod, așa că închidem fișierul și reasamblam lanterna noastră virtuală folosind apktool. Copiați pe smartphone, instalați, rulați. Voila, toate reclamele au dispărut, felicitări tuturor.

Rezultate

Acest articol este doar o scurtă introducere în metodele de deschidere și modificare a aplicațiilor Android. Multe probleme au rămas în spatele scenei, cum ar fi eliminarea protecției, analiza codului ofuscat, traducerea și înlocuirea resurselor aplicației, precum și modificarea aplicațiilor scrise folosind Android NDK. Cu toate acestea, având cunoștințe de bază, înțelegerea tuturor acestor lucruri este doar o chestiune de timp.

Se întâmplă ca după lansarea aplicației, codul sursă al acesteia să dispară undeva. Este adevărat că asta se întâmplă tot timpul? Și nu mai rămâne nimic decât să-l decompilați și să remediați câteva sute de linii de cod, iar toate acestea trebuie făcute cât mai repede posibil.

Așa că am avut sarcina de a modifica aplicația având doar apk-ul ei. Iar cei care au fost implicați în decompilarea aplicațiilor știu cât de dificil este să le compilați ulterior.

Decompilarea

Pentru Android „și există următoarele utilitare:
  • ApkTool pentru decompilarea resurselor.
  • Dex2Jar pentru a converti dex în borcan.
  • JD-GUI pentru a obține surse din jar.
  • De asemenea, recomand JAD, unele locuri decompilează mai bine decât JD-GUI.
Există suficiente informații despre utilizarea lor pe Internet.

Dacă încercați să compilați aplicația după decompilare, atunci cel mai probabil nu se va compila din cauza erorilor, este deosebit de dificil să decompilați ciclurile și condițiile. Unele erori sunt ușor de corectat, dar din nou, nu va fi ușor să descoperiți o mulțime de salturi condiționate, iar atunci când numărul lor este mai mare de o sută sau chiar câteva mii, atunci acest mod de a restabili aplicația își pierde eficacitatea, este mai repede să scriu totul din nou.

Acesta ar putea fi sfârșitul experimentelor cu decompilarea, dar lenea este motorul progresului și s-a născut o nouă metodă.

Redefinirea claselor

Deci, jar este o bibliotecă, așa că de ce să nu o includeți într-un proiect nou? Îl aruncăm în folderul libs, moștenim din activitatea principală și îl compilăm. Totul funcționează, principalul lucru este că numele claselor nu se potrivesc, deci numele pachetelor trebuie să difere, altfel BuildConfig și R se vor potrivi cel puțin.

În acest fel, puteți moșteni din Activity, Service, BroadcastReceiver și, eventual, alte clase declarate în manifest, va trebui să specificați și noi nume de clase în manifest, altfel nu vor fi folosite.

Acum puteți redefini funcțiile virtuale, dar asta e tot, mai ales că cuvântul cheie final nu vă va permite să faceți acest lucru și să moșteniți, așa că să trecem mai departe.

Înlocuirea claselor

După dezarhivarea bibliotecii jar, obținem fișiere de clasă, acestea sunt clase compilate, observăm că atunci când construim proiectul, aceleași fișiere de clasă sunt în folderul bin / classes, dar dacă punem fișiere din bibliotecă acolo...

Nu totul este atât de simplu, mai întâi trebuie să compilați proiectul. Pentru a utiliza clasele aplicației originale, trebuie să o atașați cumva la proiect, dar nu o exportați. Acest lucru se face simplu: din folderul libs, Eclipse însuși exportă biblioteci, așa că mutăm biblioteca jar în folderul lib și o conectăm la proiect, în Eclipse este Project-> Preferences-> Java Build Path-> Libraries-> Adăugați borcane ... mai departe în fila Comandă și export trebuie să vă asigurați că caseta de selectare nu este setată, deoarece nu trebuie să exportăm biblioteca, totul va fi în fișiere de clasă.

Acum luăm o clasă din sursele aplicației decompilate, reparăm erorile de compilare din ea, adăugăm, de exemplu, un dialog pentru a ne asigura că noua clasă este folosită. Apoi, curățăm proiectul, în Eclipse este Project-> Clean, copiați fișierele de clasă în folderul bin/classs, construiți proiectul și totul funcționează!

Cu următoarele versiuni ale proiectului, nu este nevoie să îl ștergeți, așa că utilizarea acestei metode este destul de convenabilă. Pentru a ușura remedierea erorilor după decompilare, am folosit surse obținute din JD-GUI și JAD, de obicei acest lucru era suficient.

Dar acum este timpul să compilați versiunea de lansare și pentru aceasta, desigur, se folosește un obfuscator și va da sute de erori pentru potrivirile numelor de clasă și referințele nerezolvate. Acum este timpul să eliminați clasele care au fost înlocuite din fișierele de clasă compilate, după care nu ar trebui să apară erori. O altă caracteristică neplăcută a versiunii este că trebuie să curățați proiectul de fiecare dată și să copiați fișierele de clasă, altfel acestea dispar undeva.

Concluzie

Doar fișierele modificabile sunt decompilate în acest fel, ceea ce elimină necesitatea de a corecta erorile din toate sursele și îmbunătățește fiabilitatea, deoarece întreaga parte a codului va fi supusă procesului de decompilare - reparare - compilare.

Cu o probabilitate mare, nu va fi posibilă ascunderea tuturor urmelor aplicației originale, numele claselor neconfundate, cum ar fi Activitate și Serviciu, precum și numele pachetelor acestora, vor fi păstrate și vor fi disponibile după decompilare. aplicația modificată, dar pentru versiunile piratate aceasta nu este o problemă, motiv pentru care merită protejată aplicația, metodele de protecție sunt similare cu alte metode de protecție împotriva modificărilor de cod.

Se întâmplă ca după lansarea aplicației, codul sursă al acesteia să dispară undeva. Este adevărat că asta se întâmplă tot timpul? Și nu mai rămâne nimic decât să-l decompilați și să remediați câteva sute de linii de cod, iar toate acestea trebuie făcute cât mai repede posibil.

Așa că am avut sarcina de a modifica aplicația având doar apk-ul ei. Iar cei care au fost implicați în decompilarea aplicațiilor știu cât de dificil este să le compilați ulterior.

Decompilarea

Pentru Android „și există următoarele utilitare:
  • ApkTool pentru decompilarea resurselor.
  • Dex2Jar pentru a converti dex în borcan.
  • JD-GUI pentru a obține surse din jar.
  • De asemenea, recomand JAD, unele locuri decompilează mai bine decât JD-GUI.
Există suficiente informații despre utilizarea lor pe Internet.

Dacă încercați să compilați aplicația după decompilare, atunci cel mai probabil nu se va compila din cauza erorilor, este deosebit de dificil să decompilați ciclurile și condițiile. Unele erori sunt ușor de corectat, dar din nou, nu va fi ușor să descoperiți o mulțime de salturi condiționate, iar atunci când numărul lor este mai mare de o sută sau chiar câteva mii, atunci acest mod de a restabili aplicația își pierde eficacitatea, este mai repede să scriu totul din nou.

Acesta ar putea fi sfârșitul experimentelor cu decompilarea, dar lenea este motorul progresului și s-a născut o nouă metodă.

Redefinirea claselor

Deci, jar este o bibliotecă, așa că de ce să nu o includeți într-un proiect nou? Îl aruncăm în folderul libs, moștenim din activitatea principală și îl compilăm. Totul funcționează, principalul lucru este că numele claselor nu se potrivesc, deci numele pachetelor trebuie să difere, altfel BuildConfig și R se vor potrivi cel puțin.

În acest fel, puteți moșteni din Activity, Service, BroadcastReceiver și, eventual, alte clase declarate în manifest, va trebui să specificați și noi nume de clase în manifest, altfel nu vor fi folosite.

Acum puteți redefini funcțiile virtuale, dar asta e tot, mai ales că cuvântul cheie final nu vă va permite să faceți acest lucru și să moșteniți, așa că să trecem mai departe.

Înlocuirea claselor

După dezarhivarea bibliotecii jar, obținem fișiere de clasă, acestea sunt clase compilate, observăm că atunci când construim proiectul, aceleași fișiere de clasă sunt în folderul bin / classes, dar dacă punem fișiere din bibliotecă acolo...

Nu totul este atât de simplu, mai întâi trebuie să compilați proiectul. Pentru a utiliza clasele aplicației originale, trebuie să o atașați cumva la proiect, dar nu o exportați. Acest lucru se face simplu: din folderul libs, Eclipse însuși exportă biblioteci, așa că mutăm biblioteca jar în folderul lib și o conectăm la proiect, în Eclipse este Project-> Preferences-> Java Build Path-> Libraries-> Adăugați borcane ... mai departe în fila Comandă și export trebuie să vă asigurați că caseta de selectare nu este setată, deoarece nu trebuie să exportăm biblioteca, totul va fi în fișiere de clasă.

Acum luăm o clasă din sursele aplicației decompilate, reparăm erorile de compilare din ea, adăugăm, de exemplu, un dialog pentru a ne asigura că noua clasă este folosită. Apoi, curățăm proiectul, în Eclipse este Project-> Clean, copiați fișierele de clasă în folderul bin/classs, construiți proiectul și totul funcționează!

Cu următoarele versiuni ale proiectului, nu este nevoie să îl ștergeți, așa că utilizarea acestei metode este destul de convenabilă. Pentru a ușura remedierea erorilor după decompilare, am folosit surse obținute din JD-GUI și JAD, de obicei acest lucru era suficient.

Dar acum este timpul să compilați versiunea de lansare și pentru aceasta, desigur, se folosește un obfuscator și va da sute de erori pentru potrivirile numelor de clasă și referințele nerezolvate. Acum este timpul să eliminați clasele care au fost înlocuite din fișierele de clasă compilate, după care nu ar trebui să apară erori. O altă caracteristică neplăcută a versiunii este că trebuie să curățați proiectul de fiecare dată și să copiați fișierele de clasă, altfel acestea dispar undeva.

Concluzie

Doar fișierele modificabile sunt decompilate în acest fel, ceea ce elimină necesitatea de a corecta erorile din toate sursele și îmbunătățește fiabilitatea, deoarece întreaga parte a codului va fi supusă procesului de decompilare - reparare - compilare.

Cu o probabilitate mare, nu va fi posibilă ascunderea tuturor urmelor aplicației originale, numele claselor neconfundate, cum ar fi Activitate și Serviciu, precum și numele pachetelor acestora, vor fi păstrate și vor fi disponibile după decompilare. aplicația modificată, dar pentru versiunile piratate aceasta nu este o problemă, motiv pentru care merită protejată aplicația, metodele de protecție sunt similare cu alte metode de protecție împotriva modificărilor de cod.

Despre cum să decompilați aplicațiile pentru Android, știți că m-am oprit despre cum să colectez toate fișierele care au ieșit la dezasamblarea aplicației înapoi în APK.

Digresiune lirică

Pentru asamblare este recomandat un folder cu fișiere obținute ca urmare a decompilării folosind apktool. Fișierele de cod, care sunt un set de instrucțiuni pentru mașina virtuală Dalvik, sunt compilate înapoi în arhiva clasei fără probleme. În timp ce conversia de la Dalvik la Java și înapoi poate duce la probleme de incompatibilitate. Ca urmare, programul nu va funcționa corect. Prin urmare, pentru a modifica cu succes programele și nu doar de dragul cercetării, trebuie să studiați instrucțiunile Dalvik.

Asamblare

Colectarea unor astfel de fișiere înapoi într-un APK este destul de simplă. Pentru a face acest lucru, trebuie să rulați apktool cu ​​indicatorul de construcție corespunzător și să îi transmiteți calea către folderul cu aplicația decompilată în interior. De exemplu, dacă avem un folder de aplicație care se află în același director cu apktool, atunci comanda va arăta astfel:

Coajă

java -jar apktool.jar b app

java - jar apktool .jar b app

După asamblare, fișierul APK terminat va fi în director aplicație/build. Următorul pas este semnarea APK-ului. Acest lucru se face pentru ca aplicația să funcționeze pe dispozitive în care depanarea este interzisă. Adică lansarea de aplicații nesemnate pe astfel de dispozitive este interzisă. Puteți citi mai multe despre certificatele digitale și procedura de semnare a fișierelor aici.

Semnarea unui fișier este foarte simplă: există un utilitar special pentru acesta numit signapk . Trebuie să fie rulat prin transmiterea certificatelor ca argumente, apoi calea către aplicație și, în final, calea pentru aplicația semnată (rezultatul unde se salvează). Arata cam asa:

Coajă

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

De unde pot obține un astfel de certificat, întrebați? Certificatele pot fi găsite pe Internet. Sau generați-l singur. Puteți găsi instrucțiuni detaliate despre configurarea și generarea tuturor fișierelor necesare, de exemplu.

Concluzie

După cum puteți vedea, decompilarea și construirea fișierelor APK este un proces destul de simplu, care, în plus, poate fi automatizat, ușurând cercetătorul. Mașina virtuală Dalvik în sine este, de asemenea, ușor de învățat și deschis, ceea ce, pe de o parte, scade pragul de intrare pentru dezvoltatori și, pe de altă parte, este principalul motiv pentru un procent atât de mare de piraterie pe platforma Android. Acesta este parțial motivul pentru care dezvoltatorii, de exemplu, de jocuri, nu sunt în general interesați să lanseze jocuri interesante cu o poveste. Este mult mai profitabil cu atitudinea actuală a utilizatorilor de a nitui fermele uimitor de similare cu donații. Prin urmare, cumpărăm aplicații, sprijinim dezvoltatorii și, ca urmare, obținem conținut interesant. Dar nu este absolut necesar să donezi!

Vă mulțumesc tuturor, ne vedem din nou.

Recent, v-am spus cum să utilizați serviciile online gratuite (verificați fișierul APK). Astăzi vom continua subiectul fișierelor APK și vă voi arăta cum să decompilați un fișier APK online.

Dar mai întâi, pentru cei care nu sunt la curent, vă voi spune ce este decompilarea și decompilarea APK în general și în ce cazuri poate fi nevoie. Codificatorii, IT-shnikam și alți pacienți informatici nu sunt recomandați să citească următorul capitol! Accesați direct prezentarea generală a serviciilor online.

  • cuvânt înainte
  • Ce este decompilarea
  • Decompilator de fișiere APK online
    • Serviciu online de decompilare APK
    • Serviciu online Javadecompilers
    • Serviciu online APK-Deguard
  • concluzii

Ce este un proces de decompilare sau decompilare?

Decompilerul încearcă să traducă binarul compilat înapoi într-un fel de cod sursă. Calitatea acestei operațiuni depinde direct de caracteristicile limbajului de programare sursă.

Există un număr mare de decompilatoare pentru limbajul de programare Java. Codul octet Java conține o mulțime de informații. Acest lucru face mai ușor pentru decompilator să restaureze codul original într-o stare recompilabilă.

Decompilare APK

După cum știți, aplicațiile Android sunt de obicei scrise în Java. De la lansarea primei versiuni de Android, programatorii s-au confruntat cu sarcina nu numai de a compila din fișiere Java într-un fișier APK pentru a-l instala pe un dispozitiv Android, ci și de a efectua acțiunea opusă, de exemplu. decompilați fișierul APK.

De ce trebuie să decompilați fișierul APK?

Răspunsul este simplu - pentru a vedea în primul rând cum funcționează cutare sau cutare aplicație Android și, bineînțeles, pentru a o schimba dacă este necesar. Când decompilați un fișier APK (dacă nu a fost mai întâi ascuns), obțineți un set complet de fișiere Java cu cod sursă.

Majoritatea oamenilor trebuie doar să vizualizeze conținutul și, pentru a face acest lucru, trebuie instalate multe instrumente diferite pe computer. Necesită mașină Java, Android SDK și instrumente precum: JavaDecompiler, dex2jar etc. instalate. De fapt, deși este dificil, dar cel mai corect mod, din păcate, necesită anumite cunoștințe și abilități de la utilizator și, desigur, tam-tam.

Există vreo modalitate mai ușoară de a decompila o aplicație Android?

Da sigur. Odată cu dezvoltarea tehnologiilor cloud, au apărut servicii online gratuite, despre care voi discuta acum.

Decompilați APK-ul online cu Javadecompilers

Să începem recenzia noastră cu un serviciu online. Acest instrument se bazează pe versiunea offline a decompilatorului Jadx.

1. Mergem pe site-ul Javadecompilers, facem clic pe butonul „Browse” și selectăm aplicația necesară.

2. Faceți clic pe butonul „Încărcare și decompilare”.

Decompilatoare Java

3. După câteva minute (în funcție de dimensiunea aplicației), va fi afișat rezultatul, care poate fi descărcat pe computer făcând clic pe butonul „Salvare”.


Decompilatoare Java

4. De asemenea, puteți vizualiza toate fișierele din directoare și puteți descărca fiecare în mod individual.


Decompilatoare Java

În plus, pe site există și alte instrumente. In general, site-ul este foarte bun. Cu siguranță marcat!

Decompilați APK-ul online cu APK-Deguard

Un alt serviciu online interesant se numește. Funcționează pe același principiu. Intrăm, încărcăm fișierul necesar pe site și facem clic pe butonul „Încărcare”.


APK Deguard

Iată cum arată fișierul APK decompilat pe site.


APK Deguard

Serviciul online APK-Deguard, ca și site-ul anterior, vă permite să descărcați codul sursă. În format txt, zip și apk.


APK Deguard

Există o limită pentru dimensiunea maximă a aplicației descărcate. Dimensiunea fișierului nu trebuie să depășească 16 MB. Serviciul nu este rău și destul de utilizabil, a fost de mult marcat.

Decompilatoare APK

Și, în sfârșit, pe scurt despre serviciu. Pe scurt, pentru că nu prea este de vorbit, un site de decompilare a fișierelor APK.


Decompilatoare APK

Din punct de vedere al funcționalității, este inferior celor anterioare. Vă permite să descărcați surse pe computer fără posibilitatea de a vizualiza directoare și fișiere de pe site.

Top articole similare