Smali / Baksmali 2.0b6: Come decompilare/compilare un file JAR
Cosa ci serve per poter iniziare:
1)7-Zip per aprire i file .zip e .jar e scaricabile da qui. 2) Il nostro pacchetto smali-baksmali-2.0b6 che potete scaricare da qui oppure i singoli file smali-2.0b6.jar e baksmali-2.0b6.jar dalla pagina ufficiale qui . 3)Notepad++ che potete scaricare da qui. 5) Il file android.policy.jar che trovate all'interno della ROM in \system\framework\ e che ci servirà per l'esempio pratico.
Installazione di Smali/Baksmali 2.0b6:
In realtà non si tratta di una vera e propria installazione ma della predisposizione della cartella di lavoro, ad ogni modo apriamo con 7zip il file smali-baksmali-2.0b6.zip appena scaricato ed estraiamo il contenuto sul desktop, dentro la cartella smali-baksmali appena estratta troverete già necessari per poter lavorare più un file di testo con le istruzioni base.
Supponiamo di voler decompilare il file android.policy.jar, preleviamo il file dalla cartella \system\framework\ della ROM e copiamolo nella nostra cartella di lavoro smali-baksmali, apriamo la finestra di comando tenendo premuto il tasto Shift facendo click col tasto destro del mouse su Apri finestra di comando qui
verra creata la cartella android.policy contenente tutti i file decompilati, modificate il file voluto con Notepad++ (es. \com\android\internal\policy\impl\ PhoneWindowManager.smali vedi Guida STATUS BAR TRASPARENTE) e salvate quindi ricompilare digitando nella finestra di comando
questo produrra il file classes.dex modificato, a questo punto abbiamo quasi terminato.
Per completare dobbiamo semplicemente aprire il file android.policy.jar originale con 7zip e trascinare al suo interno il file classes.dex appena creato sovrascrivendo l'originale.
FINITO !!! ;)
Quote:
Credo di non aver dimenticato nulla, se qualcuno vuole provare a decompilare e ricompilare può cominciare a realizzare ad esempio la modifica per la status bar trasparente lavorando sul file android.policy.jar.
Segnalatemi eventuali errori o dimenticanze così cerchero di integrare e/o correggere prima possibile magari tramite MP per non sporcare il Thread.
Spero con questa guida di aver fatto cosa gradita e che apprezziate l'impegno e lo sforzo non indifferente.
Saluti,
Paola.
26-09-13, 20:05
enricocid
complimenti Paola... i tuoi threads crescono e diventano col tempo un riferimento qui su androidiani. :-)
Ti saluto,
Enrico.
04-10-13, 12:30
Brizzo88
Ciao e grazie a tutti in particolare a Paola per l'ottimo lavoro svolto.
Avrei bisogno di una spiegazione più dettagliata riguardo al framework-res.
Mi spiego meglio. Per un lavoro di tesi avrei bisogno di decompilare modificare e ricompilare degli apk. Questo deve essere fatto non per la specifica rom ma per tutti i dispositivi quindi diverse rom e diverse versioni di android. Si può eseguire questa procedura con un framework-res unico o per ogni rom è necessario il suo specifico framework? Nel secondo caso c'è un modo per estrarlo facilmente dal dispositivo?
Grazie
04-10-13, 13:21
enricocid
Quote:
Originariamente inviato da Brizzo88
Ciao e grazie a tutti in particolare a Paola per l'ottimo lavoro svolto.
Avrei bisogno di una spiegazione più dettagliata riguardo al framework-res.
Mi spiego meglio. Per un lavoro di tesi avrei bisogno di decompilare modificare e ricompilare degli apk. Questo deve essere fatto non per la specifica rom ma per tutti i dispositivi quindi diverse rom e diverse versioni di android. Si può eseguire questa procedura con un framework-res unico o per ogni rom è necessario il suo specifico framework? Nel secondo caso c'è un modo per estrarlo facilmente dal dispositivo?
Grazie
/system/framework contien vari file .jar e framework-res.apk, quest'ultimo è molto importante, contiene infatti gli elementi/risorse utili per il corretto funzionamento dell'interfaccia Grafica utente (GUI), senza di questi applicazioni di sistema come la systemUI non funzionerebbero. Quindi si, ogni rom ha il suo framework e dovresti usare quello ogni volta che modifichi un file di una data ROM, altrimenti quell'elemento, che è stato compilato sul framework-res della rom e che quindi dipende anche da modifiche fatte dal dev su quest'ultima (non so, magari degli smali contenuti nel framework-res e delle activity che servono ad altri pezzi di android), non funzionerebbe..
per estrarlo puoi usare un root explorer... io uso root explorer, perché è facile... ma è a pagamento... ci dovrebbero essere root explorer vari gratis, ma sicneramente ne ignoro l'esistenza perché uso questo da sempre...
oppure direttamente dal pacchetto della rom, usando 7zip se usi windws o xarchiver, p7zip su linux (ci sono vari programmi)
oppure, metodo piu difficile, usare l'adb interface
e il comando adb pull < remote > < local > per copiare da dispositivo a pc ;-)
04-10-13, 14:32
Brizzo88
Grazie della risposta veloce. Avrei però una necessità sempre per richieste della tesi. Esiste un modo per estrarre il framework direttamente dal dispositivo e senza che quest'ultimo abbia privilegi di root?
04-10-13, 14:53
enricocid
Quote:
Originariamente inviato da Brizzo88
Grazie della risposta veloce. Avrei però una necessità sempre per richieste della tesi. Esiste un modo per estrarre il framework direttamente dal dispositivo e senza che quest'ultimo abbia privilegi di root?
devi usare i comandi adb, ti linko una guida completa con tutti i comandi, l'unica cosa da fare è attivare le opzioni da sviluppatore (tappando non ricordo quante volte sulla versione di android) e attivare il debug usb
pero' ci sono comandi, ad es. la disabilitazione di app di sistema da linea di comando che ha bisogno di permessi di amministratore..
adb shell
su
pm disable nomeapplicazione
pero, una volta che hai installato i drivers per il tuo nexus, lo colleghi, verifichi che sia connesso con adb devices e usi
adb pull /system/framework/framework-res.apk
04-10-13, 15:00
Brizzo88
Fantastico grazie! Ci provo e ti faccio sapere!
Nel mentre però ti chiedo un altra cosa.
Perchè questa dipendenza dal framework? Nel senso che io dovrei modificare codice in delle app come può essere un gioco o un'app che accede a internet impedendolo in un determinato caso. La parte grafica non mi interessa non lo tocco il framework. Non esiste un modo che non necessiti del framework? Che prenda l'app (es Quickoffice), la decompili, e la ricompili?
Io ci ho provato con questo multitool ma una volta ricompilata (con framework non del mio cell e senza apportare modifiche ma solamente decompilata e ricompilata) non me la fa installare mi dice installazione non riuscita!
App come quickoffice sono considerate di sistema o non di sistema?
Grazie ancora.