Projeto de engenharia reversa. Começou com a esteira Bowflex Treadmill 22, mas acabou se generalizando para qualquer máquina com Android vendida pela Nautilus Inc. (Nautilus, Bowflex, Schwinn).
Este método depende de que as especificações do Bowflex Console sejam muito lentas para o software de hoje (tem apenas 2Gb de RAM na placa Android). Por isso, e se formos mais rápidos que o tablet, podemos fazer jailbreak a partir do AppMonitorService
da Nautilus.
É um tipo de ataque de força bruta?
Você pode reiniciar a máquina a qualquer momento do processo, e tudo estará como deveria. Não há risco no lado do software por fazer isso. Experimente!
Eu usei um Logitech K600, mas qualquer teclado com essas teclas deve funcionar:
Teclados Bluetooth parecem não conseguir parear através do JRNY.
Primeiro, vamos ligar a máquina e conectar o teclado USB ao Console Bowflex. Você pode encontrá-lo no lado direito:
Vamos garantir que o teclado esteja funcionando pressionando o botão “Home” no teclado. Isso deve fazer com que o aplicativo JRNY reinicie.
O Android tem um atalho para fechar o aplicativo atual através do botão “Back” se você mantê-lo pressionado por um segundo ou algo assim. Vamos brincar um pouco com o botão “Back” - vamos fechar continuamente o aplicativo JRNY assim que ele reabrir até que um novo diálogo comece a aparecer:
Ok, agora a parte divertida: Esse diálogo pertence ao “sistema de verificação de falhas” do Android stock. Acabamos de “forçar o Android a pensar” que o NautilusLauncher está com problemas (ótimo!). Vamos explorar através desse diálogo.
Assim que aparecer, toque em “Informações do aplicativo”. Ao clicar em “Informações do aplicativo”, vamos abrir o aplicativo de Configurações (que está na lista de negados do AppMonitorService
). Ele fechará em cerca de um segundo, então temos que ser rápidos! Toque no botão “FORÇAR PARADA”, e depois em “OK”.
Assim que você puder clicar em “OK”, pode descansar (bom exercício, hein?). Agora vamos prosseguir com as descobertas no Reddit. Vamos habilitar o adb clicando no ícone de “lupa” no canto superior direito e procurando por “Opções de desenvolvedor”:
Encontre o endereço IP do Console. A maneira mais fácil é através das Configurações de Wi-Fi:
Agora que o adb está habilitado e temos o endereço IP, vamos para um computador e nos conectamos com o adb. Abra um terminal e execute adb connect <Endereço IP>
(no meu caso 10.0.0.205):
> adb connect 10.0.0.205
connected to 10.0.0.205:5555
Ele pedirá uma confirmação na tela a primeira vez que você se conectar remotamente através do adb.
Vamos criar um arquivo vazio dentro de /sdcard/Pictures/
chamado nautilus
. Você pode ler mais sobre o “porquê” em Curiosidades sobre Bowflex.
> adb shell touch /sdcard/Pictures/nautilus
Agora vamos restaurar algumas funcionalidades. Envie os seguintes comandos através do seu 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
Você verá a interface do usuário aparecer:
Há um passo final - mudar o lançador padrão. Procure por “Aplicativos padrão” e defina o Quickstep como o aplicativo de início:
Agora você é livre!
Este estado se manterá enquanto o NautilusLauncher estiver forçado a parar. Persiste através de reinicializações.
Se você quiser voltar ao “original”, basta abrir o aplicativo NautilusLauncher
(eu sugiro fortemente que você tenha criado o arquivo /sdcard/Pictures/nautilus
antecipadamente):
NautilusLauncher
é o “lançador de Android” padrão, o que significa que se o aplicativo JRNY for fechado, ele imediatamente “reabrirá”.
Há também outro “bloqueio de segurança”, um serviço em primeiro plano no apk do NautilusLauncher
, chamado AppMonitorService
. Ao descompilar o apk, você pode ver três variáveis interessantes:
public static final int MonitorIntervalSeconds = 1;
// Algumas outras variáveis
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"};
E assim esse serviço está “protegendo ativamente” o bloqueio. A cada fechamento do aplicativo (através de manter pressionado o botão “Back”), haverá uma tentativa de reabrir o JRNY. Ao forçar a parada, também desativamos todos os serviços em primeiro plano.
(os erros de digitação que você pode ver nos trechos de código vêm dos próprios desenvolvedores da Nautilus, não meus)
©2022-2024 Sebastián Barrenechea. Todos os direitos reservados.
Construído com Astro v4.16.13.