Unidad 4 - Actividad 4
Unidad 4 - Actividad 4
Unidad 4 - Actividad 4
AVILÉS
Principado de Asturias
UNIDAD 4:
DETECCIÓN DE PROBLEMAS DE SEGURIDAD
EN APLICACIONES PARA DISPOSITIVOS
MÓVILES
ACTIVIDAD 4
Enunciado de la actividad
En este apartado se pretende comenzar a trabajar con Android Studio con el fin de
familiarizarse con el entorno de desarrollo. Para ello, se va a realizar la aplicación estándar de
iniciación por excelencia: un “Hola, mundo”.
Como prerrequisito de esta actividad, es precioso que Android Studio esté instalado,
actualizado y configurado. A partir de aquí, se siguen los pasos que se enumeran a
continuación:
2. Una vez pulsado Next, el asistente lleva a los detalles del proyecto, los cuales se describen a
continuación:
interactúa con solo una de estas actividades y va navegando entre ellas. El sistema
llamará al método onCreate() cuando comience su ejecución. Es donde se debe realizar
la inicialización y la configuración de la interfaz del usuario. Las actividades van a ser
las encargadas de interactuar con el usuario.
4. Lo primero que hay que hacer al sobrescribir un método suele ser llamar al método de
la clase de la que hemos heredado. Para referirnos a la clase padre se usa la palabra
reservada super. El método termina indicando que la actividad va a visualizarse en una
determinada vista. Esta vista está definida en los recursos.
Antes de continuar, se van a enumerar y describir una serie de elementos clave que resultan
imprescindibles para desarrollar aplicaciones en Android.
Vista (View)
Las vistas son los elementos que componen la interfaz de usuario de una aplicación: por
ejemplo, un botón o una entrada de texto. Todas las vistas van a ser objetos descendientes
de la clase View, y, por tanto, pueden ser definidas utilizando código Java. Sin embargo, lo
habitual será definir las vistas utilizando un fichero XML y dejar que el sistema cree los
objetos a partir de este fichero. Esta forma de trabajar es muy similar a la definición de una
página web utilizando código HTML.
Layout
Actividad (Activity)
Fragmentos (Fragment)
La llegada de las tabletas vino con el problema de que las aplicaciones de Android ahora
deben soportar pantallas más grandes. Si se diseña una aplicación pensada para un
dispositivo móvil y luego se ejecuta en una tableta, el resultado no suele resultar
satisfactorio.
Para ayudar al diseñador a resolver este problema, en la versión 3.0 de Android aparecen
los fragments. Un fragment está formado por la unión de varias vistas para crear un bloque
funcional de la interfaz de usuario. Una vez creados los fragments, se pueden combinar uno
o varios dentro de una actividad, según el tamaño de pantalla disponible. El uso de
fragments puede ser algo complejo, por lo que es recomendable dominar primero conceptos
como actividad, vista y layout antes de abordar su aprendizaje. No obstante, es un concepto
importante en Android y todo programador en esta plataforma ha de saber utilizarlos.
Servicio (Service)
Un servicio es un proceso que se ejecuta “detrás”, sin la necesidad de una interacción con el
usuario. Es algo parecido a un demonio en Unix o a un servicio en Windows. Se utilizan
cuando se necesita tener en ejecución un código de manera continua, aunque el usuario
cambie de actividad. En Android existen dos tipos de servicios: servicios locales, que son
ejecutados en el mismo proceso, y servicios remotos, que son ejecutados en procesos
separados.
Intención (Intent)
Una intención representa la voluntad de realizar alguna acción; como realizar una llamada
de teléfono, visualizar una página web. Se utiliza cada vez que se necesite:
Los componentes lanzados pueden ser internos o externos a nuestra aplicación. También
utilizaremos las intenciones para el intercambio de información entre estos componentes.
Un receptor de anuncios recibe anuncios broadcast y reacciona ante ellos. Los anuncios
broadcast pueden ser originados por el sistema (por ejemplo: Batería baja, Llamada
entrante) o por las aplicaciones. Las aplicaciones también pueden crear y lanzar nuevos
Página 5
Centro Integrado de Formación Profesional Avilés
Puesta en Producción Segura ACTIVIDAD 4
Unidad 4: Detección de problemas de seguridad en aplicaciones para dispositivos móviles
2. Pulsar a continuación el botón Create Virtual Device para crear un nuevo dispositivo
virtual. Aparecerá una ventana similar a la siguiente:
Página 6
Centro Integrado de Formación Profesional Avilés
Puesta en Producción Segura ACTIVIDAD 4
Unidad 4: Detección de problemas de seguridad en aplicaciones para dispositivos móviles
3. Pulsar Next para pasar a la siguiente ventana, donde se podrá seleccionar la imagen del
sistema que tendrá el dispositivo y el tipo de procesador (Nexus 5 R API 30 en este
ejemplo):
4. Pulsar Next para pasar a la última ventana. Se mostrará un resumen con las opciones
seleccionadas, permitiendo además seleccionar la orientación inicial del Virtual Device,
si se quiere usar el coprocesador gráfico (GPU) del computador anfitrión o si se dibuja
un marco alrededor del emulador simulando un dispositivo real.
5. En Show Advanced Settings pueden verse configuraciones adicionales.
Página 7
Centro Integrado de Formación Profesional Avilés
Puesta en Producción Segura ACTIVIDAD 4
Unidad 4: Detección de problemas de seguridad en aplicaciones para dispositivos móviles
Es posible hacer que el emulador utilice la cámara o teclado del ordenador además de
limitar la velocidad y latencia en el acceso a la red. También se puede ajustar la memoria
utilizada: RAM total del dispositivo, memoria dinámica usada por Java y memoria para
almacenamiento, tanto interna como externa.
6. Una vez introducida la configuración deseada, pulsar el botón Finish. Aparecerá el
dispositivo creado en la lista.
7. Para arrancarlo, pulsar el botón con forma de triángulo verde que se encuentra en la
columna de la derecha. Es posible que pregunte por la entrada de vídeo para emular la
cámara del AVD.
8. Para modificar el texto por defecto, hay que acudir a la zona de recursos del proyecto,
res > layout y al archivo activity_main.xml
Página 8
Centro Integrado de Formación Profesional Avilés
Puesta en Producción Segura ACTIVIDAD 4
Unidad 4: Detección de problemas de seguridad en aplicaciones para dispositivos móviles
Para ver una imagen similar a la de la figura, hay que abrir la vista de diseño (Design).
Se modifica la propiedad text ignorando el mensaje que muestra sobre que la cadena
está hardcoded (este mensaje deriva de que no es una buena práctica poner el texto tal
cual, pero no es el objetivo de este primer proyecto).
9. Ejecutar el proyecto en el emulador es tan simple como seleccionar primeramente aquel
y lanzar el botón de Run app, tal como se ve en la figura.
Este proceso suele ser muy largo y costoso ya que tiene que lanzar Gradle con una
buena cantidad de subprocesos. Hay que ser muy paciente con ello y en ocasiones, si el
proceso se bloquea, reiniciar Android Studio. Al terminar, el emulador debe mostrar
una salida similar a la de la siguiente figura:
Página 9
Centro Integrado de Formación Profesional Avilés
Puesta en Producción Segura ACTIVIDAD 4
Unidad 4: Detección de problemas de seguridad en aplicaciones para dispositivos móviles
En esta actividad se muestra cómo se puede llamar a un servicio web desde una aplicación
Android desarrollada en Android Studio.
Como norma general, el transporte de los datos se realiza a través del protocolo HTTP y la
representación de los datos mediante sistemas como XML/JSON. Sin embargo, no hay reglas
fijas en los servicios web y en la práctica no tiene por qué ser así.
Se pueden dar tres enfoques diferentes a la hora de definir un servicio web. En ellos
precisamente se basa lo que se conocen como arquitecturas orientadas a servicios (SOA –
Service Oriented Arquitecture). Los tres enfoques corresponden a:
• Llamadas a procedimiento remotos (RPC): Se enfoca el servicio web como una colección
de operaciones o procedimientos que pueden ser invocados desde una máquina diferente
de donde se ejecutan.
• SOAP. Protocolo de acceso a objetos sencillos (Simple Object Access Protocolo). Mientras
que, en RPC la unidad básica de interacción es la operación, en SOAP, la unidad de
interacción pasa a ser el mensaje. Por lo tanto, en muchos casos se conocen como servicios
orientados a mensaje. Cada uno de los mensajes que se va a utilizar ha de ser definido
siguiendo una estricta sintaxis expresada en XML.
• Transferencia de estado representacional (REST). En REST se utiliza directamente el
protocolo HTTP, por medio de sus operaciones GET, POST, PUT y DELETE. En
consecuencia, esta arquitectura se centra en la solicitud de recursos, en lugar de las
operaciones o los mensajes de las alternativas anteriores.
Este planteamiento supone seguir los principios de la aplicación WWW, pero, en lugar de
solicitar páginas web, se solicitan servicios web.
Página 10
Centro Integrado de Formación Profesional Avilés
Puesta en Producción Segura ACTIVIDAD 4
Unidad 4: Detección de problemas de seguridad en aplicaciones para dispositivos móviles
• Transporte de datos mediante HTTP, utilizando las operaciones de este protocolo (GET,
POST, PUT y DELETE).
• Los diferentes servicios son invocados mediante una URI que identifica un recurso en
Internet.
• La codificación de datos es identificada mediante tipos MIME (text/html, image/gif, etc.)
Entre los distintos servicios, el primero permite obtener datos sobre una estación
meteorológica de la Aemet en un período dado:
Página 11
Centro Integrado de Formación Profesional Avilés
Puesta en Producción Segura ACTIVIDAD 4
Unidad 4: Detección de problemas de seguridad en aplicaciones para dispositivos móviles
Cuando se pulsa “Try it out!”, la web da una URL de petición de ejemplo preparada para ser
llamada y su correspondiente respuesta. En este caso, esta última está construida en JSON y
tiene un formato muy sencillo.
Ahora viene la parte más compleja, elaborar una aplicación Android que llame al servicio para
obtener los datos de temperatura del aeropuerto de Palma.
Página 12
Centro Integrado de Formación Profesional Avilés
Puesta en Producción Segura ACTIVIDAD 4
Unidad 4: Detección de problemas de seguridad en aplicaciones para dispositivos móviles
Para ello, se va a crear un proyecto con una Empty Views Activity llamado
TestAemetServiceXX (donde XX es el número correspondiente al usuario ciberXX) y sobre
lenguaje Java. Se siguen los pasos a continuación:
Con estas operaciones queda ajustado el interfaz de usuario, el cual básicamente va a servir
para mostrar tres datos propios del Aeropuerto de Palma: temperatura, presión y humedad.
Todos ellos serán obtenidos del servicio Web mediante una llamada desde el cliente Android
cuando se pulse el botón enviar.
Puesto que para hacer llamadas a los servicios RESTful lo principal es lanzar peticiones HTTP,
para este ejemplo se utilizará una biblioteca para tal fin disponible en Android llamada Volley:
https://developer.android.com/training/volley
Para poder utilizarla, es preciso acudir a los Gradle Scripts en Android Studio y dentro de
build.gradle.kts (Module app) introducir la siguiente línea en el apartado dependencies:
implementation("com.android.volley:volley:1.2.1")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Dentro del método onCreate, se asocia cada control con el que se ha incluido mediante el
interfaz de usuario de Android Studio (después de las líneas propuestas por el IDE):
Página 13
Centro Integrado de Formación Profesional Avilés
Puesta en Producción Segura ACTIVIDAD 4
Unidad 4: Detección de problemas de seguridad en aplicaciones para dispositivos móviles
txtTemp = findViewById(R.id.txtTemp);
txtPres = findViewById(R.id.txtPres);
txtHum = findViewById(R.id.txtHum);
btnSubmit = findViewById(R.id.btnSubmit);
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
Página 14
Centro Integrado de Formación Profesional Avilés
Puesta en Producción Segura ACTIVIDAD 4
Unidad 4: Detección de problemas de seguridad en aplicaciones para dispositivos móviles
Por último, solo queda darle permisos a la aplicación para conectarse a Internet, lo cual se hace
en el Manifiesto con la siguiente línea anterior a application:
<uses-permission android:name="android.permission.INTERNET" />
Las aplicaciones Android contienen ficheros .dex (Dalvik EXecutable). Estos ficheros se
pueden decompilar para obtener un código de bajo nivel llamado Dalvik Bytecode. Con
smali/baksmali (ensamblador/desensamblador) se puede obtener una representación en un
lenguaje de bajo nivel con el que se puede trabajar más fácilmente, el cual podría llamarse
código Smali. El código Smali recuerda al código del lenguaje ensamblador, pero en este caso
se ven los nombres de las clases de Java y Android, así como los nombres de los métodos. Pero
a nivel de seguridad, el fichero que más interesa consultar es el Android Manifest, el cual
puede conseguirse en texto plano utilizando la herramienta Apktool. Básicamente su uso más
básico se resume en dos operaciones:
apktool d app.apk
Para probar la herramienta, se puede descompilar la aplicación fedex.apk que se utilizó en los
primeros temas para comprobar que no era segura. Se puede descargar del siguiente enlace:
https://github.com/CiberSPEPSAviles/apks/blob/main/fedex.apk
En este caso, se prestará atención al contenido de AndroidManifest.xml para ver sobre qué
elementos tiene permiso la aplicación teniendo en cuenta especialmente aquellos que sean más
críticos.
Página 15