Come aprire l'APK e come modificarlo? Utilizzo di apktool Un programma per disassemblare e assemblare un file apk

A volte alcune applicazioni su Android in qualche modo non si adattano all'utente. Un esempio è la pubblicità intrusiva. E succede anche che il programma vada bene per tutti, ma la traduzione in esso contenuta è storta o completamente assente. Oppure, ad esempio, il programma è in versione di prova, ma non è possibile ottenere la versione completa. Come cambiare la situazione?

introduzione

In questo articolo parleremo di come disassemblare un pacchetto APK con un'applicazione, vedremo la sua struttura interna, disassemblare e decompilare il bytecode e proveremo anche ad apportare diverse modifiche alle applicazioni che possono portarci un vantaggio o un altro.

Per fare tutto questo da solo, avrai bisogno almeno di una conoscenza di base del linguaggio Java, in cui sono scritte le applicazioni Android, e del linguaggio XML, che viene utilizzato ovunque in Android, dalla descrizione dell'applicazione stessa e dei suoi diritti di accesso alla memorizzazione di stringhe che verrà visualizzato sullo schermo. Avrai anche bisogno della capacità di utilizzare software console specializzato.

Allora, cos'è un pacchetto APK in cui è distribuito assolutamente tutto il software Android?

Decompilazione dell'applicazione

In questo articolo abbiamo lavorato solo con codice applicativo disassemblato, ma se vengono apportate modifiche più serie ad applicazioni di grandi dimensioni, comprendere il codice piccolo sarà molto più difficile. Fortunatamente possiamo decompilare il codice dex in codice Java, che, sebbene non originale e non compilato, è molto più semplice da leggere e comprendere la logica dell'applicazione. Per fare ciò, avremo bisogno di due strumenti:

  • dex2jar è un traduttore del bytecode Dalvik nel bytecode JVM, sulla base del quale possiamo ottenere il codice nel linguaggio Java;
  • jd-gui è un decompilatore stesso che ti consente di ottenere codice Java leggibile dal bytecode JVM. In alternativa potete utilizzare Jad (www.varaneckas.com/jad); Sebbene sia piuttosto vecchio, in alcuni casi genera codice più leggibile rispetto a Jd-gui.

Ecco come dovrebbero essere usati. Per prima cosa lanciamo dex2jar, specificando il percorso del pacchetto apk come argomento:

% dex2jar.shmail.apk

Di conseguenza, nella directory corrente apparirà il pacchetto Java mail.jar, che può già essere aperto in jd-gui per visualizzare il codice Java.

Disposizione dei pacchetti APK e loro ricezione

Un pacchetto di app Android è essenzialmente un normale file ZIP che non richiede strumenti speciali per visualizzarne il contenuto o estrarlo. È sufficiente avere un archiviatore: 7zip per Windows o unzip per console su Linux. Ma questo riguarda l'involucro. Cosa c'è dentro? In generale, all'interno abbiamo la seguente struttura:

  • META-INF/- contiene un certificato digitale dell'applicazione, identificandone l'autore e i checksum dei file del pacchetto;
  • res/ - varie risorse che l'applicazione utilizza nel suo lavoro, come immagini, descrizione dichiarativa dell'interfaccia e altri dati;
  • AndroidManifest.xml- descrizione della domanda. Ciò include, ad esempio, un elenco delle autorizzazioni richieste, la versione Android richiesta e la risoluzione dello schermo richiesta;
  • classi.dex- bytecode dell'applicazione compilato per la macchina virtuale Dalvik;
  • risorse.arc- anche risorse, ma di tipo diverso - in particolare stringhe (sì, questo file può essere utilizzato per la russificazione!).

I file e le directory elencati si trovano, se non in tutti, forse nella stragrande maggioranza degli APK. Tuttavia, ci sono alcuni altri file/directory non così comuni che vale la pena menzionare:

  • risorse- analogo delle risorse. La differenza principale è che per accedere ad una risorsa è necessario conoscerne l'identificatore, ma l'elenco degli asset può essere ottenuto dinamicamente utilizzando il metodo AssetManager.list() nel codice dell'applicazione;
  • lib- librerie native Linux scritte utilizzando NDK (Native Development Kit).

Questa directory viene utilizzata dai produttori di giochi che vi inseriscono i loro motori di gioco scritti in C/C++, nonché dai creatori di applicazioni ad alte prestazioni (ad esempio Google Chrome). Abbiamo scoperto il dispositivo. Ma come si ottiene il file del pacchetto dell'applicazione che ti interessa? Poiché non è possibile prelevare i file APK dal dispositivo senza root (si trovano nella directory /data/app) e il rooting non è sempre consigliabile, esistono almeno tre modi per trasferire il file dell'applicazione sul computer:

  • Estensione APK Downloader per Chrome;
  • Applicazione APK Leecher reale;
  • vari file hosting e Vareznik.

Quale usare è una questione di gusti; preferiamo utilizzare applicazioni separate, quindi descriveremo l'uso di Real APK Leecher, soprattutto perché è scritto in Java e, di conseguenza, funzionerà sia su Windows che su Nix.

Dopo aver avviato il programma, è necessario compilare tre campi: Email, Password e ID dispositivo e selezionare una lingua. I primi due sono l'e-mail e la password del tuo account Google che utilizzi sul dispositivo. Il terzo è l'identificativo del dispositivo, e si ottiene digitando il codice sul combinatore # #8255## e quindi trovare la riga ID dispositivo. Durante la compilazione è sufficiente inserire l'ID senza il prefisso android-.

Dopo aver compilato e salvato, spesso viene visualizzato il messaggio "Errore durante la connessione al server". Non ha nulla a che fare con Google Play, quindi sentiti libero di ignorarlo e cercare i pacchetti che ti interessano.

Visualizza e modifica

Diciamo che hai trovato un pacchetto che ti interessa, lo hai scaricato, lo hai decompresso... e quando hai provato a visualizzare un file XML, sei rimasto sorpreso di scoprire che il file non era di testo. Come decompilarlo e come lavorare con i pacchetti in generale? È davvero necessario installare l'SDK? No, non è affatto necessario installare l'SDK. Infatti, tutti i passaggi per estrarre, modificare e impacchettare i pacchetti APK richiedono i seguenti strumenti:

  • Archiviatore ZIP per disimballare e imballare;
  • piccolo- Assemblatore/disassemblatore bytecode della macchina virtuale Dalvik (code.google.com/p/smali);
  • adatto- uno strumento per impacchettare le risorse (per impostazione predefinita, le risorse vengono archiviate in formato binario per ottimizzare le prestazioni dell'applicazione). Incluso nell'SDK di Android, ma può essere ottenuto separatamente;
  • firmatario- uno strumento per firmare digitalmente un pacchetto modificato (bit.ly/Rmrv4M).

Puoi utilizzare tutti questi strumenti separatamente, ma ciò è scomodo, quindi è meglio utilizzare software di livello superiore basato su di essi. Se utilizzi Linux o Mac OS X, c'è uno strumento chiamato apktool. Ti consente di decomprimere le risorse nella loro forma originale (inclusi file XML binari e arsc), ricostruire un pacchetto con risorse modificate, ma non sa come firmare i pacchetti, quindi dovrai eseguire manualmente l'utilità firmatario. Nonostante il fatto che l'utilità sia scritta in Java, la sua installazione è piuttosto non standard. Per prima cosa devi ottenere il file jar stesso:

$ 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

Se lavori su Windows, allora c'è un eccellente strumento chiamato Virtuous Ten Studio, che anch'esso accumula tutti questi strumenti (incluso apktool stesso), ma invece di un'interfaccia CLI fornisce all'utente un'interfaccia grafica intuitiva con cui puoi eseguire operazioni di spacchettamento, disassemblaggio e decompilazione in pochi click. Questo strumento è Donation-ware, cioè a volte appaiono finestre che ti chiedono di ottenere una licenza, ma alla fine questo può essere tollerato. È inutile descriverlo perché puoi comprendere l'interfaccia in pochi minuti. Ma apktool, data la sua natura di console, dovrebbe essere discusso in modo più dettagliato.


Diamo un'occhiata alle opzioni di apktool. In breve, i comandi base sono tre: d (decode), b (build) e if (install framework). Se tutto è chiaro con i primi due comandi, allora cosa fa la terza istruzione condizionale? Decomprime il framework dell'interfaccia utente specificato, necessario nei casi in cui si analizza un pacchetto di sistema.

Diamo un'occhiata alle opzioni più interessanti del primo comando:

  • -S- non disassemblare i file dex;
  • -R- non disimballare le risorse;
  • -B- non inserire informazioni di debug nei risultati del disassemblaggio del file dex;
  • --percorso-frame- utilizza il framework dell'interfaccia utente specificato anziché quello integrato in apktool. Ora diamo un'occhiata ad un paio di opzioni per il comando b:
  • -F- assemblaggio forzato senza controllo delle modifiche;
  • -UN- indica il percorso di aapt (uno strumento per creare un archivio APK), se per qualche motivo desideri utilizzarlo da un'altra fonte.

Usare apktool è molto semplice; per farlo basta specificare uno dei comandi e il percorso dell'APK, ad esempio:

$ apktool d mail.apk

Successivamente, tutti i file estratti e disassemblati del pacchetto appariranno nella directory della posta.

Preparazione. Disattivazione della pubblicità

La teoria, ovviamente, è buona, ma perché è necessaria se non sappiamo cosa fare con il pacchetto spacchettato? Proviamo ad applicare la teoria a nostro vantaggio, ovvero a modificare alcuni software in modo che non ci mostrino pubblicità. Ad esempio, lascia che sia Virtual Torch, una torcia virtuale. Questo software è l'ideale per noi, perché è pieno di pubblicità fastidiose e, inoltre, è abbastanza semplice da non perdersi nella giungla del codice.


Quindi, utilizzando uno dei metodi sopra indicati, scarica l'applicazione dal market. Se decidi di utilizzare Virtuous Ten Studio, è sufficiente aprire il file APK nell'applicazione e decomprimerlo, creare un progetto (File -> Nuovo progetto), quindi selezionare Importa file nel menu contestuale del progetto. Se la tua scelta è caduta su apktool, esegui semplicemente un comando:

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

Successivamente, nella directory com.kauf.particle.virtualtorch apparirà un albero di file simile a quello descritto nella sezione precedente, ma con una directory smali aggiuntiva invece dei file dex e un file apktool.yml. Il primo contiene il codice disassemblato del file dex eseguibile dell'applicazione, il secondo contiene le informazioni di servizio necessarie affinché apktool possa riassemblare il pacchetto.

Il primo posto in cui dovremmo cercare è, ovviamente, AndroidManifest.xml. E qui incontriamo subito la seguente riga:

Non è difficile intuire che sia responsabile della concessione all'applicazione delle autorizzazioni per l'utilizzo della connessione Internet. Infatti, se vogliamo semplicemente sbarazzarci della pubblicità, molto probabilmente basterà bloccare l'applicazione da Internet. Proviamo a farlo. Eliminiamo la riga specificata e proviamo a creare il software utilizzando apktool:

$ apktool b com.kauf.particle.virtualtorch

Il file APK risultante verrà visualizzato nella directory com.kauf.particle.virtualtorch/build/. Tuttavia, non sarà possibile installarlo, poiché non dispone di firma digitale e checksum dei file (semplicemente non ha una directory META-INF/). Dobbiamo firmare il pacchetto utilizzando l'utilità apk-signer. Lanciato. L'interfaccia è composta da due schede: nella prima (Key Generator) creiamo le chiavi, nella seconda (APK Signer) firmiamo. Per creare la nostra chiave privata, compila i seguenti campi:

  • File di destinazione- file di output dell'archivio chiavi; normalmente memorizza una coppia di chiavi;
  • Parola d'ordine E Confermare- password per l'archiviazione;
  • Alias- nome della chiave presente nel deposito;
  • Password alias E Confermare- password chiave segreta;
  • Validità- periodo di validità (in anni). Il valore predefinito è ottimale.

I restanti campi sono, in generale, facoltativi, ma almeno uno deve essere compilato.


AVVERTIMENTO

Per firmare un'applicazione utilizzando apk-signer, è necessario installare Android SDK e specificarne il percorso completo nelle impostazioni dell'applicazione.

Tutte le informazioni sono fornite solo a scopo informativo. Né gli editori né l'autore sono responsabili per eventuali danni causati dai materiali di questo articolo.

Ora puoi firmare l'APK con questa chiave. Nella scheda Firma APK, seleziona il file appena generato, inserisci la password, l'alias della chiave e la password, quindi trova il file APK e fai clic con coraggio sul pulsante "Firma". Se tutto andrà bene, il pacco verrà firmato.

INFORMAZIONI

Dato che abbiamo firmato il pacchetto con la nostra chiave, questo entrerà in conflitto con l'applicazione originale, il che significa che quando proveremo ad aggiornare il software tramite il market, riceveremo un errore.

Una firma digitale è richiesta solo per il software di terze parti, quindi se stai modificando le applicazioni di sistema installate copiandole nella directory /system/app/, non è necessario firmarle.

Successivamente, scarica il pacchetto sul tuo smartphone, installalo e avvialo. Voilà, l'annuncio è sparito! Invece, però, è apparso un messaggio che non abbiamo Internet o non disponiamo delle autorizzazioni adeguate. In teoria questo potrebbe essere sufficiente, ma il messaggio sembra fastidioso e, a dire il vero, siamo stati fortunati con un'applicazione stupida. Il software normalmente scritto molto probabilmente chiarirà le proprie credenziali o verificherà la presenza di una connessione Internet e altrimenti si rifiuterà semplicemente di avviarsi. Come comportarsi in questo caso? Ovviamente modifica il codice.

In genere, gli autori delle applicazioni creano classi speciali per visualizzare annunci pubblicitari e chiamano metodi di queste classi quando viene avviata l'applicazione o una delle sue "attività" (in termini semplici, schermate dell'applicazione). Proviamo a trovare queste classi. Andiamo nella directory smali, poi com (org contiene solo la libreria grafica aperta cocos2d), poi kauf (qui è dov'è, perché questo è il nome dello sviluppatore e tutto il suo codice è lì) - ed eccolo qui, l'elenco di marketing. All'interno troviamo un mucchio di file con estensione smali. Si tratta di classi, e la più notevole di queste è la classe Ad.smali, dal cui nome è facile intuire che è quella che visualizza la pubblicità.

Potremmo cambiare la logica del suo funzionamento, ma sarebbe molto più semplice rimuovere semplicemente le chiamate a uno qualsiasi dei suoi metodi dall'applicazione stessa. Pertanto, lasciamo la directory marketing e andiamo alla directory delle particelle adiacente, quindi a virtualtorch. Il file MainActivity.smali merita qui un'attenzione particolare. Si tratta di una classe Android standard creata dall'SDK di Android e installata come punto di ingresso dell'applicazione (analoga alla funzione principale in C). Apri il file per la modifica.

All'interno c'è il codice smali (assemblatore locale). È abbastanza confuso e difficile da leggere a causa della sua natura di basso livello, quindi non lo studieremo, ma troveremo semplicemente tutti i riferimenti alla classe Ad nel codice e li commenteremo. Inseriamo nella ricerca la riga “Ad” e arriviamo alla riga 25:

Campo annuncio privato:Lcom/kauf/marketing/Ad;

Qui viene creato un campo dell'annuncio per memorizzare un oggetto della classe Ad. Commentiamo ponendo un segno ### davanti alla riga. Continuiamo la ricerca. Linea 423:

Nuova istanza v3, Lcom/kauf/marketing/Ad;

È qui che avviene la creazione dell'oggetto. Commentiamo. Continuiamo la ricerca e troviamo nelle righe 433, 435, 466, 468, 738, 740, 800 e 802 chiamate ai metodi della classe Ad. Commentiamo. Sembra che sia tutto. Salva. Ora è necessario rimontare la confezione e verificarne la funzionalità e la presenza di pubblicità. Per purezza dell'esperimento, restituiamo la riga rimossa da AndroidManifest.xml, assembliamo il pacchetto, lo firmiamo e lo installiamo.

La nostra cavia. Pubblicità visibile

Ops! La pubblicità è scomparsa solo durante l'esecuzione dell'applicazione, ma è rimasta nel menu principale, che vediamo quando lanciamo il software. Quindi, aspetta, ma il punto di ingresso è la classe MainActivity e l'annuncio è scomparso mentre l'applicazione era in esecuzione, ma è rimasto nel menu principale, quindi il punto di ingresso è diverso? Per identificare il vero punto di ingresso, riaprire il file AndroidManifest.xml. E sì, contiene le seguenti righe:

Dicono a noi (e, cosa più importante, all'androide) che un'attività denominata Start dovrebbe essere avviata in risposta alla generazione di un intento (evento) android.intent.action.MAIN dalla categoria android.intent.category.LAUNCHER. Questo evento viene generato quando si tocca l'icona dell'applicazione nel launcher, quindi determina il punto di ingresso, ovvero la classe Start. Molto probabilmente, il programmatore ha prima scritto un'applicazione senza menu principale, il cui punto di ingresso era la classe standard MainActivity, quindi ha aggiunto una nuova finestra (attività) contenente il menu e descritta nella classe Start, e l'ha inserita manualmente nella voce punto.

Apriamo il file Start.smali e cerchiamo nuovamente la riga “Ad”, troviamo nelle righe 153 e 155 una menzione della classe FirstAd. È presente anche nel codice sorgente e, a giudicare dal nome, è responsabile della visualizzazione degli annunci pubblicitari sulla schermata principale. Guardiamo oltre, c'è la creazione di un'istanza della classe FirstAd e un intento che, a seconda del contesto, è legato a questa istanza, e poi l'etichetta cond_10, il passaggio condizionale alla quale viene effettuato esattamente prima della creazione dell'istanza della classe:

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

Molto probabilmente, il programma calcola in qualche modo in modo casuale se la pubblicità deve essere mostrata sulla schermata principale e, in caso contrario, passa direttamente a cond_10. Ok, semplifichiamo il suo compito e sostituiamo la transizione condizionale con una incondizionata:

#if-ne p1, v0, :cond_10 vai a:cond_10

Non ci sono più riferimenti a FirstAd nel codice, quindi chiudiamo il file e rimontiamo la nostra torcia virtuale utilizzando apktool. Copialo sul tuo smartphone, installalo, avvialo. Voilà, tutta la pubblicità è scomparsa, per questo ci congratuliamo con tutti noi.

Risultati

Questo articolo è solo una breve introduzione ai metodi di hacking e modifica delle applicazioni Android. Molti problemi rimanevano dietro le quinte, come la rimozione della protezione, l'analisi del codice offuscato, la traduzione e la sostituzione delle risorse delle applicazioni, nonché la modifica delle applicazioni scritte utilizzando Android NDK. Tuttavia, avendo una conoscenza di base, è solo questione di tempo per capire tutto.

Da questo articolo imparerai in cosa consiste l'applicazione Android, come aprire un file APK e con quali programmi.

Cos'è un file APK?

APK è un formato del sistema operativo Android utilizzato per i file di applicazioni eseguibili archiviati e il nome del file stesso può essere qualsiasi cosa, ma l'estensione dovrebbe assomigliare solo a this.apk. Gli analoghi APK in altri sistemi operativi sono .msi in Windows, .sis in Symbian, .rpm o .deb in Linux.

Vediamo cosa c'è dentro
In effetti, .apk è un archivio ZIP, quindi puoi guardare il dispositivo interno utilizzando qualsiasi file manager o archiviatore, ad esempio WinRAR o l'applicazione mobile X-plore.




Vale la pena ricordare che l'accesso visivo alle risorse interne è estremamente limitato;

Diamo un'occhiata alla struttura
All'interno del file .apk vediamo una serie di file e cartelle, scopriamo a cosa servono:

  • AndroidManifest.xml è una sorta di “passaporto” dell'applicazione da cui puoi scoprire tutti i punti principali, requisiti, versione, permessi, ecc.
  • META-INF questo file contiene metadati, ovvero dati su dati, checksum, percorsi di dati, percorsi e checksum di risorse, certificati. Puoi aprire questo file con qualsiasi editor di testo, ma è consigliabile utilizzare Notepad++.
  • La cartella res contiene tutte le risorse del programma, grafiche, come icone, immagini, testo ed elementi dell'interfaccia grafica. Puoi anche accedere facilmente alla cartella.
  • classs.dex è il codice del programma applicativo diretto eseguito dalla macchina virtuale Dalvik VM; puoi vedere cosa c'è dentro questo file solo decompilando il file .apk di cui parleremo in altri articoli; resources.arsc - file XML compilato, questo file contiene dati su tutte le risorse coinvolte nel programma.
  • lib: una cartella con librerie native, alle cui risorse è possibile accedere solo quando si utilizzano programmi specializzati. Anche nell'APK potrebbero esserci file e cartelle come com, org, udk, ma non sempre.

Vediamo ora più nel dettaglio la struttura interna; per questo abbiamo bisogno di un programma di decompilazione, Java e un file APK. Lo strumento principale per disassemblare .apk è Apktool, ma questo programma funziona solo dalla linea, il che non è molto conveniente. Per un'analisi più rapida e conveniente, puoi utilizzare APKing, questo è sempre lo stesso Apktool, ma con la possibilità di lavorare dal menu contestuale.


E così installiamo APKing come qualsiasi applicazione per Windows e, dopo aver selezionato .apk, facciamo clic su di esso con il tasto destro del mouse e contemporaneamente Maiusc, dopodiché vedremo quanto segue:



E seleziona l'azione richiesta, ad esempio, decompila completamente, quindi il programma completerà l'operazione e creerà una cartella con lo stesso nome.



Aprendo la cartella avremo accesso a tutte le risorse del file APK.



Ora tutti i file di testo possono essere modificati, osservando le regole di base, puoi utilizzare il popolare programma Notepad++, ad esempio considera AndroidManifest.xml

Ho menzionato l'applicazione SmartAPKTool. Può estrarre, comprimere e firmare file apk modificati. Il suo vantaggio è la presenza di un'interfaccia grafica. Tuttavia, c'è un grave inconveniente. SmartAPKTool non è stato aggiornato da molto tempo e il programma non decomprime e non comprime correttamente le applicazioni per le ultime versioni di Android. Pertanto, qui cercherò di spiegare come utilizzare l'applicazione per questi scopi apktool.

Nota 1.
Il programma SmartAPKTool è comunque comodo da utilizzare per firmare i file apk raccolti.
Nota 2.
I collegamenti ai programmi menzionati nell'articolo sono ↓

Programma apktool non ha un'interfaccia grafica. Questo è uno svantaggio per coloro che non sono abituati a lavorare con la riga di comando. Ma c'è anche un vantaggio: a differenza di SmartAPKTool, vedremo tutti gli errori, il che significa che sapremo cosa correggere.

Scarichiamo due archivi: uno comune per tutti i sistemi, l'altro per il nostro sistema (Windows nell'esempio):

Scompattiamo entrambi gli archivi nella stessa cartella vuota (nel nostro esempio C:\apktool\). Il suo contenuto dovrebbe assomigliare a questo:

Da ora in poi possiamo usare il programma apktool.

Nota 3.
Gli utenti delle versioni a 64 bit di Linux dovranno installare il pacchetto ia32-libs:

sudo apt-get install ia32-libs

Nella stessa cartella inseriamo il file che dobbiamo decomprimere. Ad esempio, lascia che si chiami orig.apk
Tieni premuto il tasto Maiusc e fai clic con il pulsante destro del mouse su qualsiasi spazio vuoto nella cartella (non fare clic sui file!). Successivamente, seleziona "Apri finestra di comando". Nella console che appare, digita:

apktool decodifica orig.apk

Il file verrà decompresso:

Ora abbiamo una cartella con l'applicazione decompressa nella directory C:\apktool\. Ha lo stesso nome del file sorgente, meno l'estensione: C:\apktool\orig\ . Possiamo modificare i file sorgente come descritto nell'articolo Android: come installare due applicazioni identiche su un telefono. Dopo aver apportato le modifiche, raccoglieremo una copia dell'applicazione impacchettando i file sorgente in un apk:

apktool build risultato originale.apk

Qui result.apk è il nome del file che abbiamo trovato per la build della copia. Se non ci sono errori, il file verrà assemblato:

Il resto esula dallo scopo dell'articolo:

  1. Se si verificano errori durante l'assemblaggio, è necessario trovarne la causa e correggerli.
  2. Tutto ciò che resta da fare è firmare il file result.apk risultante. Questo può essere fatto utilizzando SmartAPKTool come menzionato sopra; Tutto è intuitivo. Esistono anche altri modi per firmare un file apk.
  3. Possono verificarsi errori anche durante l'installazione di una copia, durante il suo avvio o il suo funzionamento. Devono essere catturati utilizzando l'utilità adb inclusa nell'SDK di Android.

È necessario firmare l'applicazione, altrimenti non verrà installata. Gli errori non si verificano così spesso e i problemi più comuni che li causano sono descritti nell'articolo

Nel processo di utilizzo di vari firmware per dispositivi Android, a volte diventa necessario modificare in un modo o nell'altro le applicazioni di sistema integrate nel sistema operativo. In questo materiale considereremo questo problema in dettaglio.

Naturalmente, è necessario smontare e rimontare il file APK di sistema affinché funzioni correttamente e stabilmente. Scopriamo passo dopo passo cosa è necessario fare per questo.

Innanzitutto, è necessario eseguire il processo di deodexizzazione dei file APK del sistema. Ti diremo come farlo.

Quindi, il file .apk è stato deodexato e decompilato. Analizziamo l'applicazione che ci interessa, lasciamole il nome, per chiarezza di esempio, struttura- ris. apk. Lo ricordiamo nella nostra testa come l'applicazione originale.

Diciamo che abbiamo apportato tutte le modifiche necessarie all'applicazione. Parleremo più approfonditamente di tutti gli aspetti dei file APK in. Ora devi rimetterlo in valigia. Ricordiamo nella nostra mente l'applicazione confezionata finita come applicazione modificata 2.

Ora spiegheremo perché è stato necessario ricordare mentalmente le applicazioni come originali e modificate 2. L'applicazione compilata dal programma ApkTool (o utilizzando un'estensione dell'interfaccia utente grafica come SmartApkTool) non funzionerà, ma questo non è un problema. Eseguiamo le seguenti azioni:

Raccogliere nuovamente tali file nell'APK è abbastanza semplice. Per fare ciò è necessario eseguire apktool con l'apposito flag di build e passargli il percorso della cartella con all'interno l'applicazione decompilata. Ad esempio, se abbiamo una cartella dell'app che si trova nella stessa directory di apktool, il comando sarebbe simile a questo:

Conchiglia

java -jar apktool.jar b app

java - jar apktool .jar b app

Dopo l'assemblaggio, il file APK finito si troverà nella directory app/crea. Successivamente devi firmare l'APK. Questo viene fatto per garantire che l'applicazione funzioni su dispositivi in ​​cui è vietato il debug. Cioè, è vietato avviare applicazioni non firmate su tali dispositivi. Puoi leggere ulteriori informazioni sui certificati digitali e sulla procedura di firma dei file qui.

Firmare un file è molto semplice: esiste un'utilità speciale per questo chiamata signapk. Deve essere lanciato passando prima i certificati come argomenti, poi il percorso dell'applicazione e infine il percorso dell'applicazione firmata (il risultato, dove salvarla). Sembra qualcosa del genere:

Conchiglia

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

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

Dove puoi ottenere un certificato del genere, chiedi? I certificati possono essere trovati su Internet. Oppure generalo tu stesso. È possibile trovare istruzioni dettagliate sulla configurazione e sulla generazione di tutti i file necessari, ad esempio, .

Conclusione

Come puoi vedere, decompilare e assemblare i file APK è un processo abbastanza semplice che, inoltre, può essere automatizzato, facilitando il lavoro del ricercatore. Anche la macchina virtuale Dalvik stessa è facile da apprendere e da aprire, il che, da un lato, riduce le barriere all'ingresso per gli sviluppatori, dall'altro è la ragione principale di una percentuale così elevata di pirateria sulla piattaforma Android. Questo è in parte il motivo per cui gli sviluppatori di giochi, ad esempio, generalmente non sono interessati a rilasciare giochi interessanti con una trama. È molto più redditizio, dato l'attuale atteggiamento degli utenti, rivettare le aziende agricole con donazioni sorprendentemente simili tra loro. Pertanto, acquistiamo applicazioni, supportiamo gli sviluppatori e, di conseguenza, otteniamo contenuti interessanti. Ma non c’è assolutamente bisogno di donare!

Grazie a tutti, ci vediamo ancora.