Mientras probábamos la aplicación, tuvimos que «eludir» la comprobación de geolocalización.

Aunque Android ofrece muchas formas sencillas de falsificar la geolocalización —incluida la instalación de una sola aplicación (geolocalización simulada)—, existen otros tantos métodos para detectar esta falsificación. En Android, los desarrolladores no consideran que la geolocalización en sí misma sea un factor de verificación muy fiable.

En iOS, sin embargo, se considera más fiable; como mínimo, el usuario medio de iOS no va a crear una cuenta de desarrollador ni a instalar el Xcode de 9 GB. Pero, ¿y si no fuera tan complicado como parece y, de hecho, resultara incluso más fácil que en Android?

Comparación

Empecemos por analizar las diferencias entre los métodos de seguridad que se pueden utilizar en iOS frente a Android:

NombreAndroidiOSDescripción
Comprobación del SSID/BSSID actual+±En Android, el acceso depende de los permisos y las restricciones de ubicación. En iOS, solo se puede recuperar la red Wi-Fi actual si se cumplen los requisitos de Apple a través de NEHotspotNetwork.fetchCurrent, pero no una lista de redes cercanas.
Escanear SSID de Wi-Fi cercanos+-Android ha permitido históricamente el escaneo de redes Wi-Fi con restricciones de permisos, limitación de velocidad y ubicación. En iOS, una aplicación estándar no puede obtener una lista de SSID cercanos; Apple afirma explícitamente que no existe una API general para obtener una lista de redes Wi-Fi cercanas.
Torres de telefonía móvil+-Android puede obtener información de la red móvil a través de TelephonyManager.getAllCellInfo(), incluidas las células registradas/activas y vecinas, con ACCESS_FINE_LOCATION y compatibilidad con la radio de telefonía. Los resultados pueden estar almacenados en caché, limitados en velocidad, no disponibles o parcialmente disponibles, dependiendo del dispositivo, el operador, la versión del sistema operativo y los permisos. iOS no proporciona una API pública compatible con la App Store para recuperar los ID de las torres de telefonía móvil activas o vecinas, los códigos LAC/TAC, la intensidad de la señal o la lista de torres cercanas. CoreTelephony expone información limitada sobre el operador o proveedor de servicios, pero no datos de escaneo de radio a nivel de torre.

Partiendo de esto, prácticamente cualquier aplicación de Android puede solicitar además las redes cercanas y utilizarlas para la geolocalización interna a través de un servicio de terceros. Estos datos pueden ser falsificados y no constituyen un indicador fiable.

En iOS, la situación es ligeramente diferente, y los requisitos para las aplicaciones también lo son. Además, prohíbe explícitamente el uso de estos datos para la geolocalización. En cualquier caso, estos datos pueden falsificarse utilizando un dispositivo que actúe como punto de acceso a la red.

Ninguna de las dos plataformas dispone de una forma directa de detectar el modo de desarrollador, pero existen detectores de «Mock Location»

Location.isMock() — en Android.

CLLocation.sourceInformation?.isSimulatedBySoftware — en iOS.

En Android, cualquier aplicación que selecciones para «Mock Location» tendrá el location.isMock=true indicador activado si el dispositivo no está rooteado. Sin embargo, en combinación con deviceIntegrity, esto puede evitarse teóricamente o hacerse mucho más difícil.

En iOS, sin embargo, las cosas son diferentes. CLLocation puede ser generado por la propia aplicación; es decir, si utilizas un kit de herramientas de terceros distinto de Xcode, puedes eliminar isSimulatedBySoftware=true

Esto es lo que vamos a aprovechar. Tampoco utilizaremos ningún software propietario, solo herramientas de código abierto. Así que nada de Xcode, iTools ni 3uTools.

Solución: pymobiledevice3

Instalación

Debes tener instalada la versión 3.9 o superior de Python.

0. En la terminal, ejecuta: python3 -m pip install -U pymobiledevice3

1. Desbloquea el dispositivo

2. Conéctalo al ordenador mediante USB y autoriza el acceso

3. Pulsa «Confiar» en este ordenador

4. Activa el modo de desarrollador: pymobiledevice3 amfi enable-developer-mode

Es posible que tengas que reiniciar el dispositivo y repetir los pasos 1 a 4 si no funciona a la primera.

5. Ve a Ajustes -> Seguridad y privacidad -> Seguridad -> Modo de desarrollador

6. Comprobemos si nuestro dispositivo aparece reconocido: pymobiledevice3 usbmux list

la respuesta debería ser:

[
    {
        "BuildVersion": "23F84",
        "ConnectionType": "USB",
        "DeviceClass": "iPhone",
        "DeviceName": "******",
        "Identifier": "0000000-00000000000000",
        "ProductType": "iPhone17",
        "ProductVersion": "26.5.2",
        "UniqueDeviceID": "0000000-00000000000000"
    }
]

Dispositivo detectado.

7. Seleccionemos y montemos la imagen de disco para desarrolladores del iPhone

pymobiledevice3 mounter auto-mount

Una vez montada correctamente, podemos enviar el comando:

pymobiledevice3 developer dvt simulate-location set --userspace -- <LAT> <LONG>

Ahora puedes abrir cualquier aplicación y mostrará tu geolocalización en el punto seleccionado.

Conclusión

Hemos eludido las medidas de seguridad y hemos obtenido acceso a funciones que no deberían haber estado disponibles en este dispositivo. Hemos redactado una serie de recomendaciones sobre cómo mejorar la seguridad y prevenir determinadas situaciones.

Gracias por leer este artículo y, para terminar, me gustaría añadir: no confíes en el entorno del usuario, ya que siempre puede ser falsificado.