Simulación de ubicaciones con Fake GPS JoyStick
Existen multitud de apps que permiten la simulación de la ubicación en Android por lo que a priori podría parecer una labor simple de realizar. La problemática surge cuando esta simulación se pretende para la manipulación de aplicaciones de terceros, las cuales tienen interés en evitar la manipulación de la localización. En estos casos, falsear la localización del dispositivo requiere ponérselo difícil a estas aplicaciones para detectar que la ubicación está siendo manipulada.
En esta entrada se detallan los pasos seguidos para este fin, desde conceder acceso root al dispositivo hasta la instalación y configuración de aplicaciones necesarias. Para ello dividiremos la entrada en diversas secciones; algunas de las cuales podrían diferir en función del dispositivo.
Proceso de rooteo
Los pasos descritos en esta sección son los seguidos en un terminal BQ Aquaris V. La lista de software utilizado es:
- ADB y FastBoot 1.4.3
- Bootloader tools (no necesario si ya se dispone del bootloader desbloqueado)
- Imagen de TWRP (versión para BQ Aquaris V)
- Magisk y Magisk Manager
Desbloquear booloader
Esta acción elimina toda la información del almacenamiento interno del dispositivo, dejándolo como recién comprado. Necesitaremos tener habilitada la depuración en el terminal y desbloqueo de OEM. Conectamos el terminal por USB al pc y ejecutamos Desbloquear.bat, contenido en las Bootloader tools. Tras la ejecución de este comando se pedirá confirmación desde el terminal y comenzará el proceso de borrado. Tras el reinicio no merece la pena prestar demasiada atención al asistente inicial de configuración ya que tras la instalación de TWRP esta configuración se volverá a borrar,
Instalación de TWRP
El ejecutable de ADB + fastboot extrae por defecto las herramientas en la carpeta C:\adb. Tras su instalación, extraer en esta carpeta la imagen de TWRP descargada (en nuestro caso twrp-3.3.1-0-nappa.img) y la renombramos como recovery.img. Aprovechamos para descargar el zip de Magisk (en nuestro caso Magisk-v20.3.zip) y se traslada a la memoria del teléfono. Abrimos un terminal en la carpeta adb y ejecutamos el siguiente comando para reiniciar el dispositivo en modo fastboot:
adb reboot bootloader
Este comando resulta problemático frecuentemente por tema de drivers instalados en el equipo. Si el driver no está correctamente instalado/configurado o no se detecta el dispositivo, cuando intentemos lanzar el comando obtendremos el error:
error: device '(null)' not found
Una vez reiniciado el dispositivo, lanzaremos la instalación de TWRP con el siguiente comando:
fastboot flash recovery recovery.img
NOTA: En mi primer intento de instalación recibí el error:
FAILED (remote: Partition flashing is not allowed)
…señal de que olvidé desbloquear el bootloader
Una vez finaliza la instalación, mantener presionado volume up y lanzamos el siguiente comando para reiniciar el dispositivo e ingresar en TWRP:
fastboot reboot
NOTA: En la documentación que seguí para realizar el proceso se recomendaba la instalación del paquete no-verity-opt-encrypt para evitar el «bootloop» (bucle de arranque) y otras problemas menores durante el arranque. Lo cierto es que intenté su instalación desde TWRP pero obtuve un error. En cualquier caso mi dispositivo arranca sin problemas, por lo que me cuestiono la necesidad de instalar dicho paquete.
Instalación de Magisk
Para instalar Magisk accedemos a TWRP, encendiendo el dispositivo manteniendo pulsado volume up. Al acceder por primera vez a TWRP nos pregunta si se desea mantener el modo solo lectura. Marcamos la opción No volver a mostrar esta advertencia y deslizamos el botón para acceder. Pulsamos Instalar, buscamos el zip de Magisk, instalamos y reiniciamos.
Una vez instalamos Magisk, debemos instalar MagiskManager.apk.
Instalación Fake GPS JoyStick
Aunque esta aplicación está disponible en Play Store, puede descargarse en su sitio oficial una versión con diversas funcionalidades desbloqueadas como, entre otras, el modo de privacidad. Deberemos seleccionar la versión que se ajuste a nuestra arquitectura de CPU, si no la conocemos podemos hacer uso de la aplicación Droid Hardware Info para averiguarla. En nuestro caso utilizamos gpsjoystick-unlocked-armeabi-v7a.apk.
Mediante el modo de privacidad mencionado anteriormente, realizaremos un clon de la aplicación dándole un nombre distinto. Si Android requiere algún tipo de permiso para esta instalación lo concederemos. Tras finalizar esta nueva instalación eliminaremos la aplicación principal.
Sistematizando Fake GPS JoyStick
Instalaremos dos módulos a través de Magisk; App Systemizer y Busybox. Para ello desde el menú de Magisk, click en Descargas, buscamos App Systemizer e instalamos, seguimos mismos pasos para Busybox. Para tener operativas estas instalaciones será necesario reiniciar el terminal.
Una vez reiniciado instalamos Terminal Emulator. Desde el terminal ejecutamos el comando su (nos pedirá acceso root), después ejecutamos systemize, del siguiente menú seleccionamos la opción 1 Systemize Installed Apps (Listed) y damos enter, en el siguiente menú aparece un listado de todas las aplicaciones instaladas en el terminal, Seleccionamos el clon que generamos y damos enter, a la siguiente cuestión seleccionamos la opción 2 y damos enter y después regresamos al menú principal y cerramos la ventana. Reiniciamos el terminal.
Tras reiniciar, el siguiente paso consiste en ocultar Magisk a las aplicaciones que no queramos que sepan de nuestro root. El primer paso será eliminar de nuestro almacenamiento todos los archivos de instalación de Magisk. En mi caso solo tuve que eliminarlos de la SD. El segundo paso, desde el menú de Magisk Manager, seleccionamos Magisk Hide. Se mostrará un listado de todas nuestras aplicaciones, seleccionaremos aquella o aquellas que no queramos que sepan de root. En tercer lugar abrimos ajustes de Magisk Manager, allí nos aseguramos que Magisk hide está activado. Después hacemos click en Ocultar Magisk Manager. Daremos un nuevo nombre a Magisk Manager por el cual no se le pueda identificar. Se ejecutará un proceso en segundo plano y al finalizar se cerrará Magisk Manager. Reabrimos a través del enlace con el nuevo nombre seleccionado y, desde el menú, ajustes, hacemos click en Limpiar Caché del repositorio.
Configurando Fake GPS JoyStick
Llegados a este punto ya tenemos nuestro joystick instalado como aplicación del sistema, siendo indetectable para aquellas aplicaciones que hayamos configurado. Como medida de prevención, es recomendable configurar el joystick para que impida que ninguna aplicación tome capturas de pantalla cuando el joystick esté activo. Esto se puede seleccionar desde la configuración del Joystick.
También es probable que tras el primer intento de ejecución de nuestro joystick se nos solicite permisos de dibujo sobre otras aplicaciones, los cuales debemos conceder.
Otro ajuste que probablemente se requiera es seleccionar nuestro joystick como mock location app, cosa que NO debemos hacer. En su lugar, debemos marcar la opción de Modo sistema desde los ajustes.
Problema de salto entre ubicación real y simulada
Este es un problema muy común con este tipo de aplicaciones para la que no hay una solución 100% eficaz. Mis recomendaciones para minimizar estos efectos son:
- Asegurarnos que el modo de ubicación en nuestro dispositivo está configurado como Solo dispositivo. Esta configuración puede ser diferente entre distintos modelos. En mi caso, la opción se encuentra en Ajustes –> Seguridad y ubicación –> Privacidad –> Ubicación –> Modo
- Asegurarnos que el escaneo por wifi y bluetooth también está desactivado. En mi caso, la opción se encuentra en Ajustes –> Seguridad y ubicación –> Privacidad –> Ubicación –> Búsqueda
- Si se presentan movimientos erráticos en la posición GPS, ir a Ajustes –> Aplicaciónes, buscamos Servicios de google play y Maps y en ambas aplicaciones eliminamos datos y cache.
Mediante la aplicación Disable Service que podemos descargar desde Play Store (a la que daremos permiso root) vamos a la pestaña System y deshabilitamos el servicio Fused Location (Ubicación combinada). Reiniciamos dispositivo.Realizar nueva búsqueda de servicios, buscamos LocationServices, hacemos click y deshabilitamos los 5 servicios que se muestran. Reiniciamos dispositivo.
NOTA: Tachamos los dos últimos puntos de la lista anterior ya que determinadas aplicaciones no funcionan sin estos servicios activos. Una lástima, ya que la precisión que adquiere nuestro joystick con estas medidas es prácticamente 100%.