12 oct 2011

Curso de introducción a Android VI (Flu-AD)

Siguiendo con el desarrollo de nuestro Flu-bot para Android hoy vamos a ocuparnos, tal y como acordamos el día anterior, de la fase de lectura de órdenes. A modo de recordatorio, en esta fase nos ocuparemos de parsear el código xml que genera la herramienta flu para posteriormente traducirlo a órdenes en el dispositivo móvil donde se encuentre instalado el troyano.

En primer lugar, para que todos podamos hacer el proceso conjuntamente, os recomiendo que tengáis instalado en vuestro equipo un servidor web ya sea LAMP, WAMP, MAMP o XAMP. El objetivo de esto es poder servir el fichero xml del cual leeremos las órdenes posteriormente.

Una vez instalado probamos a bajarnos la herramienta flu y a instalarla en nuestra carpeta servidora de nuestro servidor web ("/var/www/", "C:\xampp\htdocs\" , etc). Con flu ya instalado en nuestros equipos, vamos a generar un nuevo fichero de órdenes, en mi caso he obtenido el siguiente:

De momento hemos obtenido un fichero xml para ejecutar órdenes en un equipo , pero nuestro objetivo hoy es ser capaces de parsear este fichero para posteriormente definir órdenes que podamos ejecutar en un terminal móvil. Con nuestro xml generado abrimos el Eclipse y nos ponemos a programar. Importamos el código que generamos en la última entrada y empezamos con las modificaciones en el método onStart() de la clase Servicio.

Hay bastantes maneras de parsear código xml en Android, personalmente me he decantado por utilizar la librería XMLPullParser. Antes de iniciar el parseado, debemos lanzar una petición desde el móvil a la dirección donde se esté sirviendo el fichero xml, en nuestro caso, a modo de prueba, se servirá en http://localhost/flu/flu.xml. En Android si indicamos una petición a localhost desde nuestro emulador estaremos haciendo referencia al ámbito del propio emulador, hay una dirección reservada para hacer referencia al equipo donde se está ejecutando el emulador, dicha dirección es 10.0.2.2 luego url será http://10.0.2.2/flu/flu.xml. Una vez hecha la petición recogeremos el texto xml que nos devuelve en forma de InputStream y se lo pasaremos todo a nuestro parseador. El código que realiza esta acción es el siguiente:

 

 

A continuación debemos tratar cada etiqueta (tag) del fichero xml. Si observamos el fichero xml, tenemos las siguientes tags: instructions, version e instruction. Realmente las tags que nos interesa tratar de momento son version e instruction. La tag version indicará si el fichero xml ha sido actualizado o no, de esta forma no estaremos ejecutando las órdenes constantemente. Las tags instruction albergarán las instrucciones a ejecutar. El algoritmo que seguimos es muy sencillo, leemos el fichero xml hasta el final y ejecutamos las instrucciones que encontremos siempre que la versión del fichero sea nueva. El código resultante es el siguiente:

Como podemos observar en el código al leer la tag instruction, podemos sacar su atributo type que nos indicará la naturaleza de la instrucción, es aquí donde empezaremos a introducir el código de las órdenes. Podéis probar a ir cambiando la versión del xml para ver que realmente entra a ejecutar las instrucciones.

Recuerda que este código deberás incluirlo en el método run, dentro del método onStart del servicio que creamos en la anterior entrada. Espero que os guste la entrada y que podáis aplicar estos conceptos a más escenarios.

 

Saludos!

 

Descarga proyecto

 

===============================================================

Curso de introducción a Android (Instalación del Android SDK + Hello World)

Curso de introducción a Android II (Creando nuestra primera aplicación)

Curso de introducción a Android III (Escáner de redes WIFI)

Curso de introducción a Android IV (Crackeando redes Wifi)

Curso de introducción a Android V (Flu-AD)

Curso de introducción a Android VI (Flu-AD)

===============================================================

 

1 comentario: