Logo del proyecto fl3xbl0w

Jailbreak de Android - fl3xbl0w

Lanzado el 28 may 2022

Proyecto de ingeniería inversa. Comenzó con la trotadora Bowflex Treadmill 22 pero terminó generalizándose para cualquier máquina con Android vendida por Nautilus Inc. (Nautilus, Bowflex, Schwinn).

Este método depende de que las especificaciones del Bowflex Console sean demasiado lentas para el software de hoy en día (solo tiene 2Gb de RAM en la placa Android). Debido a eso, y si somos más rápidos que la tablet, podemos hacer jailbreak desde el AppMonitorService de Nautilus.

¿Se podría llamar un ataque de fuerza bruta?

Puedes reiniciar la máquina en cualquier momento del proceso, y todo estará como debería. No hay riesgo en el lado del software por hacerlo. ¡Dale una prueba!

Requisitos

  • Un teclado USB (con cable o inalámbrico a través de un dongle USB) con “botones de medios” para Home, Back.
  • ¡Dedos rápidos! (la “parte intensa” debe ocurrir en alrededor de un segundo)
  • Un computador con adb (link de descarga)

Yo usé un Logitech K600, pero cualquier teclado con esas teclas debería funcionar:

Teclado Logitech K600

Los teclados Bluetooth parecen no poder emparejarse a través de JRNY.

Consejos

  • No trates de “hacerlo bien” desde el principio. Toma algunos intentos para descubrir “en qué partes de la pantalla aparecen los botones”, así puedes construir algo de memoria muscular para las acciones de tocar.
  • ¡NO GOLPEES LA PANTALLA FUERTE! Ser rápido no significa romperla. No soy responsable de personas que golpeen sus pantallas demasiado fuerte.

Instrucciones

Primero, vamos a encender la máquina y conectar el teclado USB a la Consola Bowflex. Lo puedes encontrar en el lado derecho:

Indica dónde está la ubicación del puerto USB de la consola

Asegurémonos de que el teclado funciona presionando el botón “Home” en el teclado. Debería hacer que la app JRNY se reinicie.

animación de la consola

Android tiene un atajo para cerrar la app actual a través del botón “Back” si lo mantienes presionado por un segundo o algo así. Juguemos un poco con el botón “Back” - vamos a cerrar continuamente la app JRNY tan pronto como la app se reabra hasta que comience a aparecer un nuevo diálogo:

animación de la consola

Ok, ahora la parte divertida: Ese diálogo pertenece al “sistema de verificación de fallos” de Android stock. Acabamos de “forzar a Android a pensar” que NautilusLauncher está mal (¡bien!). Vamos a explotar a través de ese diálogo.

Tan pronto como aparezca, toca en “App info”. Al hacer clic en “App info” vamos a abrir la app de Configuración (que está en la lista de denegados de AppMonitorService). Se cerrará en alrededor de un segundo, ¡así que tenemos que ser rápidos! Toca en el botón “FORCE STOP”, y luego toca en “OK”.

animación de la consola

Tan pronto como puedas hacer clic en “OK”, puedes descansar (buen ejercicio, ¿eh?). Ahora procedamos con los hallazgos en Reddit. Vamos a habilitar adb haciendo clic en el icono de “lupa” en la esquina superior derecha y buscando “Developer options”:

animación de la consola

Encuentra la dirección IP de la Consola. La forma más fácil es a través de la Configuración de Wi-Fi:

animación de la consola

Ahora que adb está habilitado y tenemos la dirección IP, saltemos a un computador y conectemos con adb. Abre un terminal y ejecuta adb connect <Dirección IP> (en mi caso 10.0.0.205):

> adb connect 10.0.0.205
connected to 10.0.0.205:5555

Te pedirá una confirmación en pantalla la primera vez que te conectes de forma remota a través de adb.

Creemos un archivo vacío dentro de /sdcard/Pictures/ llamado nautilus. Puedes leer más sobre el “por qué” en Curiosidades de Bowflex.

> adb shell touch /sdcard/Pictures/nautilus

Ahora vamos a restaurar algunas funcionalidades. Envía los siguientes comandos a través de tu terminal:

> adb shell settings put secure ntls_launcher_preference 0
> adb shell settings put secure navigationbar_switch 1
> adb shell settings put secure notification_switch 1
> adb shell settings put secure statusbar_switch 1

Verás aparecer la UI:

animación de la consola

Hay un paso final - cambiar el lanzador predeterminado. Busca “Default apps” y establece Quickstep como la app de inicio:

animación de la consola

¡Ahora eres libre!

Este estado se mantendrá mientras NautilusLauncher esté forzado a detenerse. Persiste a través de reinicios.

Si quieres volver a “stock” solo abre la app NautilusLauncher (te sugiero fuertemente que hayas creado el archivo /sdcard/Pictures/nautilus de antemano):

animación de la consola

Notas sobre el “Sistema de bloqueo”

NautilusLauncher es el “lanzador de Android” predeterminado, lo que significa que si la app JRNY se cierra, inmediatamente “se reabrirá”.

También hay otro “bloqueo de seguridad”, un servicio en primer plano en el apk de NautilusLauncher, llamado AppMonitorService. Al descompilar el apk, puedes ver tres variables interesantes:

public static final int MonitorIntervalSeconds = 1;
// Some more variables
private static String[] TargtedAppsToKill = {"com.android.vending", "com.android.settings", "com.android.chrome", "com.google.android.gm", "com.google.android.youtube"};
private static String[] TargtedAppsToBackground = {"com.google.android.googlequicksearchbox:interactor", "com.google.android.googlequicksearchbox:search", "com.google.android.googlequicksearchbox", "com.android.launcher3", "com.google.android.inputmethod.latin"};

Y así ese servicio está “protegiendo activamente” el bloqueo. En cada cierre de la app (a través de mantener presionado el botón “Back”), habrá un intento de reabrir JRNY. Al forzar su cierre, también desactivamos todos los servicios en primer plano.

(los errores tipográficos que puedas ver en los respaldos de código provienen de los propios desarrolladores de Nautilus, no míos)

©2022-2024 Sebastián Barrenechea. Todos los derechos reservados.

Construido con Astro v4.16.13.