Usar un Proxy para conectar el Emulador Android a Internet y analizar el tráfico
Para el desarrollo y análisi de aplicaciones Android, es muy útil usar un Proxy que hace de intermediario entre el emulador de Android e Internet.
Lo que necesitamos es todo el entorno de desarrollo para aplicaciones Android:
- Android ADT bundle (incluye Eclipse y SDK android) http://developer.android.com/sdk/index.html
- JAVA (con la máquina virtual JRE es suficiente ) http://www.oracle.com/technetwork/java/javase/downloads/index.html
- Proxy, por ejemplo Burp Suite http://portswigger.net/burp/download.HTML.
Supongamos que sabemos cómo se usan estas herramientas y hemos lanzado el Proxy Burp Suite, y creado un AVD (Android Virtual Device) en nuestro ordenador (Windows 8.1 en mi caso).
Después de leer en muchos sitios en Internet sobre como configurar el emulador de Android (la configuración del proxy Burp no tinene ninguna complicación) he sacado las siguientes conclusiones:
1. Si estamos conectados (nuestro PC) mediante cable ethernet a internet, para usar el Proxy con el AVD existen dos opciones (sin problemas):
ejecutarlo desde una línea de comandos:
C:\android_bundle\sdk\tools\emulator.exe -avd Nombre_AVD -http-proxy http://127.0.0.1:8080
donde pondremos el nombre del AVD que hayamos creado y el proxy por defecto en Burp (máquina local, puerto 8080)
ejecutarlo desde el eclipse (Menú Windows/Preferencias/Android/launch/default emulator options)
2. Si estamos conectados a internet por Wifi ( o no estamos conectados)
La solución anterior no es válida y no podemos capturar el tráfinco de internet del AVD en el Proxy. Todo es por la configuración de red de la máquina virtual Android.
En algunos sitios en internet muestran como resolver este problema desactivando en el PC la conexión de Red Ethernet y cualquier otra, dejando sólo la wifi. (no lo he probado)
Pero existe una solución más sencilla sin necesidad de tocar la configuración de red del ordenador:
- Lanzamos el Burp Proxy (tiene que estar funcionando antes de lanzar el emulador, obviamente)
- Lanzamos nuestro emulador Android sin indicar ninguna configuración de proxy (es decir sin pasar el parámetro -http-proxy)
- En el emulador (teléfono) creamos un nuevo Punto de Acceso o modificamos el actual para indicar que use el proxy que tenemos corriendo en nuestro PC (Burp). Da igual cómo llamemos al punto de acceso nuevo.
Es muy importante tener en cuenta que si indicamos en el Punto de Acceso que use como Proxy la dirección 127.0.0.1 (localhost) no va a funcionar, pues el emulador pensará que tiene que usar un proxy ejecutándose en sí mismo, que no es el caso. Basta un vistazo a la documentación de google sobre la configuración de red en el emulador: http://developer.android.com/tools/devices/emulator.html#emulatornetworking
De ahí se deduce que la dirección a usar como la local de nuestro PC para que el emulador Android la interprete correctamente es : 10.0.2.2
Y así hacemos:
Una vez configurado así podemos navegar en el emulador y comprobar que el Proxy Burp funciona. Ojo que en las capturas que muestro no estaba conectado a Internet (ni por cable ni por wifi), y por tantoel navegador muestra un error porque no encuentra las direcciones en internet, pero el entorno AVD-Proxy funciona, que es lo que queríamos.
La funcionalidad del Burp Proxy la vemos en su ventana, cómo ha capturado la petición: