Hace alguna semanas Huawei dio a conocer sus nuevos Huawei Mate 30 y Mate 30 Pro, sus dos últimos buques insignia que llegan al mercado con una versión de Android sin rastro de Google. Para bien o para mal, los servicios de Google como YouTube, Gmail o Google Play Store son indispensables para muchos usuarios en el día a día, así que carecer de ellos puede suponer una barrera importante a la hora de vender los dispositivos en el mercado.
Sin embargo, no dejan de ser móviles Android y, por lo tanto, se puede instalar cualquier app usando un archivo APK, y eso incluye los Google Mobile Services. Precisamente hablando de eso, existe una app llamada LZPlay que cumple tal cometido: instalar la app, hacer un par de clics y dejar instalados los Servicios de Google. John Wu, creador de Magisk, ha analizado la app y ha encontrado algo interesante: unos permisos no documentados que actúan a modo de puerta trasera.
Unas APIs no documentadas a las que alguien tuvo acceso
Comenta John Wu que muchos fabricantes chinos implementan instaladores de Google Mobile Services en sus dispositivos para China. Estos instalan una serie de APKs y solo funcionan cuando el fabricante está usando "un dispositivo con una imagen del sistema licenciada por Google". Otros fabricantes optan por no meter un instalador de GMS, sino un stub, es decir, una especie de instalador preinstalado (valga la redundancia) que debe actualizarse manualmente por el usuario para pasar a ser funcional. Es lo que Samsung hace con la app de Facebook, por ejemplo.
Todo bien, pero el problema está en que el sistema operativo de los Huawei no tiene archivos stubs. En palabras de Wu, "eso significa que hay algún tipo de magia en la app LZPlay". Esa "magia" se encuentra en los permisos que pueden verse en androidmanifest.xml. En concreto, en dos:
<uses-permission android:name="com.huawei.permission.sec.MDM_INSTALL_SYS_APP"/>
<uses-permission android:name="com.huawei.permission.sec.MDM_INSTALL_UNDETACHABLE_APP"/>
Esos permisos corresponden a una serie de APIs para gestión de dispositivos, conocidos más comúnmente como MDM. Por lo general, suelen usarse por empresas para controlar los dispositivos de los empleados, instalar aplicaciones, etc. La miga está en que esos dos permisos no aparecen listados en la documentación que Huawei pone a disposición del público y de los desarrolladores.
Según reza Wu, "por alguna razón, Huawei tiene APIs MDM indocumentadas que permiten a las aplicaciones instalar aplicaciones en el sistema e instalar aplicaciones que no se pueden desinstalar". Sin embargo, estos permisos no funcionan como los sistemas de flasheo convencionales, ya que el bootloader de los móviles Huawei está bloqueado y la empresa formatea la particiones system/vendor/product en formato EROFS, de solo lectura.
Así, el desarrollador afirma que "esto significa que el framework del sistema operativo de Huawei tiene una "puerta trasera" que permite que las aplicaciones permitidas marquen algunas aplicaciones de usuario como aplicaciones del sistema a pesar de que en realidad no existe en ninguna partición de solo lectura". Pero va a más.
Aparentemente, los desarrolladores que quieran aprovechar los permisos mencionados anteriormente tienen que "firmar unos acuerdos legales y mandárselos a Huawei para conseguir acceso al SDK". Continúa Wu, diciendo que "para cada proyecto, el desarrollador debe mandar la solicitud, junto a una justificación y una lista de los permisos que quieren que se le concedan", además de los binarios del APK. Todo esto para Huawei examine la app y la firme.
LZPlay hace uso de estos permisos y funciona. ¿Qué quiere decir eso? Según Wu, que "Huawei está al tanto de LZPlay y sabe explícitamente de su existencia". Dice Wu que "el desarrollador de esta app conocía de alguna manera estas APIs no documentadas, firmó los acuerdos legales, superó diversas etapas de revisiones y eventualmente consiguió que Huawei firmarse su app". Y dada la naturaleza del proceso, el desarrollador tuvo que explicar que su app se usaría para instalar los Google Mobile Services, puesto que es su único propósito, y Huawei lo habría consentido.
John Wu afirma que es estas APIs "están protegidas por un riguroso proceso de verificación por parte de Huawei y requiere que el usuario interaccione con ellas para proceder a la instalación", así que queda la duda de cómo es posible que un desarrollador haya accedido a documentación no disponible y pasado todo este proceso para que LZPlay funcione. Desde Xataka Android nos hemos puesto en contacto con Huawei para saber más información y pasamos a reproducir la respuesta íntegra:
"“Los smartphones de la serie Huawei Mate 30 no lleva preinstalado GMS, y Huawei no ha tenido participación con www.lzplay.net."
Vía | John Wu