Thursday, 19 December 2013

Acelerando el emulador de Android

Seguramente muchas personas que utilizan el emulador de android notaron que, para versiones superiores a 2.3, el rendimiento no es muy bueno. El emulador se vuelve lento y el tiempo de respuesta entre interacciones no es aceptable.
En el siguiente post les dejo un procedimiento para accelerar el performance del emulador, aprovechando instrucciones de virtualización de nuestro procesador.

Saturday, 9 November 2013

Hackeando Santander Rio Mobile


Mientras estuve analizando algunas aplicaciones que bajé de Google Play, me encontré con algunas particularidades que me hicieron reír y, después, preocuparme. A continuación les muestro algunas de ellas.

Disclaimer: Con el término "hackeando" me refiero al simple hecho de encontrar info en algo existente en mi teléfono, y no al uso de herramientas de cracking.


Introducción:
En la mayoría de los sistemas basado en linux tenemos un sistema de logging, en donde se guardan los registros de los procesos y otra info útil.
Android, al estar basado en linux, también dispone de diferentes logs que podemos consultar.
El uso de los logs tiene varios propósitos: muchas veces los developers lo usamos como herramienta de debugging para saber que esta haciendo una aplicación, en otros casos, es muy útil  para sysadmins o clientes mostrando los errores que están ocurriendo. La mayoría de las herramientas tienen diferentes niveles de detalle de logs. Entre estos niveles tenemos los siguientes:
  • WARNING: Cualquier cosa que potencialmente puede causar comportamientos extraños en la aplicación, pero que son tratados de manera que la recuperación es automática
  • DEBUG: información de diagnostico que es útil para no solo los developers, sino también para sysadmins, IT, etc)
  • INFO: Información genérica. (un servicio que se prende o apaga, valores por default en configuración, etc) 
  • ERROR: Cualquier problema fatal para la operación de la aplicación.
Android viene con una herramienta: logcat. Con ella podemos acceder a uno de los logs principales del sistema. También podemos usar alguna aplicación como catlog (disponible en Google Play) para visualizar y poder filtrar la info

Vamos a hacer algunas pruebas:

Despues de loguearme a una aplicación de HomeBanking y usar la aplicación de manera normal, decidí acceder al log. (La aplicacion era del Santander Rio en este caso, en los proximos dias voy a estar probando otras)
Escondido entre basura, encontré lo siguiente:
Connnecting to: https://www.mobilebanking.santanderrio.com.ar/MBI/tunnel
Request:
<?xml version="1.0" encoding="utf-8"?><xml xsi:noNamespaceSchemaLocation="request.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><header><acceso><user>MBC_ANDROID</user><pwd>P45A8FR9D</pwd></acceso><device><token>A10ddd944c58c247d</token><idPlataforma>5</idPlataforma><deviceId>JLS36I</deviceId><deviceModel>XT925</deviceModel></device><servicio><idProducto>1</idProducto><idSubProducto>2</idSubProducto><version>1.5.0</version><idServicio>20</idServicio></servicio><location><mcc>0</mcc><mnc>0</mnc><lac>0</lac><cellId>0</cellId><latitud>0.0</latitud><longitud>0.0</longitud></location></header><body><serverUrl>https://www.mobilebanking.santanderrio.com.ar/MBI/catalogo</serverUrl><request><![CDATA[<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:body><xml><header><service>checkVersion</service><version>1.00.00</version></header><body><idRuntime>5</idRuntime><idPrograma>1</idPrograma><version>1.5.0</version></body></xml></soap:body></soap:Envelope>]]></request></body></xml>

ResponseCode: 200
Enviando a HTTP_LOADER_COMPLETE

Vamos a analizar que tenemos aqui :p
  1. Primero y principal, ya tenemos una URL: https://www.mobilebanking.santanderrio.com.ar/MBI/tunnel
  2. Si acomodamos el Request, tenemos lo siguiente: 
  3. <user>MBC_ANDROID</user> <pwd>P45A8FR9D</pwd> <token>A10ddd944c58c247d</token> <idPlataforma>5</idPlataforma> <deviceId>JLS36I</deviceId> <deviceModel>XT925</deviceModel>
  4. Ademas de eso, en el log también aparece otra info mas sensible todavía!!! 
  5. 11-08 16:19:20.687: D/Prod Ind Result(18073): Nodo: nroSuc Value: 02----
    11-08 16:19:20.687: D/Prod Ind Result(18073): Nodo: indJerarquia Value: P
    11-08 16:19:20.687: D/Prod Ind Result(18073): Nodo: clasePaquete Value: 14
    11-08 16:19:20.687: D/Prod Ind Result(18073): Nodo: tipo Value: 02
    11-08 16:19:20.687: D/Prod Ind Result(18073): Nodo: estado_tarjeta_credito Value: A
    11-08 16:19:20.687: D/Prod Ind Result(18073): Nodo: clase Value: N
    11-08 16:19:20.687: D/Prod Ind Result(18073): Nodo: codigoTitularidad Value: TI
    11-08 16:19:20.687: D/Prod Ind Result(18073): Nodo: clave_bancaria_unificada Value: 0BLOQUEADO_POR_SEGURIDAD
    11-08 16:19:20.687: D/Prod Ind Result(18073): Nodo: numero Value: 00000BLOQUEADO_POR_SEGURIDAD
    11-08 16:19:20.687: D/Prod Ind Result(18073): Nodo: nro_Tarjeta_credito Value: 0000BLOQUEADO_POR_SEGURIDAD
No les parece mucha info en el log para ser el sistema de un Banco? No solo puedo ver el nro de las tarjetas de credito que tengo, sino tambien un usuario y password de ellos!!!

Algunos tips:

El problema de porque esta info esta visible en la aplicación es porque algunos developers no leen la documentación de android (http://developer.android.com/tools/publishing/preparing.html)
Ahi mismo dice:

Turn off logging and debugging

Make sure you deactivate logging and disable the debugging option before you build your application for release. You can deactivate logging by removing calls to Log methods in your source files. You can disable debugging by removing theandroid:debuggable attribute from the <application> tag in your manifest file, or by setting theandroid:debuggable attribute to false in your manifest file. Also, remove any log files or static test files that were created in your project.
Also, you should remove all Debug tracing calls that you added to your code, such as startMethodTracing() andstopMethodTracing() method calls.

Sunday, 27 October 2013

Como mockear un servicio http en Android

Hace un tiempo encontré una librería que permite mockear servicios http en java y android, muy útil para cuando nuestro proyecto hace llamadas a consultas por WebServices y necesitamos mockearlos.
Se llama MockWebServer, y para utilizarla solamente debemos bajarla desde el sitio oficial y dejar el jar en la carpeta libs de nuestro proyecto.
ADT, por defecto, agrega todos los jars que estén en esa carpeta a nuestro buildpath.
En https://github.com/cristian04/mockwebserverdemo pueden encontrar un proyecto demo que prueba dos cosas: correr un test contra un servicio real y correr el mismo test contra un mock.
A continuación un pequeño detalle para ese proyecto:
El método sendRequest() se encarga de dos cosas. En primer lugar se conecta a una URL que es pasada por parámetro y obtiene la respuesta en formato JSON. En segundo lugar, realiza varias verificaciones con la respuesta: verifica el status code recibido y los datos de la respuesta.

Este es un test básico que hace uso de la función que nombré anteriormente y que funciona contra el servicio real (en este caso, un sitio de jsontest.com)
En este ultimo test, se pueden ver dos diferencias más: En primer lugar estamos creando una respuesta que el servidor nos tiene que devolver, dentro de MockResponse. Luego seteamos esa respuesta en el servidor y lo prendemos con server.play().
El método sendRequest() es quien hace la conexión al servidor web y quien realiza las verificaciones de la respuesta recibida.
Por ultimo, para verificar si nuestro request estuvo OK, le pedimos a nuestro mock que nos brinde los request que enviamos, mediante server.takeRequest(). Con esto podemos verificar si nuestro cliente http envió lo que realmente queríamos, verificar si el método http es correcto, si los headers están OK, si los parámetros están OK, etc.


Sunday, 20 October 2013

Hackeando un Smart TV Samsung (UN46EH5300G) Parte 3

Bueno, por ultimo voy a mostrarle algunas cosas interesantes que encontré con respecto al firmware del tv y algunos links.
Disclaimer:
  • Entrar o cambiar la configuración en el menú de servicio sin entender el funcionamiento puede causar daños permanentes en tu televisor. Accede a este menú sólo si estás calificado y capacitado para hacer trabajos de reparación de televisores.
La ultima version disponible para el SmartTV al dia de hoy es T-MST10PIBRC
Como pueden ver, el archivo es un .EXE que descomprime una carpeta, vamos a analizar que es lo que tenemos aqui:


Ahora vamos a enfocarnos en dos archivos .IMG. Para saber que es lo que tiene un archivo podemos ejecutar el comando file en linux:


TIP: Tambien podemos usar el comando binwalk que nos muestra mas info, analizando el archivo integramente
 Ahora que conocemos el sistema de archivo de cada imagen, podemos montarlo haciendo lo siguiente:

 Ahora, pueden darse una mirada por los archivos que estan en esas carpetas. Quizas encuentren algo interesante ;)

Les dejo dos links que me gustaron:

  1. http://www.samygo.tv/
  2. http://marcoramilli.blogspot.com.ar/2013/05/firmware-hacking-samsung-smart-tv-turn.html
Saludos!



Hackeando un Smart TV Samsung (UN46EH5300G) Parte 2

Continuamos con el hacking para el UN46EH5300G. Ahora vamos a entrar en algunos menues ocultos y, si tenemos suerte, habilitar una opcion para que el televisor pueda grabar videos en un dispositivo USB.

Basicamente, muchos dispositivios tienen la posibilidad de acceder a funciones de ingenieria o fabrica para realizara acciones mas complejas. Algunos controles remotos de televisores antiguos (+10 años) disponian de uno o varios botones escondidos en la circuito, de manera que para acceder a ellos habia que desarmar el control.

En nuestro modelo, disponemos de dos menues ocultos: Service Mode y Hotel Mode
Para entrar en Service Mode tenemos que apagar el TV y presionar las teclas MUTE 1 8 2 POWER
El televisor se va a prender y vamos a ver un menu con varias opciones. A recorrer cada una señores! ;)


El otro menu se puede acceder con el televisor prendido. Solamente necesitamos tocar MUTE 1 1 9 OK y ya estamos en Hospitality Mode!

En las primeras versiones del firmware del tv, el modo de Hospitality Mode nos permitia editar la configuración del televisor, y una de esas opciones era habilitar PVR (personal video recording)


Parte 3 http://www.cristianmarquez.com.ar/2013/10/hackeando-un-smart-tv-samsung_8226.html

Disclaimer:
  • Entrar o cambiar la configuración en el menú de servicio sin entender el funcionamiento puede causar daños permanentes en tu televisor. Accede a este menú sólo si estás calificado y capacitado para hacer trabajos de reparación de televisores.

Hackeando un Smart TV Samsung (UN46EH5300G)

Hola a todos:
Hoy les voy a mostrar algunas pruebas que estuve haciendo con un Smart TV de Samsung (que de SMART no tiene nada, tan solo es un thinclient)
Disclaimer:
  • Entrar o cambiar la configuración en el menú de servicio sin entender el funcionamiento puede causar daños permanentes en tu televisor. Accede a este menú sólo si estás calificado y capacitado para hacer trabajos de reparación de televisores.

Bueno, voy a comenzar por partes. Lo primero que hice al tener el tele fue conectarlo a internet y tirarle un nmap para ver que es lo que tenia por detras. Encontre esto:

80/tcp   open  http
443/tcp  open  https
4443/tcp open  pharos
6000/tcp open  X11
7676/tcp open  imqbrokerd
9090/tcp open  zeus-admin

De todos esos puertos, con los que pude jugar son el 80 y el 7676. Para el resto todavia estamos trabajando en encontrar que son y que tocar ;)

El televisor usa el protocolo uPNP, por lo que si utilizamos alguna tool de sniffing, podemos encontrar muchas cosas con las cuales interactuar en nuestro TV.

En linux tenemos uPNP Inspector (hecha en Python) y utilizando esta tool podemos obtener una lista de eventos y métodos que expone nuestro televisor, como así también enviar y recibir comandos:


Con eso, estamos seteando un nivel de volumen al televisor, sin usar nuestro control remoto y mediante nuestra computadora. De esta manera, tambien podemos hacer nuestro cliente mobile para manejar el televisor desde nuestro celular

Hasta aquí una primera parte




Friday, 20 September 2013

Problemas comunes con las computadoras

En los próximos días vamos a estar arrancando con la primavera, y con ella viene un aumento notable en la temperatura. Es muy importante tener en cuenta que nuestras computadoras (escritorio y portátiles) necesitan mantenimiento para trabajar normalmente.
A continuación les comento cuales son los problemas comunes y una explicación de como trabajo para repararlos.
Siempre se me desactualiza la hora. ¿Que le pasa a mi computadora?
Adentro de una computadora se instala una batería que mantiene la configuración del sistema. No solo la fecha y hora, sino también configuración de los discos duros y otros periféricos. Cuando la batería no tiene carga, empezamos a notar este tipo de problemas. El costo de una batería ronda los $5 - $20, y la instalación es sencilla.

Los carteles de "Tu copia de Windows es Ilegal" me tienen harto/a
Uno de los problemas mas comunes, ya que la mayoría trabaja con copia ilegales de sistema operativo. Aquí tenemos varias alternativas para solucionarlo:

Donde esta mi celular?

En caso de que necesitemos saber en donde esta nuestro teléfono android, podemos utilizar Android Device Manager
Usando este manager que nos provee Google, podemos consultar en donde se encuentra nuestro device, hacerlo sonar y borrar los datos remotamente. Muy útil para cuando lo perdemos indoor o sufrimos un robo.
A diferencia de otras aplicaciones, el uso de este administrador no requiere la instalación de una app. Tan solo debemos permitir el acceso a nuestra ubicación y, en el caso de querer permitir el borrado de la información, debemos autorizarlo desde el dispositivo con anterioridad.
Click para ampliar


¿Qué te parece el contenido de esta nota?

Android Maven Plugin

Después de la pequeña introducción que hice aquí, les sigo comentando algunas cosas sobre android-maven-plugin
Una de las ventajas al trabajar con maven son los arquetipos (archetypes) Un arquetipo es una plantilla de proyectos definido por patrones o modelos de proyectos similares.
Usar un archetype permite una manera rápida y consistente de desarrollar, mediante el uso buenas practicas y recomendaciones.
Los archetypes que tenemos disponibles para Android usando el plugin son los siguientes (tomados de http://stand.spree.de/wiki_details_maven_archetypes):

Thursday, 19 September 2013

Android QA Automation Architecture

Después de haber participado de varios proyectos con JAVA y otros tantos en ANDROID, logre armar una arquitectura estable de desarrollo  usando integración continua. (tanto para apps, librerias y tests automáticos)
Lo que propongo con esta arquitectura es lo siguiente:

  • Correr los tests en diferentes versiones de android, tanto en emuladores como en dispositivos reales.
  • Para proyectos del tipo librería, guardar el jar con la info de sus dependencias. Para proyectos de aplicaciones o tests, guardar el apk, también con la info de sus dependencias. Tanto los jars como los apks son guardados en Artifactory, un repositorio de dependencias.
  • Permitir la resolución de dependencias propias y de terceros.
  • Mejora en el manejo de dependencias para evitar conflictos
  • Uso de arquetipos existentes para cumplir con estándares.

La arquitectura es masomenos así:

Wednesday, 10 July 2013

Android QA Automation

Hace mas o menos 3 años arranque con desarrollo de aplicaciones en Android. Hoy quiero aprovechar mi experiencia e introducirlos en otra rama, el testing.
Primeramente, necesitamos definir que tipo de test vamos a realizar, y que tipo de proyecto tenemos.
Básicamente, puedo agrupar dos tipos de proyectos Android:

  1. Lib: Se tratan de proyectos que, generalmente, no tienen interfaz gráfica y que son necesarios para otros proyectos. Por ejemplo: la librería de compatibilidad o librerias como AndEngine son proyectos librerias. Las librerias no se pueden instalar sino que deben ser usadas por proyectos del tipo aplicación. Para testear este tipo de proyectos se puede recurrir a hacer test unitario y, también a crear una aplicación "DEMO" que demuestre como funciona la librería. La automatización se hace sobre la aplicacion "DEMO" como si se tratase de un proyecto del tipo APP, pero verificando y validando la implementacion de la libreria.
  2. App: Estan compuestas por varios activities y generalmente usan librerias externas. Ademas de ejecutar unit test, se puede automatizar la UI mediante ADT o Robotium. Aqui vamos a tratar sobre este último

Ese blog de mierda

Sé que a veces (muchas) soy una persona que se la pasa criticando y puteando.
Hace mucho mucho tiempo que me embolé con algunas empresas y decidí aprovechar éste blog para quejarme y compartirte mi experiencia. (Quizás era eso o simplemente para mandarlos a cagar)
Después de un tiempo, parece que a estas empresas les molestó bastante que haya escrito algo, cuando creo yo que deberían haberse comunicado conmigo y ver de resolver las cosas (PONELE).
Tal es el caso que después de haber publicado el post sobre la bodega de mis alerces y sobre AJ Computacion recibí algunos mails....