Tuesday, 1 July 2014

Comandos, tips y programas en Linux

Hola! En este post vuelo a mis orígenes, compartiendo algunas cosas del mundo linuxero. En vez de poner el nombre de un comando y que es lo que hace, voy a poner preguntas cotidianas y con que comando pude encontrar la respuesta.
Espero que les sirva!

Mi distro:

Antes que nada, veamos que distro tengo.
Si ejecuto lsb_release -a van a ver lo siguiente:
  $ lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description: Linux Mint 16 Petra
Release: 16
Codename: petra

Comandos útiles:

¿Como saber que esta haciendo el sistema? ¿Que le pasa a mi maquina?Algunas veces nos pasa que "sentimos" lento el sistema, o tenemos problemas para conectarnos a Wifi, algo no nos funciona, etc, y queremos saber que es lo que pasa por abajo. 
En linux podemos ver los mensajes del kernel mediante el comando dmesg que nos muestra algo parecido a esto:
Salida de dmesg
En ese log vamos a poder ver que esta haciendo el sistema (siempre y cuando las aplicaciones escriban en el log)

¿Como leer logs en tiempo real?

Tambien nos puede pasar que necesitemos ver el log de una aplicacion que no esta relacionada con el kernel, por lo que leemos su log. (La mayoria de los logs deben estar en /var/log) A la hora de debuggear una aplicacion, vamos a necesitar ver que hace en tiempo real, por lo que podemos recurrir al comando tail -f que nos permitirá hacerlo. De esta manera, visualizaremos el contenido del archivo a medida que es escrito.
leyendo un log

¿Que aplicacion esta consumiendo mi ancho de banda?

Eso mismo. Tengo tantas cosas corriendo en mi maquina que quiero saber cual se esta comiendo mi conexion. El comando iftop nos muestra el uso de ancho de banda por procesos.
iftop

¿Que aplicacion esta tonteando usando con mi disco duro?

Idem anterior pero para ver quien esta utilizando el disco duro. Para esto tenemos el comando iotop
iotop

Explorador del sistema de archivo desde command line

Si trabajaste con computadoras en la epoca del Windows 95 y 3.1, seguramente la imagen de mc te es familiar. La interfaz es muy parecida al Norton Comander, pero en Linux es Midnight Commander. Conserva los mismos atajos de teclado que el Norton: F5 para copiar archivos, F6 para moverlos, F8 para borrarlos y F9 para acceder al menu. Ahi podemos conectarnos a un servidor por SSH o FTP. Altamente recomendado.
mc

Editor de texto en consola

Fácil: nano. Mas fácil que usar vi o vim. También esta mcedit que viene con el Midnight Commander
nano
mcedit

¿Como puedo ver el "administrador de tareas" en consola?

Si bien con ps aux podemos ver todos los procesos que esta corriendo el sistema, top permite verlos en tiempo real. Lo mismo con htop pero éste ultimo es mas bonito y muestra los micros.
top

HTOP

¿Quiero conocer en que red estoy?

Para analizar nuestra red tenemos varios comandos. Los que mas utilizo son:
ifconfig para saber que ip tengo asignada
route para conocer mi puerta de enlace
cat /etc/resolv.conf para conocer los dns que tengo configurados
nmap para ver que puertos tiene abiertos el gateway
Conociendo la red

¿Como buscar un archivo? ¿Como buscar un archivo que contenga un texto determinado?

Para ambos casos usamos find
Si queremos buscar un archivo por nombre, la sintaxis es find . -name <nombre>
En el caso de que queremos buscar un archivo que contiene x texto, la sintaxis es: find . -type f | xargs grep -i <texto_a_buscar>
Find

¿Cuantas particiones tengo? ¿Como montarlas?

Como root, ejecutamos el comando fdisk -l. Ahi vamos a ver todas las particiones de nuestro disco.

fdisk

Tools gráficas:

¿Que esta pasando en mi red local?

Etherape permite ver de manera gráfica, que esta pasando en nuestra red.
etherape

¿Que dispositivos tengo en mi red local con UPNP y que puedo hacer con ellos?

Esta un poco mas explicado en el post del hacking al smart tv . Upnp-inspector es una tool escrita en python que permite ver que tenemos en nuestra red y como podemos interactuar con esos dispositivos.

upnp inspector

Pregunta para ustedes... ¿que comando utilizan y en que situaciones?

Labels: , , ,

Friday, 27 June 2014

Taller "Hacking Android" en Harriague y Asociados

Finalmente tomó forma y mañana arranca el taller

Labels: , ,

Tuesday, 24 June 2014

Media center casero, utilizando upnp/dlna

Soy fanático de la música y el cine, de colgarme viendo varias películas en un dia. Usuario fiel de uTorrent y Transmission
En mi casa tengo un disco duro externo de 2TB conectado a un SmartTV; en el guardo películas, música y otros archivos multimedia.
Uno de los inconvenientes que tenia era que no podía acceder a mis archivos multimedia desde otro de mis dispositivos:  Si bajaba alguna película nueva, tenia que desconectar el disco del televisor, copiar la película, bajar los subtítulos, conectar el disco al televisor y de ahí comenzar la reproducción. Si quería hacer lo mismo desde una computadora o notebook, tenia que repetir todos esos pasos. Un embole.
Por otra parte, acceder a archivos en el disco desde el celular era imposible, hasta que armé mi red 100% compatible con UPNP.

UPNP es un protocolo que permite compartir datos en una red de manera transparente (entre otras cosas) 
La arquitectura de red que armé es así:
En primer lugar, tengo un router Linksys E900 300 MBPS con un firmware personalizado, basado en DDWRT. Este firmware me permite habilitar características avanzadas para mi red (vpn, firewall, etc) No obstante, no es necesario que ustedes lo hagan, ya que la mayoría de los routers soportan el protocolo uPnP.  
Como clientes tengo un SmartTV, celulares Android, la play 3 y la notebook. El software que utilizo varia segun el dispositivo:
  • El Smart TV Samsung y la PS3 utilizan el software de fabrica
  • Para los dispositivos android utilizo BubbleUPNP 
  • Para las computadoras utilizo XBMC que es multiplataforma.
Nota: Tanto Bubble como XBMC permiten compartir la libreria local con otros dispositivos. 

Veamos algunos ejemplos:
1- Smart TV mostrando los dispositivos que tenemos conectados por UPNP
2- Desde la PS3

3- Desde el celular

Lo bueno de tooodo esto es que ahora puedo poner una pelicula que descargue en el hdd externo al televisor utilizando el celular. Tambien puedo pausar, avanzar o retroceder el video, como asi tambien aumentar o bajar el volumen. 
Ademas, habilité el servidor web de Transmission y uTorrent, lo que me permite agregar descargas sin estar al frente de la pc.
Ejemplos aqui:


Espero que les sirva y puedan armar su red asi!
Saludos,

Labels: , , , , ,

Tuesday, 1 April 2014

Que hacer con un celular Android chotito

Hola!
En este pequeño post les dejo un tutorial para reutilizar los celulares de gama baja que ya no utilicen. De esta manera, podemos ahorrar unos pesos (las camaras IP estan por arriba de los $1000) y también evitamos venderlos por dos mangos, como así también la contaminación que generan.
Antes, un ejemplo de cómo queda:
Lo primero que necesitan es disponer de un celular con sistema operativo Android. Lo ideal sería utilizar uno de gama baja, media-baja. En mi caso tengo un Samsung Galaxy Ace que compré a $500.
Luego, instalen IP Webcam, una aplicación disponible en el Store que genera un servicio http para la cámara.
La configuración es sencilla, no se olviden de configurar un usuario y contraseña para evitar que otras personas accedan a la cámara.
Instalación del celu en mi dpto

Vision nocturna?

Si necesitan colocar la cámara en lugares oscuros, tienen dos alternativas: 
  1. Controlar la luz de led del celular (si está disponible): IP Webcam les permite hacer esto desde la interfaz web que provee.
  2. Comprar o fabricar un iluminador infrarojo: consiste en iluminar con luz infraroja, que no es visible para la vision humana, pero las camaras si lo hacen (pueden probar filmar el led de un control remoto mientras presionan los botones)
Que les pareció el tutorial? Dejen sus comentarios, dudas y sugerencias!

Labels: , , , , , , ,

Tuesday, 18 March 2014

Android QA Automation Architecture 2

Los emuladores android son muy útiles a la hora de desarrollar y probar nuestras aplicaciones android, pero en muchos casos, debido a sus limitaciones, debemos recurrir a dispositivos reales.
Entre estas limitaciones podemos encontrar la falta de sensores ( como NFC, bluetooth y Wifi), instrucciones específicas de procesador (en algunos celulares con microprocesador Intel) y el soporte para dispositivos USB.
Si bien podemos usar dispositivos reales para el desarrollo local, es muy importante poder contar con un entorno de integración continua que utilice los mismos dispositivos.
A continuación les muestro la arquitectura que armé para integración contínua con dispositivos android reales y Jenkins



Arquitectura
Como pueden ver en el diagrama de arquitectura, el servidor con Jenkins tiene una conexión con los diferentes equipos. En este caso estoy utilizando tres con la misma version de android (api level 19) y diferentes vendors o marcas (HTC, Motorola y Samsung) 
Esta arquitectura puede cambiar con otros parámetros, por ejemplo utilizar equipos con diferentes api levels y vendors, tamaños de pantalla, etc.

Conexión

La conexión entre los dispositivos y el servidor es llevada a cabo mediante ADB. Aquí tenemos dos opciones:
  • Mediante un cable usb conectado al servidor
  • A través de la red wifi, mediante el protocolo tcp/ip (Recomendado)
Tip: Si tienen Jenkins en una máquina virtual, pueden probar mapear el puerto USB del driver de ADB a la máquina host.
 Para conectar el celular mediante wifi, tienen que activar ADB sobre red. Esta opción no está disponible en todos los dispositivos, pero existen aplicaciones que permiten hacerlo (necesitan ser root)


Una vez activada la opción, necesitamos conocer nuestra IP. Para ello entramos a la configuración WIFI.

Tip: Es muy importante usar una ip estática en los celulares que estén en Jenkins
Ahora podemos realizar la conexión:

De esta manera, ya tenemos conectado el celular con el servidor
El procedimiento se tiene que repetir para todos los celulares que necesitemos conectar.

Jobs

La configuración de los job es prácticamente la misma. Lo único que hay que tener en cuenta es deshabilitar los emuladores ( si tienen el plugin de android-emulator en jenkins)
También hay que seleccionar el dispositivo en el que queremos correr las tareas, de la siguiente manera:

Ejemplo:

Labels: , , ,

Sunday, 23 February 2014

Como apagar el Motorola Razr HD sin pantalla

El RAZR HD viene con una batería no removible y cuando no te funciona el digitalizador es un embole.
Aqui un pequeño tutorial para apagarlo usando dos herramientas: uiautomatorviewer e input
Primero tenemos que asegurarnos que la pantalla esta prendida. Despues mantenemos presionado el boton de POWER para que salga el cartel de APAGAR y ejecutamos los siguientes comandos:

adb shell
shell@xt925:/ $ su
root@xt925:/ # input tap 192 384

root@xt925:/ # input tap 361 700

Desconectamos el cable usb y listo, celular apagado. 

Pueden usar uiautomatorviewer para saber en donde andan ;)

Labels: , ,

Leyendo Whatsapp sin pantalla

Antes que nada, una foto de como quedo mi celular y así se entiende el porque de este post:
Motorola RAZR HD XT925 Screen Damage
Con el display y el digitalizador roto, necesitaba sacar info de algunos mensajes en Whatsapp... entonces hice lo siguiente...

Requisitos :

  • Tener el celular rooteado
  • Tener busybox instalado
  • Tener sqlite3 instalado
Pasos:
    1. Abrimos una terminal al celu
    adb shell
    shell@xt925:/ $ su
    root@xt925:/ #
    1. Abrir la base de datos de whatsapp usando sqlite3
    root@xt925:/ # cd /data/data/com.whatsapp/databases
    root@xt925:/ # sqlite3 msgstore.db
      1. Seleccionar la tabla correspondiente y ver los mensajes ;)
      1. SQLite version 3.7.11 2012-03-20 11:35:50
      2. Enter ".help" FOR instructions
      3. Enter SQL statements TERMINATED WITH a ";"
      4. sqlite> .TABLES
      5. .TABLES
      6. chat_list  messages
      7. sqlite> SELECT * FROM messages
        1. 8694|549351x967xxx-4@g.us|0|xxxxx-9|0|0|Capaz q no llegue laa foto
        2. |1393110408000|||0|0|||0|1|0.0|0.0||5493515xxxx@s.whatsapp.net|xxx|-
        3. 1|-1|-1||
        4. 8695|549351xxxxx-x@g.us|0|1393105736-5|0|0|Jajajaj ponete las pilas cristian|1393110434000|||0|0|||0|1|0.0|0.0||xxxx@s.whatsapp.net|xxx|-1|-1|-1||

      Les sirvió?

      Labels: , , , , ,

      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.


      Disclaimer: El siguiente procedimiento necesita de una maquina con procesador Intel, con las opciones Intel VT-x, EM64T yExecute Disable(XD) Bit habilitadas en el BIOS

      Procedimiento para S.O. Windows:

      1. Abrir SDK Manager
      2. Descargar Intel x86 Emulator Accelerator y las imagen de sistema de Intel (Intel x86 Atom System Image) 
      3. Instalar IntelHaxm.exe, disponible en ANDROID_HOME/extras/intel/Hardware_Accelerated_Execution_Manager. 
         
         
      4. Crear un nuevo Android Virtual Device (AVD) usando el AVD Manager. 
      5. Disfrutar


      Procedimiento para S.O. Linux: *Próximamente 


      Link oficial (en ingles): http://software.intel.com/en-us/articles/speeding-up-the-android-emulator-on-intel-architecture

      Labels: , , , ,

      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.

      Labels: , , , , , ,

      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.


      Labels: , , , , , ,

      Friday, 20 September 2013

      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?

      Labels: , , ,