El formato APK

Las aplicaciones Android se distribuyen en ficheros .APK. Estos ficheros suelen distribuirse por cualquier medio, aunque la opción más habitual  es obtenerlos a través de Google Play.

Un fichero APK es una variante del formato JAR de Java. No es más que un fichero en formato comprimido ZIP donde se ha empaquetado cuatro tipos de información: El código, los recursos, la firma digital y el fichero de manifiesto. Vamos a realizar algunos ejercicios para aprender más sobre los ficheros APK.

 

Ejercicio paso a paso: Descargar un APK usando AirDroid.

  1.  Utilizando un terminal real abre Google Play e instala la aplicación de la que quieres obtener su fichero .apk. En este capítulo vamos a utilizar como ejemplo la aplicación Apalabrados (en concreto, hemos descargado la versión 1.8.1).
  2.  Una de las formas más sencillas de obtener un fichero .apk es por medio de la aplicación AirDroid. Utiliza de nuevo Google Play para descargarla. Además, AirDroid es una espléndida herramienta que te permitirá gestionar tu terminal desde un ordenador personal.
  3. Abre la dirección http://web.airdroid.com desde un navegador Web de tu ordenador. En el centro de la pantalla aparecerá el siguiente cuadro de dialogo:

  1.  Ejecuta en el terminal móvil la aplicaciónAirDroid que acabas de instalar. Pulsa en el botón Escanear código QR. Se activará la cámara. Acércala al monitor hasta que el código QR que se muestra en la página Web sea reconocido. Esto permitirá establecer una conexión entre ambos dispositivos a través de la red WiFi.
  2. Ya podemos realizar gran número de acciones del teléfono desde nuestro ordenador personal. Por ejemplo, podemos gestionar SMS, música, contactos, ficheros, tonos de llamada, portapapeles, … Dedica unos minutos a explorar las diferentes opciones que nos permite esta gran aplicación.
  3. En este ejercicio nos interesa la gestión de aplicaciones, para lo que has de pulsar el botón Apps:

  1. Se mostrará una lista con todas las aplicaciones instaladas en el terminal. Busca la aplicación Apalabrados y pulsa sobre el botón Download.

El fichero Apalabrados.apk será descargado a tu ordenador.

video[Tutorial] AirDroid - Que es, como descargarlo y usarlo

 

Ejercicio paso a paso: Analisis del contenido de un APK.

  1. Arranca un programa que te permita trabajar con ficheros comprimidos. En este ejercicio hemos utilizado WinRAR
  2. Con este programa abre el fichero Apalabrados.apk. Por ejemplo arrastrándolo el fichero sobre WinRAR. El resultado ha de ser similar al siguiente:

Esta estructura de ficheros y carpetas es similar a la que encontramos en un proyecto Android, aunque, tiene sus diferencias. En todo fichero APK siempre se incluyen los siguientes elementos:

assetsy res: Contiene los ficheros de recursos de la aplicación. Conviene recordar que los ficheros XML dentro de la carpeta res no están en formato de texto, si no que se encuentran comprimidos. 

META-INF: Certificado digital que se ha utilizado para firmar la aplicación. Por supuesto, solo se incluye la clave pública. La clave privada ha de ser custodiada por el programador de la aplicación.

clases.dex: Contiene el código de las clases de la aplicación. Los diferentes ficheros Java han sido compilados a byte-codes de la máquina virtual Dalvic y agrupados en un fichero DEX.

AdroidManifest.xml: Versión comprimida del fichero de manifiesto.

  1. Navega por las carpetas res y assets para descubrir los diferentes recursos incluidos en esta aplicación.
  2. Trata de abrir un fichero XML dentro de la carpeta res o el AdroidManifest.xml. Verifica que no se trata de un fichero de texto.

Antes de realizar el siguiente paso conviene repasar el concepto de firma digital y cómo las aplicaciones han de ser firmadas antes de su publicación. Si no dominas estos conceptos puedes ver los siguientes videos.

video[Tutorial] La firma digital

video[Tutorial] Firmar una aplicación Android

Ejercicio paso a paso: Estudio de a firma digital de una aplicación.

  1. Abre con un visor de ficheros comprimidos la aplicación Apalabrados.apk.
  2. Entra dentro de la carpeta META-INF. Encontrarás los siguientes tres ficheros:

Los ficheros de esta carpeta corresponden a la firma digital de una aplicación Android. De arriba abajo podemos ver el archivo de manifiesto (.MF), el archivo de firma (.SF) y el certificado digital (.RSA).

  1.  Con un editor de texto abre el archivo de manifiesto, MANIFEST.MF. Verás una lista de todos los archivos incluidos en el paquete, junto con su huella  digital en formato resumen SHA1: 
Manifest-Version: 1.0
Created-By: 1.6.0_29 (Sun Microsystems Inc.)
 
Name: res/drawable/facebook_icon.png
SHA1-Digest: 9jTbeG4b8nJZlZss16UPfagqlUs=
 
Name: res/drawable/com_facebook_picker_list_longpressed.9.png
SHA1-Digest: /uU9+qqC9MjC0cwR3L+DskCy9xM=
 
Name: res/drawable/square_d.xml
SHA1-Digest: kl+o4e3OjU9gil/l+A/AUGBcI8U=
 
Name: res/drawable-ldpi/warply_notifications.png
SHA1-Digest: qaM+xgxBdXq0EfBbTdLffAJ0D70=
 
...
  1. Abre el archivo de firma, APAL.SF. Otra vez, verás una lista de todos los archivos en el paquete, junto con un resumen SHA1. Pero esta vez, cada resumen SHA1 se ha calculado a partir de las tres líneas que describe el fichero en MANIFEST.MF, en lugar de utilizar el fichero en sí. El archivo de firma también contienen un valor de resumen SHA1 para todo el fichero de manifiesto. Este valor se indica en el encabezado SHA1-Digest-Manifest.
Signature-Version: 1.0
SHA1-Digest-Manifest-Main-Attributes: ngANqza5/whaYZFfNQhzhT/iRBA=
Created-By: 1.6.0_29 (Sun Microsystems Inc.)
SHA1-Digest-Manifest: cbci83Z5qhSYsrmSxoegFDp5I3c=
Name: res/drawable/facebook_icon.png
SHA1-Digest: PDgDHoip/6HBjLGwRLz06l35sy4=
Name: res/drawable/com_facebook_picker_list_longpressed.9.png
SHA1-Digest: 2CGPL/jp5oPTQ2ltrIIWxbJ07UM=
Name: res/drawable/square_d.xml
SHA1-Digest: 5UTm9fULZG3sQPFpSsTpofL7Yro=
Name: res/drawable-ldpi/warply_notifications.png
SHA1-Digest: 4KFSugOGx0l271gbgNaqEUvi8Fk=
...
  1. Finalmente, el archivo APAL.RSA contiene certificado digital. Dentro de este fichero se incluye dos elementos esenciales para la verificación.
  •  la firma del fichero .SF
  •  la clave pública que permite verificar la firma.
  1.  Vamos a utilizar el comando keytoolpara ver el contenido del certificado digital. Para ello, descomprime el fichero APAL.RSA en una carpeta y desde la línea de comando ejecuta algo similar a:

 

C:\>"C:\Program Files (x86)\Java\jre7\bin\keytool" -printcert -file APAL.RSA
Propietario: O=Etermax
Emisor: O=Etermax
Número de serie: 4e861907
Válido desde: Fri Sep 30 21:31:19 CEST 2011 hasta: Sun Sep 06 21:31:19 CEST 2111
Huellas digitales del Certificado:
         MD5: 05:0A:16:21:5C:61:4C:76:9D:3E:7C:38:65:5F:61:ED
         SHA1: 13:A3:A4:55:F0:C1:26:26:42:2C:52:C4:54:4C:DC:B5:A2:27:52:25
         SHA256: 6D:56:0E:33:C6:C6:9C:A4:6F:37:98:8B:DF:42:CC:8D:E2:BC:BB:E8: 1D:87:36:D6:42:44:18:02:67:D1:F3:EE
         Nombre del Algoritmo de Firma: SHA1withRSA
         Versión: 3

Recuerda que este certificado es un certificado auto-firmado, es decir, no es verificado por ninguna autoridad de certificación. Esto no nos permite asegurar que el autor de la aplicación sea la empresa Etermax. No obstante, solo el que disponga de la clave privada de este certificado, podrá volver a firmar la aplicación. Por lo tanto, si cambiamos un solo bit del fichero APK se romperá la firma digital, lo que impedirá instalar la aplicación. En los siguientes apartados vamos a modificar parte de la aplicación. Para poder instalarla en nuestro dispositivo vamos a tener que firmarla de nuevo con nuestro propio certificado. 

Preguntas de repaso y reflexión: El formato APK

Pincha aquí para hacer un test.