Hackit’2012, solucionario. Level 4

Así que tenemos que destripar un binario .apk para Android… bien, empecemos con la cirugía.

1) Comprobemos material quirúrgico. Vamos a necesitar apktool para abrir al paciente.
2) Un vademecum de cómo y por dónde cortar tampoco vendrá mal.
3) Proceder a abrir en canal el .apk

apktool d AndroidLevel0.apk

4) Buscar un poco dentro de las tripas, a ver si encontramos algo valioso

$ grep -irn "password" * 
...
AndroidLevel0/smali/com/mobandme/hackit/euskal20/level0/services/CryptographyService.smali:114:   
direct {p0}, Lcom/mobandme/hackit/euskal20/level0/services/CryptographyService;->decodePassword()Ljava/lang/String;
 ...

5. Yo creo que tendremos que empezar examinando esa zona (decodePassword() suena bien 🙂
6. Editamos el services/CryptographyService.smali para incluir una llamada de log justo en el punto en el que la aplicación comprueba nuestro password con el que tiene almacenado.

 
const-string v0, "DL_Rules"
# Después de 
#    invoke-direct {p0}, Lcom/mobandme/hackit/euskal20/level0/services/CryptographyService;->decodePassword()Ljava/lang/String;
 #   move-result-object v2
 
invoke-static {v0, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

Por cierto, no conocíamos mucho de las interioridades de un paciente Android, asi que tuvimos que revisar varios tutoriales en la guía anteriormente citada hasta entender cómo llamar al método de la clase Log (que nos mostrará en pantalla el password en claro)

7. Ya podemos cerrar el cuerpo del delito. Sutura.

apktool b AndroidLevel0 /tmp/hack.apk

8. Firmamos nuestra obra de arte

jarsigner -keystore ~/.android/debug.keystore  /tmp/hack.apk  androiddebugkey

9. Y le decimos al paciente que se tome esta pastilla:

adb install /tmp/hack.apk

10. No perder de vista su reacción, porque seguro que nos dice algo interesante que nos permitirá pasar al nivel 5 😉

adb logcat

Acceso a MySQL remoto vía Android y SSH tunneling

Otra receta, esta vez para poder acceder desde nuestro dispositivo Android a una DB MySQL remota protegida por un firewall que impide la conexión directa. Necesitaremos realizar 3 pasos:

1) Instalar Connect Bot (para la parte SSH que explicaré a continuación) y MySQL Connect (de Javier Romero).

2) Generar un túnel SSH que permita conectar el puerto 3306 del dispositivo Android al puerto 3306 de la máquina remota (vía túnel SSH, porque el puerto 3306 remoto, recuerda, está filtrado por el firewall)

Para ello, en Connect Bot mantenemos pulsada la conexión SSH que queremos tunelizar y en el menú contextual elegimos «Editar redirección de puertos». Ahí configuramos una nueva redirección así: (la traducción del primer campo está mal, debería poner ‘nombre del túnel’ o algo similar, no nombre del usuario)

Conectamos ahora normalmente con Connect Bot (como si de una conexión SSH normal se tratara). Internamente estará abriendo el túnel.

3) Abrir una conexión con protocolo MySQL desde el cliente Android (la aplicación que haga esto en principio no sabe que el puerto 3306 local es realmente un extremo del túnel SSH. Para la aplicación Android ese puerto corresponde a una BD MySQL local!) En la imagen adjunta, «tester» es el nombre de usuario MySQL que tengas configurado en la DB remota.

¡Listo! Ya puedes ver y editar tuplas y esquemas de tus tablas cómodamente desde tu tablet Android (desde tu móvil también, pero no tan cómodamente 😉

Froyo, G.O.T., Milestone y Motorola

Llevaba un buen tiempo documentando el proceso a seguir para migrar mi Motorola Milestone a la versión 2.2.1 (Froyo) de Android y hoy lo he conseguido. ¿Por qué cuesta tanto si Froyo está ya anticuado? (Gingerbread 2.3 y Honeycomb 3.0 ya han sucedido a Froyo) Bien, primero porque a Motorola Europa se le ocurrió meter una protección para evitar la instalación de ROMs no oficiales. Segundo, porque la propia Motorola lleva un retraso enorme: primero dijo que en Noviembre de 2010 saldría una versión, pero luego retrasó la noticia al comienzo del primer trimestre de 2011 (obviamente ha vuelto a incumplir su promesa). De hecho no estoy seguro de que vaya a ver alguna vez la luz este upgrade oficial.
En fin, un desastre del que como consumidor tomo nota para el futuro.

Mientras Motorola sigue trabajando en busca de un Froyo estable para el Milestone, la comunidad (G.O.T. en concreto) ha conseguido saltarse protecciones, compilar dicha versión y distribuírla para distintos continentes (Canada, UK, Francia, resto de Europa…)

El proceso no es sencillo, para qué nos vamos a engañar. De hecho mi intención era documentarlo en DiarioLinux una vez ejecutado, pero la gente de desentropia.com me ha ahorrado el trabajo con un EXCELENTE tutorial paso a paso en castellano. La única diferencia entre el tutorial de Desentropia y los pasos que yo he seguido son que he instalado la versión «Retail Europe» del firmware de G.O.T. y que el APN he tenido que reconfigurarlo a mano (por defecto detectaba mi proveedor móvil – Telefónica – pero el APN que metía – telefonica.es – no funcionaba, y en su lugar he metido los datos relativos a – movistar.es – tal y como podéis ver aquí. Misma compañía pero dos configuraciones distintas de APN.. curioso)

FroYo NO oficial para Motorola Milestone

La comunidad hacker lo ha vuelto a conseguir, como no podía ser de otra forma, a pesar de todos los impedimentos que ya comentamos en su día.

MotoFrenzy es el nombre de una custom ROM pergeñada por Dexter Picard, que cómo no, se ha publicado en xda-developers.com. Aún hay cosas por pulir (la grabación de vídeo no funciona, el teclado parece que está en inglés por defecto y la configuración para hacer funcionar HSDPA parece que da guerra, aunque el 3G funcione…) Personalmente esperaré un poquito más para dar el salto, pero poquito, porque disponer en mi Milestone de:

* FroYo (Android 2.2)
* Flash Player 10.1 incluído de serie (!)
* Wifi Tethering (!)
* Apps2SD
* Mayor velocidad en las aplicaciones que Android 2.1

no puede hacerse esperar mucho 🙂 Por otra parte, este lunes Adobe insistía en que Milestone recibirá Flash Player 10.1 de forma oficial (lo que sólo puede hacerse si antes recibe FroYo de forma oficial), por lo que creo que es cuestión de meses…

Finalmente, este post parece una fuga de información interna (o igual es un simple fake), pero viene a decir que Motorola ya tiene fecha oficial para FroYo en Milestone: Noviembre de 2010.

Motorola Milestone: free the Android!

Como decía en el anterior artículo, tras el accidente con el móvil ADP1, y forzado por un enorme síndrome de abstinencia, decidí investigar el mercado en busca de otro móvil Android con teclado físico. Realmente ya había hecho mis deberes antes, pues en mi grupo de investigación necesitábamos usar un móvil con soporte de Flash 10.1…  a ser posible con Android. Bien, sólo encontré en su día 2 móviles que cumpliera con mis requerimientos (lo cual no quiere decir que sólo hubiera 2  😉  : Motorola Milestone y Motorola Droid. Realmente el Google Nexus One también indicaba que soportaría Flash 10.1 pero carecía (y carece) de teclado físico. El Motorola Milestone y el Droid son prácticamente idénticos en lo que a especificaciones HW se refiere, siendo una de las diferencias fundamentales que el Droid tiene soporte para su uso en las redes de telefonía de USA, frente al Milestone, con soporte para redes de telefonía de Europa y América Central. Soooo, si son iguales y el Milestone está preparado «de serie» para ser usado por estos lares, compremos el Milestone, me dije.

Primero la parte buena: es un excelente móvil, con amplia pantalla, muy buena resolución, buena batería (dentro del enorme consumo que Android sigue haciendo de las baterías) y un teclado que, a pesar de las críticas que he leído por ahí – dicen que no se distingue con el tacto una tecla de la otra-, a mí me basta y me sobra.  El Milestone viene de serie con algunas cutre-aplicaciones de Motorola (un navegador tipo TomTom y una aplicación para marcación por voz, por ejemplo). También tiene soporte multi-touch en el navegador y un visor de documentos MS Office. Hasta aquí los bonus-points.

Ahora la parte negativa: el bootloader del Motorola Milestone, a diferencia de su hermano Motorola Droid, comprueba que el firmware que va a arrancar está firmado digitalmente por Motorola.  Si no lo está, no arranca. Esto, que parece una tontería, hace que sea IMPOSIBLE instalar ROMs no oficiales. Por ejemplo, actualmente no es posible instalar Cyanogen ni ninguna otra ROM que sí es instalable en Droid.

Alguien podría decir que bueno, que alguien, algún día, lo conseguirá. Realmente hay serios esfuerzos para conseguirlo, y en esta Wiki se han reunido los mejores hackers de Motorola para intentarlo, pero por ahora no ha habido éxito.  La idea principal para intentar la instalación de una ROM no oficial es muy ingeniosa: consiste en programar un módulo kexec para que el propio kernel oficial de Motorola cargue, en caliente, otro kernel no oficial, sin pasar por el bootloader 🙂   (como sabéis, kexec permite cargar un kernel sin parar el actualmente en uso, muy útil para aplicar parches de seguridad al kernel en sistemas críticos que no permiten ser parados).

También hay un grupo en Facebook para presionar en lo posible a Motorola, pero no ha tenido mucho éxito…

Yo creo que lo mejor entenderá Motorola es ésto: NO compréis un Milestone.  Si os gusta este móvil (a mí me parece de lo mejorcito que hay) entonces esperad hasta agosto y pillaros el Motorola Droid 2 (que vendrá con Froyo) o comprad el Motorola Droid por eBay (que permite instalar nuevas ROMs sin problemas).

Nota: que no puedas cargar ROMs no oficiales no quiere decir que no haya un hack para conseguir ser root en Milestone (por defecto eres un usuario mondo y lirondo, sin permisos para hacer prácticamente nada). Por ejemplo,  el equipo de G.O.T. te ayudará a conseguirlo de forma cómoda (hoy publican un update para la versión española del Milestone 🙂