Anàlisi de fitxers APK amb apktool¶
En aquesta pràctica veurem les vulnerabilitats a les que es troben exposats els fitxers APK (Android Application Package), que contenen aplicacions per dispositius Android.
Creació d'una aplicació amb APP Inventor¶
Per dur a terme una prova de concepte necessitarem un fitxer APK.
El podem obtenir de diverses fonts, per exemple extraient-lo d'un dispositiu on s'hagi instal·lat, descarregant-lo de repositoris com APKMirror, o bé creant-lo nosaltres mateixos utilitzant algun entorn de desenvolupament com Android Studio o una aplicació web com APP Inventor.
MIT App Inventor és un entorn integrat de desenvolupament gratuït que permet crear aplicacions per Android de forma visual. A partir d'un conjunt d'eines bàsiques, l'usuari va enllaçant un conjunt de blocs per crear l'aplicació.
Per crear la nostra aplicació de prova en primer lloc haurem de registrar-nos a la web amb una adreça de correu. Un cop fer això, podrem crear la nostra primera aplicació clicant el botó "New Project".
Interfície l'APP Inventor¶
La pantalla que se'ns presenta a continuació està dividida en els següents blocs:
- Paleta de components: conté una lista de components agrupats per categoria (interfície d'usuari, disposició, mitjans, emmagatzematge, etc.) que podem arrossegar fins a la pantalla per crear la interfície de l'aplicació. Alguns són visibles (botons, etiquetes, etc.) i altres no (càmera, sons, etc.).
- Pantalla del dispositiu: mostra els components a la pantalla del dispositiu, que podem arrossegar per desplaçar i ordenar.
- Jerarquia de components de l'aplicació: mostra en forma d'arbre tots els components que utilitza la nostra pantalla. En clicar-los s'actualiza la llista de propietats, i també tenim botons per canviar el nom d'un component o esborrar-lo.
- Propietats del component seleccionat: conté una llista amb totes les propietats modificables del component seleccionat, de manera que en podem canviar el seu contingut, mida, posició o forma.
- Mode Disseny o Blocs: permet canviar entre el disseny de la interfície i els diagrames de blocs que defineixen el comportament de l'aplicació (l'equivalent al codi font).
Aplicació càmera de fotos¶
Crearem pas per pas una aplicació que permetrà a l'usuari fer una foto amb la càmera del dispositiu, però només si un interruptor està activat.
Els components que utilitzarà la nostra aplicació són:
-
Layout /
VerticalArrangement
Ens permet organitzar la resta de components, seleccionant una alineació horitzontal i vertical. -
User Interface /
Button
Element cliclable, li podem posar un text -
User Interface /
Switch
Interruptor amb un missatge, pot estar en estat deOn
oOff
-
Media /
Camera
Aquest component no és visible en pantalla, però ens dona accés a la càmera. Apareix a la part inferior dins de la zona "Non-visible components"
L'aspecte de la interfície un cop creats tots els components hauria de ser similar a aquest:
Diagrama de blocs¶
Un cop creada la interfície, canviem a l'editor de blocs amb el botó de la part superior dreta.
L'editor de blocs es divideix en:
-
un selector d'elements de bloc (banda esquerra), que conté dos grups:
- blocs integrats (built-in)
- blocs corresponents als components de la interfície
-
un editor de connexions de blocs (part central)
Fent clic a un element de bloc ens apareixeran les possibles variants que podem utilitzar.
La nostra aplicació utilitzarà 2 blocs:
1. Bloc d'inicialització¶
Aquest bloc demanarà a l'usuari permís per utilitzar la càmera quan s'obre l'aplicació.
Un cop un permís es concedeix, el sistema ho recorda i ja no ens el tornarà a demanar fins que sigui revocat.
2. Bloc de clic al botó¶
Aquest bloc comprovarà si l'interruptor està en posició On
i si és així farà una foto amb el component càmera. Si l'interruptor està en Off
l'aplicació no ha de fer res.
Generació de l'APK¶
Un cop construida l'aplicació, l'exportarem en format APK per poder-la instal·lar a un dispositiu o emulador d'Android.
Per fer això fem clic al botó desplegable Build de la part superior de la pantalla, i seleccionem l'opció "Android App (.apk)":
Un cop acabat el procés de compilat remot als servidors d'APP Inventor, podem descarregar el fitxer resultant amb el botó "Download .apk now"
Estructura d'un fitxer APK¶
Els fitxers APK són internament fitxers comprimits en format ZIP, però amb l'extensió .apk
Això ho podem comprovar si examinem la capçalera de qualsevol d'aquests fitxers.
Per exemple, amb VS Code podem instal·lar l'extensió Hex Editor, que ens permet obrir fitxers en format hexadecimal. En fer-ho veurem que els 2 primers bytes contenen els codis hexadecimals 50 4B
, que corresponen als caràcters ASCII PK
:
El valor dels 2 primers bytes d'un fitxer serveixen per identificar-ne el format independentment de l'extesió de l'arxiu, i s'anomenen també magic numbers.
Si busquem a una taula de magic numbers trobarem que PK
correspon a un fitxer comprimit en format ZIP.
Extracció de dades amb apktool¶
Encara que podem obrir i descomprimir un fitxer .apk amb qualsevol descompressor compatible amb el format zip, ens trobarem amb que podem veure l'estructura de fitxers però no examinar el seu contingut. Això és degut a que aquest es troba comprimit i emmagatzemat en binari.
Contingut del fitxer AndroidManifest.xml sense descodificar: