viernes, 30 de noviembre de 2012

¿Cómo funciona Facebook por dentro?

En 1996 Alejandro Marcu egresó en la Escuela Técnica ORT con especialización en Informática, y recién volvió la semana pasada para compartir con los actuales alumnos su aventuras trabajando desde 2009 en la sede de Facebook en California, Estados Unidos.
Casual day: en Facebook algunos viernes se visten con traje
En aquellas épocas desarrollaba videojuegos en sistema DOS y los compartía con sus compañeros, cuando Windows aún no se conocía. Hasta llegó a publicar un título para su comercialización. Hoy su trabajo impacta en 1.000 millones de usuarios, algo que lo reconforta.

"Me gustaba sentir que la gente usaba lo que yo hacía, pero en esa época no había Internet y no se podía vender mucho. Desde 1997 y hasta 2007 estudié Ingeniería Electrónica en la UBA y tuve varios trabajos, pero en general no duraba mucho, me aburría", contó Marcu. "En el 2009 participé en un concurso de programación de una empresa llamada TopCoder y llegué a la final, en Las Vegas. ¡Esta empresa me pagaba todo! Y allí estaba Facebook auspiciándolo, y reclutando gente".

Primero se negó. Vivía bien en Argentina y no estaba en sus planes trabajar en Estados Unidos. Pero su curiosidad no pudo resistir a tomar la entrevista laboral con la red social. "Si me toman luego les digo que no", había pensado Alejandro. "Pero me fue bien y quería seguir entrevistándome. Me pagaban el viaje a Palo Alto y me pareció que estaba bueno conocer las oficinas...", recordó durante su charla.

Marcu trabajó en proyectos como la adaptación del formato "Biografía" a las "páginas" y fue quien propuso que se puedan etiquetar también páginas en las fotos. "Lo hice en unahackathon, y logré que esta idea forme parte de Facebook. Me dio mucha satisfacción haber hecho algo conocido y con mucho uso. Otro proyecto que desarrollé hace dos meses permite vender: la gente colecciona cosas, y sus amigos lo ven. Hicimos una prueba en Estados Unidos y ahora el resto del equipo sigue trabajando en este proyecto", relató.

¿Cómo funciona Facebook?

"Tenemos nuestros servidores Web, que cuando ustedes entran se les hace un pedido, y se encargan de generar el código para que ustedes vean la página que piden. Se usa Linux y PHP (mi trabajo es escribir php) compilado para que responda más rápido", explicó Alejandro. "Por otro lado tenemos las bases de datos, usamos una gratuita, MYSQL. Hay otros tipos de servidores que guardan estas bases, y cada base tiene información distinta. Cuando necesitamos acceder a la información no accedemos a cualquiera, sino a una en particular".

"Todos los servers Facebook los ponen en datacenters. Al principio la empresa alquilaba datacenters, pero en un momento quedó chico y construyeron desde cero los centros de datos", continuó el ingeniero".

¿Cómo se trabaja?

"Tengo mi notebook común y corriente, y además tengo un server de desarrollo para mí, que está en un datacenter, lejos. No tengo acceso físico. En ese server tengo mi propia versión de Facebook, la puedo cambiar y hacerle lo que quiera. Tiene 144 Giga de RAM, entonces me conecto con mi PC remotamente, edito el código y luego entro en el navegador, en una dirección especial, para ver lo que voy haciendo", dijo Marcu.

Como la red social tiene millones de líneas de código, compartir archivos y modificaciones entre distintos desarrolladores se hace complicado. Por eso utilizan un software de control de versiones que les asegura los pasos adecuados para compartir y publicar las actualizaciones.

- Qué consejo nos darías para ir al Silicon Valley?- se animó un alumno.

- Lo más importante es tener iniciativa y que te guste lo que haces. Hay que tener pasión. Lo que siempre me ayudó es tener ganas de hacer cosas, juegos, me las arreglaba para hacer un juego programando. Era otra época, porque ni había internet, no podía preguntarle a nadie. Eso me ayudo mucho, aprender por mi propia cuenta. Por supuesto que tardaba mucho más en hacer las cosas. La iniciativa de tener mis propios proyectos es lo que luego me permitió ser interesante para quienes buscan gente desde el Silicon Valley. Cada uno es como una start up, es como si yo tuviera mi empresa dentro de Facebook.

- Por qué Facebook tuvo tanto éxito?, se sumó un estudiante.

- Facebook no fue un invento muy original, ya había otras redes sociales. Fue una combinación de varias cosas, que le permitió funcionar mejor que otras. Una de ellas fue que Facebook se fue lanzando de a poco: primero era sólo para Harvard, algo exclusivo y sólo los estudiantes. Esto fue importante porque les permitió ir mejorando la infraestructura tecnológica y la interfaz del usuario. Hubo otras ideas muy buenas, como por ejemplo etiquetar las fotos, algo que no existía. También el newsfeed, que hace que uno entre todo el tiempo para ver las novedades.

De película

El día del estreno de The social network, la película que relata el nacimiento de Facebook, la empresa alquiló un complejo de cines y fueron todos a verla junto a Mark Zuckerberg, su fundador. "Mark dijo que estaba asombrado con detalles como por ejemplo que toda la ropa del protagonista era real, la que él mismo usaba", explicó Marcu, "pero que habían metido muchas cosas ficticias", como la historia con una chica que habría disparado el nacimiento de la red social.


¿Cómo funciona Facebook por dentro? - CanalAR

miércoles, 21 de noviembre de 2012

Comunidad 7BBerries - Todo el mundo BB explicado en español


Introducción al desarrollo de aplicaciones móviles

Objetivos

El objetivo principal de este capítulo es describir las diferencias entre el desarrollo de aplicaciones para un entorno de escritorio frente a un entorno de dispositivo móvil basado en las características del dispositivo físico y en las necesidades del usuario.
Desarrollo en dispositivos móviles
Desarrollar para dispositivos móviles tiene algunas cosas en común con el desarrollo para escritorio o servidor, pero las diferencias son realmente importantes. Por esto es necesario describir algunas características del desarrollo de aplicaciones móviles y luego poder considerarlas a la hora de programar aplicaciones. Estos conceptos tendrán un impacto importante a la hora de implementar finalmente una aplicación.
Lo primero a tener en cuenta es la limitación de recursos que existen en un dispositivo móvil. Si bien la evolución es constante y en gran escala, no se debe olvidar que sigue siendo un dispositivo limitado.
Recursos a tener en cuenta a la hora de programar:
- Tamaño de la pantalla
Los teléfonos móviles cuentan con una pantalla de pequeño tamaño, lo cual hace imprescindible tenerlo en cuenta a la hora de diseñar una aplicación. Es importante entender que no toda la información que tenemos disponible puede ser presentada al mismo tiempo en una sola pantalla. Para ello es necesario realizar un diseño de nuestra aplicación considerando siempre los elementos más relevantes dentro de cada pantalla.
- Memoria
Los dispositivos móviles cuentan con reducida capacidad de almacenamiento. Si bien es posible utilizar memorias externas, es difícil considerar que se dispone de gran capacidad para persistir y sostener información. Es importante administrar y gestionar prolijamente el uso de la memoria para evitar la caída del rendimiento de la aplicación y el dispositivo en general. Evitar la creación de objetos innecesarios es un factor muy determinante en el cuidado de este recurso. Así como Java Standard cuenta con el “Garbage Collector” (recolector de basura en memoria), Java Microedition también utiliza este mecanismo. No por esto se deberá dejar información “basura” dentro de la memoria esperando que el recolector haga su trabajo. Cuando se programa para móviles, es muy importante reducir el trabajo del GC.
- Capacidad del procesador
Así como la memoria es limitada, el procesador y su capacidad de procesamiento también lo son. Es por eso que es necesario evitar cualquier utilización innecesaria de este recurso. Los aplicaciones Java que corren en dispositivos BlackBerry poseen la capacidad de ejecutar tareas en simultáneo “multithreading”, por lo que se está expuesto a la degradación del rendimiento general del equipo. Tanto el diseño de clases y métodos, como la implementación de estos, es fundamental para la mejor optimización del procesador. Existen herramientas “profiler” que permiten analizar la utilización del CPU y encontrar la mejor implementación para cada rutina, llegando a optimizarlas lo máximo posible. Se mostrarán ejemplos y explicará su uso en otro capítulo.
- Medios de conexión
Los dispositivos móviles cuentan con la posibilidad de estar “todo el tiempo” conectados, tanto a internet como a dispositivos periféricos. Existen distintos métodos para lograrlo, como la conexión celular, WiFi y BlueTooth. Es importante no abusar del uso de este recurso, ya que este representa el factor de mayor consumo de procesador y memoria. En la etapa de diseño de una aplicación, es necesario considerar el mínimo uso de las distintas conexiones en los distintos escenarios.
- Batería
Los dispositivos móviles cuentan con una fuente de energía muy limitada. El mal uso de los recursos (pantalla, memoria, procesador y conexiones) tendrán un impacto directo en el consumo de batería, generando una baja considerable en el rendimiento de las aplicaciones y la experiencia de los usuarios.

Métodos de desarrollo para dispositivos móviles

Objetivos

El objetivo de este capítulo es enumerar y describir cuatro métodos para el desarrollo de aplicaciones para dispositivos móviles BlackBerry. Se describirá cómo difieren las aplicaciones HTML5, Java, Air y C++, mostrando distintos ejemplos. Se describirán las consideraciones de diseño y limitaciones para los métodos de desarrollo de aplicaciones.


Desarrollo JAVA

Las aplicaciones Java se caracterizan por residir y correr dentro de los dispositivos móviles. Las aplicaciones para BlackBerry se escriben basadas en Java® ME.

Existe la posibilidad de implementar aplicaciones “Standalone”, que no requieren de conexión a internet, y por lo contrario, contienen el contenido y lógica completos dentro de estas. Ademas, es posible desarrollar aplicaciones que soporten funciones “wireless”.


Desarrollo HTML5

En primer lugar, una aplicación de BlackBerry WebWorks es una aplicación independiente, lo que significa que no tiene que apuntar a un servidor remoto para cargar una página web o aplicación (a menos que se requiera). En este caso, la aplicación reside en el dispositivo BlackBerry. Básicamente se trata de un conjunto de recursos que se encapsulan en un contenedor que puede ser visto por un "explorador sin cabeza" - el motor WebKit.

En segundo lugar, usted puede tomar ventaja de las tecnologías web estándar, como CSS, HTML5 y JavaScript para construir su aplicación.

También puede tomar ventaja de los populares frameworks para móviles, tales como Sencha, PhoneGap, jQuery, o Dojo. Esto permite crear aplicaciones más rápido porque puede volver a utilizar las aplicaciones existentes y los recursos.

Lo más importante es que se puede agregar funcionalidad nativa a una aplicación HTML5 utilizando la plataforma BlackBerry WebWorks.

Se puede obtener acceso completo a la API de la plataforma a través de wrappers de JavaScript, que puede utilizar para extender la aplicación y tomar ventaja de las características específicas de BlackBerry (por ejemplo, BBM, PIM, los medios de comunicación, hardware), ofreciendo una experiencia integrada para el usuario de BlackBerry .


Desarrollo en Adobe Air

Para desarrollar aplicaciones que corran en BlackBerry tablets, se puede utilizar BlackBerry Tablet OS SDK para Adobe Air, y junto con Adobe ActionScript y Adobe Flex se pueden crear experiencias cutivantes para el usuario.

El SDK provee APIs que extienden ActionScript 3.0 que permiten desarrollar aplicaciones que se asemejan a las desarrolladas para BlackBerry Tablets. Estas API proporcionan algunos de los componentes de interfaz de usuario únicos y skins predefinidos, así como de los listeners para los eventos que son específicos para el sistema operativo BlackBerry Tablet.

Usando la API de Flash, la aplicación también puede acceder a las funciones que son exclusivas de los dispositivos móviles, tales como el acelerómetro y la información de geolocalización.

Desarrollo en C++

BlackBerry Native SDK para Tablet OS es un conjunto de herramientas de desarrollo que le permite aprovechar el poder de la BlackBerry PlayBook.

Combinando la velocidad y estabilidad del sistema operativo en tiempo real QNX Neutrino con el entorno de desarrollo basado en Eclipse Momentics QNX, el SDK nativo está diseñado para desarrolladores que necesitan tener acceso completo a todo lo que la BlackBerry PlayBook tiene para ofrecer.

El SDK nativo le proporciona un conjunto APIs de C y C++ que expone todas las herramientas necesarias para crear aplicaciones potentes y dinámicas.

Las capacidades incluyen:

API nativo del sistema para la pantalla, el navegador, ecualizador, el acelerómetro, la red, etc

Un entorno de compilación que le permite personalizar la configuración del proyecto, del compilador y las opciones de deploy

Una manera de implementar sus aplicaciones a los dispositivos BlackBerry PlayBook reales o al simulador de PlayBook incluido

Un depurador integrado que le permite examinar cada línea de código, mientas es ejecutada

Documentación, tutoriales y ejemplos de código


Ventajas y desventajas de cada lenguaje

SmartphonePlayBook
 HTML5JAVAHTML5AirC++
Complejidad del lenguajeBajoAltoBajoMedioMuy Alto
FlexibilidadBajaAltaBajaMediaMuy Alta
Utilización de estándaresBuenaBajaBuenaBuenaAceptable
RendimientoBuenoMuy BuenoBuenoMuy BuenoAlto
Conexión con dispositivos periféricosSiSiNoNoNo
Integración con Hardware del dispositivoSiSiNoSiSi
Conexión a internetOpcionalOpcionalOpcionalOpcionalOpcional
Almacenamiento localNoSiSiSiSi
Acceso a información de posicionamientoSiSiSiSiSi
Ejecución de tareas en segundo planoSiSiNoNoSi
PortabilidadAltaBajaAltaBaja-
Push NotificationsSiSiNoNoNo
Integración con serviciosMuy simpleComplejoMuy simpleSimpleMuy Complejo
Acceso a base de datosSi (OS 5.0+)SiSiSiSi
EscalabilidadBajaMedioBajaMedioAlta
Disponibilidad de ejemplosAltaMediaAltaMediaBaja
Integración con otras tecnologíasLimitadoMedioLimitadoMedioAlto


Definiciones

Complejidad del lenguaje
Define cuán difícil o intuitivo es desarrollar una aplicación en ese lenguaje, tomando en cuenta tanto la simpleza de la sintaxis como asi también el conocimiento requerido para realizar distintas tareas.

Flexibilidad
Determina cuan permisivo es el lenguaje para poder crear cualquier estilo, apariencia y funcionabilidad. Siendo altamente flexibles aquellos lenguajes que prácticamente no presentan límites ni requisitos que determinen la apariencia y comportamiento, dejando así en manos de los desarrolladores y diseñadores ambas cuestiones. Aun así, se recomienda seguir las buenas prácticas de programación, estándares y consideraciones de diseño para evitar complicaciones y facilitar el uso.

Utilización de estándares
Determina cuan respetados son los estándares de programación por parte del resto de la comunidad. Tomando en cuenta desde los que determinan como se escribe el código (forma de nombrar clases, variables, métodos, utilización de llaves y ubicación de las mismas) hasta las que indican las mejores maneras de proceder para realizar determinadas procesos.

Rendimiento
Define que tan eficiente o efectivo es el código producido, siendo la efectividad la capacidad de alcanzar el efecto deseado y la eficiencia la capacidad de alcanzar dicho efecto con la menor cantidad de recursos posibles. Aun así, el rendimiento está altamente ligado a la habilidad y conocimientos del programador, ya que a pesar de que C++ tiene una alta performance, si se codifica mal o bien no se tiene cuidado se puede generar código mucho menos eficiente que el producido en otros lenguajes.

Conexión con dispositivos periféricos
Describe la posibilidad de integrar el uso de las características del dispositivo BlackBerry, tales como la Cámara de fotos y las funciones del Teléfono. Así mismo, es posible la integración con aplicaciones nativas que se encuentren instaladas en el dispositivo, tales como la Agenda de contactos, el Media player y BlackBerry® Maps.

Integración con Hardware del dispositivo
Determina si las aplicaciones pueden comunicarse con los dispositivos que posean conectividad mediante Bluetooth®, tales como Headsets, Impresoras, Dispositivos de entrada y Transmisores GPS.

Nota: En Air se puede utilizar las ANE (Adobe Native Extensions) y acceder a librerías compiladas con el NDK.

Conexión a internet
Significa que no requieren una conexión a internet para poder ejecutarse ni para obtener sus recursos.

Almacenamiento local
Define la capacidad del leguaje para acceder a los dispositivos de almacenamiento interno del dispositivo (memoria interna y memoria SD).

Nota: Si bien HTML5 no puede utilizar la memoria interna del dispositivo, se puede usar lo que se denomina Storage (Local storage, session storage y database storage).

Acceso a información de posicionamiento
Determina si es posible detectar la ubicación del dispositivo BlackBerry y proporcionar información para esa ubicación. Existen distintos mecanismos para lograrlo, difiriendo en la precisión final de la ubicación conseguida y variando en el consumo de recursos para lograrlo.

Ejecución de tareas en segundo plano
Posibilidad de implementar procesos que se ejecutan en segundo plano, escuchando eventos y/o actualizaciones. Esto permite a los usuarios ejecutar otras funciones mientras la aplicación realiza tareas o ejecuta rutinas que requieran un indeterminado tiempo para finalizar.

Portabilidad
Define la facilidad para portar la aplicación a otras plataformas, determinada por las modificaciones que se requieran. Muchas veces se requiere crear distintas versiones de la aplicación orientadas a soportar las características propias de cada dispositivo.

Nota:Las aplicaciones desarrolladas en C++ no pueden ser portadas a smartphones, debido a que estos no soportan aplicaciones desarrolladas en este lenguaje.

Push notifications
Describe la posibilidad de recibir un request originado del lado del servidor. Cuando haya contenido nuevo, el servidor tiene la capacidad de “empujar” esta información a los dispositivos.

Integración con servicios
Define la complejidad que presenta el lenguaje a la hora de interactuar con servicios web.

Nota:Tanto HTML5 como Air tienen una limitación dada por same origin policy, en el caso de HTML5 esto se puede resolver utilizando JSONP y en Air se puede solucionar mediante el uso de un archivo de cross domain ubicado en el dominio.

Acceso a base de datos
Determina la capacidad de poder acceder y trabajar sobre la base de datos local.

Escalabilidad
Indica la capacidad de ampliación o extensión de las aplicaciones sin perder calidad ni funcionabilidad.

Disponibilidad de ejemplos
Define la facilidad así como también la cantidad de ejemplos disponibles en internet.

Integración con otras tecnologías
Describe la complejidad dada para realizar integraciones con distintas tecnologías como pueden ser realidad aumentada.


Transportes de red

Objetivos

El objetivo principal de este capítulo es cubrir y explicar las diferentes formas que un dispositivo BlackBerry puede utilizar para conectarse a la red. Se explicarán las principales características y beneficios de cada método y cuándo y cómo utilizarlos.

Visión general de transportes de red

Los dispositivos BlackBerry pueden acceder a Internet de distintas maneras:
TCP Celular: Directamente vía el Operador.
WAP: Directamente vía el Operador usando WAP.
TCP WiFi: Directamente vía redes WiFi.
BIS (o MDS público): Vía el Operador, pero a través del Gateway de Internet de RIM.
BES (o MDS): Vía el Operador, pero a través del Gateway empresarial de RIM.
WiFi: Vía BIS o BES a través de una red WiFi.

Tipos de acceso a internet

TCP Celular


- El transporte TCP celular crea una conexión a Internet a través de la puerta de enlace de Internet de un Operador. Este método crea el tipo más directo de conexión que utiliza la radio celular.
- La mayoría de los Operadores configuran los dispositivos BlackBerry del usuario para usar la puerta de enlace de Internet del proveedor. Sin embargo, cuando el usuario se mueve a otra red, este debe configurar el dispositivo manualmente para usar el gateway de Internet en la red del host.
- Si la aplicación utiliza este transporte, debería probarlo con cada Operador.
- Generalmente este transporte genera un costo adicional al usuario, ya que no está contemplado dentro del servicio de datos BlackBerry.


WAP


- El transporte WAP crea una conexión a través de la puerta de enlace WAP del Operador. Se admiten WAP 1.0, 1.2 y 2.0.
- Para soportar este transporte, el usuario o el Operador debe configurar los parámetros de conexión WAP en el dispositivo. Como resultado, este transporte puede que no se admitido en todas las redes inalámbricas o con todos los planes de datos.
- Si la aplicación utiliza este transporte, debería probarlo para cada Operador que puede utilizar la aplicación.
- Para utilizar WAP 2.0, debe recuperar el identificador de conexión del libro de servicio.
- Generalmente este transporte genera un costo adicional al usuario, ya que no está contemplado dentro del servicio de datos BlackBerry.


TCP WiFi


- El transporte WiFi crea una conexión a Internet o a redes privadas, como las de una organización o un hogar. Cuando la radio WiFi está activada, el usuario del dispositivo BlackBerry o una aplicación puede configurar el dispositivo para conectarse a Internet utilizando este transporte.
- Si aplica, el dispositivo puede enviar automáticamente datos a un BlackBerry Enterprise Server o BlackBerry® Internet Service a través de una conexión WiFi. Por ejemplo, si el dispositivo está conectado a una red WiFi y un perfil VPN está configurado para la organización del usuario, el dispositivo intenta conectarse al BlackBerry Enterprise Server a través de la VPN mediante la conexión WiFi porque la transmisión de datos a través de Wi-Fi es generalmente más barata que otros transportes. Este comportamiento se conoce como el enrutamiento de menor costo.


Servicio de internet de BlackBerry (MDS público)


- El transporte BlackBerry Internet Service crea una conexión a Internet a través de la infraestructura de BlackBerry. Los datos que se envían y reciben utilizando este transporte son comprimidos y optimizados para la transmisión en conexiones inalámbricas.
- Las aplicaciones que utilizan el transporte BlackBerry Internet Service automáticamente se benefician por el enrutamiento de menor costo. El dispositivo se conecta a una red WiFi automáticamente, si está disponible.


Servicio empresarial BlackBerry (MDS)


- El transporte de BlackBerry MDS permite a un dispositivo BlackBerry conectarse a su asociado BlackBerry Enterprise Server a través de la infraestructura de BlackBerry o utilizando una conexión WiFi.
- Los datos que se envían y reciben utilizando este transporte son comprimidos y optimizados para la transmisión en conexiones inalámbricas.
- Es posible acceder a destinos privados dentro de la red corporativa.


Tecnología PUSH

Objetivos

El objetivo principal de este capítulo es definir la tecnología Push y describir sus beneficios. Se describirá cómo funcionan las aplicaciones push server-side y se proporcionarán ejemplos de usos en aplicaciones BlackBerry.

Introducción a la tecnología PUSH

Las aplicaciones Push envían el contenido web u otros datos a los dispositivos BlackBerry sin necesidad de intervención del usuario. Estas aplicaciones proporcionan automáticamente la información tan pronto como esté disponible en el lado del servidor, por eso se denomina información “empujada”.

El paradigma PUSH

Una de las características principales de la solución BlackBerry es la tecnología PUSH. El principal objetivo a cumplir es entregar los datos de forma proactiva, haciendo que estos se encuentren listos en el dispositivo cuando el usuario los necesita. Para ello, los datos se entregan tan pronto como estén disponibles, por ejemplo cuando se produjo un evento de interés en el servidor.
Las aplicaciones están siempre escuchando la llegada de datos sin necesidad de que el usuario intervenga para recibirlos. Este se entera de la llegada de nueva información mediante una alerta (reproducir una melodía, vibrar, parpadear, ventana emergente, icono) cuando han sido entregados todos los datos, procesados y listos para ver, provocando la apariencia de cero latencia.
La aplicación no se encuentra solicitando actualizaciones constantemente, sino que simplemente espera a que esta llegue por medio de una solicitud del servidor.
La experiencia del usuario es que el evento acaba de ocurrir, automáticamente, en tiempo real y de forma fiable.

Beneficios

Los beneficios principales de la implementación de aplicaciones que utilizan la tecnología PUSH son:
- Instantaneidad
El usuario recibe la información en el momento que se produce el evento o actualización.
- Eficiencia
La información solo se envía cuando está disponible, evitando que el cliente este solicitando actualizaciones constantemente.
- Latencia reducida
Se reduce el impacto en la red debido a que la aplicación no se encuentra todo el tiempo solicitando información.
- Duración de batería prolongada
El hecho de no estar constante e innecesariamente solicitando actualizaciones tiene un impacto positivo en la duración de la batería. La información es recibida y procesada solo cuando está disponible y el usuario no se preocupa por solicitar actualizaciones.

Flujo básico

1. Proveedor de contenido envía la petición Push
2. Servicio BlackBerry devuelve respuesta, declarando la aceptación o rechazo del mensaje
3. Servicio BlackBerry empuja los datos a los dispositivos asignados en el puerto especifico
4. Dispositivo devuelve respuesta al servicio BlackBerry
6. Proveedor de contenidos devuelve notificación de lectura al servicio BlackBerry


7 BBerries - Comunidad 7BBerries:

lunes, 12 de noviembre de 2012

Pagar con el móvil puede ser una nueva fuente de empleos


La demanda de perfiles relacionados con el pago con smartphones aumentará en los próximos años, según la empresa de trabajo especializado Hays
alt
Blackberry es uno de los fabricantes que están apostando por el NFC
La tecnología NFC (Near Field Communications), que permite el pago a través de los dispositivos móviles, abrirá las posibilidades de pago e identificación electrónicas. Blackberryes uno de los fabricantes que están apostando por incorporar esta tecnología a sus terminales. Un estudio realizado por la empresa de trabajo temporal Hays pone de manifiesto que en 2020 pagar con el smartphone será algo habitual y que, hasta esa implantación completa, los perfiles profesionales relacionados con la implantación y desarrollo de este sistema serán muy demandados. Estas conclusiones coinciden con informes como el realizado por Forrester, que anunciaba la generalización de este tipo de pagos en 2016.


Pagar con el móvil puede ser una nueva fuente de empleos | Noticias Relevantes

domingo, 11 de noviembre de 2012

Hacking an Android Banking Application


Hacking an Android Banking Application

Guest post by Juliano Rizzo @julianor
 
This analysis of a mobile banking application from X bank illustrates how easily anyone with sufficient knowledge can get install and analyze the application, bypassing common protections.
 
1. Installing and unpacking the application
 
Only users located in Wonderland can install the X Android application with Google Play, which uses both the phone’s SIM card and IP address to determine the location of the device. To bypass this limitation, remove the SIM card and reset the phone to factory defaults.

Complete the initial Android setup with a Wonderland IP address, using an L2TP VPN service (PPTP encryption support is broken). If Google Play recognizes the device as located in Wonderland, install the application. Once installed in a rooted phone, copy the application APK from /data/app/com.X.mobile.android.X.apk.

 
These are some of the many reversing tools for unpacking and decompiling the APK package:

•   apktool                                    http://code.google.com/p/android-apktool/
•   smali/baksmali http://code.google.com/p/smali/ 
•   dex2jar                                    http://code.google.com/p/dex2jar/ 
•   jd-gui                          http://java.decompiler.free.fr/?q=jdgui 
•   apkanalyser                https://github.com/sonyericssondev 
 
In this example, the code was decompiled using jd-gui after converting the apk file to jar using the dex2jar tool. The source code produced by jd-gui from Android binary files is not perfect, but is a good reference. The output produced by the baksmali tool is more accurate but difficult to read. The smali code was modified and re-assembled to produce modified versions of the application with restrictions removed. A combination of decompiled code review, code patching, and network traffic interception was used to analyze the application.

 

2. Bypassing the SMS activation

 
The application, when started for the first time, asks for a Wonderland mobile number. Activating a new account requires an activation code sent by SMS. We tested three different ways to bypass these restrictions, two of which worked. We were also able to use parts of the application without a registered account.
 
2.1 Intercepting and changing the activation code HTTPS request

The app GUI only accepts cell phone numbers with the 0X prefix; always adding the +XX prefix before requesting an activation code from the web service at https://android.X.com/activationCode

Intercepting the request and changing the phone number didn't work, because the phone prefix is verified on the server side.

 

2.2 Editing shared preferences

The app uses the “Shared Preferences” Android service to store its minimal configuration. The configuration can be easily modified in a rooted phone by editing the file

/data/data/com.X.mobile.android.X/shared_prefs/preferences.xml
 
Set the "activated" preference to "true" like this:
 
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map> 
<boolean name="welcome_screen_viewed " value="true" /> 
<string name="msisdn">09999996666</string> 
<boolean name="user_notified" value="true" /> 
<boolean name="activated " value="true" /> 
<string name="guid" value="" /> 
<boolean name="passcode_set" value="true" /> 
<int name="version_code" value="202" /> 
</map> 
 

2.3 Starting the SetPasscode activity

The Android design allows the user to bypass the normal startup and directly start activities exported by applications. The decompiled code shows that the SetPasscode activity can be started after the activation code is verified. Start the SetPasscode activity using the “am” tool as follows:

 
From the adb root shell:

#am start -a android.intent.action.MAIN -n com.X.mobile.android.X/.activity.registration.SetPasscodeActivity

 
3. Intercepting HTTPS requests

To read and modify the traffic between the app and the server, perform a SSL/TLS MiTM attack. We weren’t able to create a CA certificate and install it using the Android's user interface with the Android version we used for testing. Android ignores CA certificates added by the user. Instead, we located and then modified the app's http client code to make it accept any certificate. Then we installed the modified APK file on the phone. Usingiptables on the device, we could redirect all the HTTPS traffic to an MiTM proxy to intercept and modify requests sent by the application.

 
 
4. Data storage
 
The app doesn't store any data on external storage (SD card), and it doesn't use the SQLlite database. Preferences are stored on the "Shared Preferences" XML file. Access to the preferences is restricted to the application. During a review of the decompiled code, we didn't find any evidence of sensitive information being stored in the shared preferences.

 

5. Attack scenario: Device compromised while the app is running.

The X android application doesn't store sensitive information on the device. In the event of theft, loss or remote penetration, the auto lockout mechanism reduces the risk of unauthorized use of the running application. When the app is not being used or is running in background, the screen is locked and the passcode must be entered to initiate a new session. The HTTPS session cookie expires after 300 seconds. The current session cookie is removed from memory when the application is locked.

 
5.1 Attacker with root privileges
 
An attacker with root access to the device can obtain the GUID and phone number  from the unencrypted XML configuration file; but without the clear-text or encrypted passcode, mobile banking web services cannot be accessed. We have discovered a way to “unlock” the application using the Android framework to start theAccountsFragmentActivity activity, but if the web session has already expired, the app limits the attacker to a read-only access. The most profitable path for the attacker at this point is the running process memory dump, as we explain in the next section.
 
5.2 Memory dump analysis.
An attacker who gets root access can acquire the memory of a running Android application in several different ways. “Acquisition and Analysis of Volatile Memory from Android Devices,” published in the Digital Investigation Journal, describes some of the different methods.
 
We used the ddms (Dalvik Debug Monitor Services) tool included with the Android SDK to acquire the memory dump. The Eclipse Memory Analyzer tool with Object Query Language support is one of the most powerful ways to explore the application memory. The application passcodes are short numeric strings; a simple search using regular expressions returns too many occurrences. The attacker can't try every occurrence of numeric strings in the process memory as a passcode for the app web services because the account is blocked after a few attempts. The HTTPS session cookies are longer strings and easier to find.

By searching for the prefix “JSESSION,” the attacker can easily locate the cookies when the application is running and active. However, the cookies are removed from memory after a timeout. The ActivityTimeoutTracker function calls the method clear() of the HashMap used to store the cookies. The cookie HashMap is accessed through the singleton class com.X.a.a.e.b.

 
 
Reviewing the decompiled code, we located a variable where the passcode is stored before being encrypted to perform the session initiation request. The field String f of the class com.X.a.a.d.a contains the passcode, and it is never overwritten or released. The references to the instance prevent the garbage collection of the string. Executing the OQL query “SELECT toString(object.f) FROM com.X.a.a.d.a object” inside the Eclipse Memory Analyzer is sufficient to reliably locate the passcode in the application memory dump.

Although developers tried to remove information from the memory to prevent this type of attack, they left the most important piece of information unprotected.

 

 


6. Attack scenario: Perform MiTM using a compromised CA
 
The banking application validates certificates against all the CA certificates that ship with Android. Any single compromised CA in the system key store can potentially compromise communication between the app and the backend. An active network attacker can hijack the connection between the mobile app and the server to impersonate the user.

Mobile apps making SSL/TLS connections to a service controlled by the vendor don’t need to trust Certificate Authorities signatures. The app could therefore implement certificate "pinning" or distribute a signing certificate created by the vendor.

The authentication protocol is vulnerable to MiTM attacks. The app's authentication protocol uses the RSA and 3DES algorithms to encrypt the passcode before sending it to the server. After the user types the passcode and presses the "login" button, the client retrieves an RSA public key from the server without having to undergo any authenticity check, which allows for an MiTM attack. We were able to implement an attack and capture the passcodes from the app in our testing environment. Although the authentication protocol implemented by the app is insecure, attacks are prevented by the requirement of SSL/TLS for every request. Once someone bypasses the SSL/TLS certificate verification, though, the encryption of the passcode doesn't provide extra protection.

 

7. Attack scenario: Enumerate users

The web service API allows user enumeration. With a simple JSON request, attackers can determine if a given phone number is using the service, and then use this information to guess passwords or mount social engineering attacks.

  

About Juliano

Juliano Rizzo has been involved in computer security for more than 12 years, working on vulnerability research, reverse engineering, and development of high quality exploits for bugs of all classes. As a researcher he has published papers, security advisories, and tools. His recent work includes the ASP.NET “padding oracle” exploit, the BEAST attack, and the CRIME attack. Twitter: @julianor



IOActive Labs Research: Hacking an Android Banking Application