Projet d'ingénierie inverse. A commencé avec le tapis de course Bowflex Treadmill 22 mais s'est généralisé pour tout appareil Android vendu par Nautilus Inc. (Nautilus, Bowflex, Schwinn).
Cette méthode dépend du fait que les spécifications de la console Bowflex sont trop lentes pour les logiciels d’aujourd’hui (elle n’a que 2 Go de RAM sur la carte Android). À cause de cela, et si nous sommes plus rapides que la tablette, nous pouvons effectuer un jailbreak depuis le AppMonitorService
de Nautilus.
Est-ce qu’on pourrait appeler ça une attaque par force brute ?
Vous pouvez redémarrer la machine à tout moment du processus, et tout sera comme il se doit. Il n’y a aucun risque du côté logiciel à le faire. Essayez-le !
J’ai utilisé un Logitech K600, mais tout clavier avec ces touches devrait fonctionner :
Il semble que les claviers Bluetooth ne peuvent pas être appairés via JRNY.
D’abord, allumons la machine et connectons le clavier USB à la console Bowflex. Vous pouvez le trouver sur le côté droit :
Assurons-nous que le clavier fonctionne en appuyant sur le bouton “Home” du clavier. Cela devrait redémarrer l’application JRNY.
Android a un raccourci pour fermer l’application actuelle via le bouton “Back” si vous le maintenez enfoncé pendant une seconde ou quelque chose comme ça. Jouons un peu avec le bouton “Back” - fermons continuellement l’application JRNY dès qu’elle se rouvre jusqu’à ce qu’un nouveau dialogue commence à apparaître :
Ok, maintenant la partie amusante : Ce dialogue appartient au “système de vérification des erreurs” d’Android stock. Nous venons de “forcer Android à penser” que NautilusLauncher a un problème (super !). Exploitons ce dialogue.
Dès qu’il apparaît, touchez “App info”. En cliquant sur “App info”, nous allons ouvrir l’application Paramètres (qui est sur la liste des refus de AppMonitorService
). Elle se fermera en environ une seconde, donc nous devons être rapides ! Touchez le bouton “FORCE STOP”, puis touchez “OK”.
Dès que vous pouvez cliquer sur “OK”, vous pouvez vous reposer (bon exercice, hein ?). Maintenant, procédons avec les découvertes sur Reddit. Activons adb en cliquant sur l’icône “loupe” dans le coin supérieur droit et en recherchant “Options pour développeurs” :
Trouvez l’adresse IP de la console. Le moyen le plus simple est via les paramètres Wi-Fi :
Maintenant que adb est activé et que nous avons l’adresse IP, passons à un ordinateur et connectons-nous avec adb. Ouvrez un terminal et exécutez adb connect <Adresse IP>
(dans mon cas 10.0.0.205) :
> adb connect 10.0.0.205
connected to 10.0.0.205:5555
Il vous demandera une confirmation à l’écran la première fois que vous vous connecterez à distance via adb.
Créons un fichier vide dans /sdcard/Pictures/
appelé nautilus
. Vous pouvez en savoir plus sur le “pourquoi” dans Curiosités de Bowflex.
> adb shell touch /sdcard/Pictures/nautilus
Maintenant, restaurons certaines fonctionnalités. Envoyez les commandes suivantes via votre 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
Vous verrez apparaître l’interface utilisateur :
Il y a une dernière étape - changer l’application de lancement par défaut. Recherchez “Applications par défaut” et définissez Quickstep comme application de démarrage :
Vous êtes maintenant libre !
Cet état se maintiendra tant que NautilusLauncher sera forcé de s’arrêter. Il persiste à travers les redémarrages.
Si vous voulez revenir à “stock”, il suffit d’ouvrir l’application NautilusLauncher
(je vous suggère fortement d’avoir créé le fichier /sdcard/Pictures/nautilus
au préalable) :
NautilusLauncher
est le “lanceur Android” par défaut, ce qui signifie que si l’application JRNY se ferme, elle se rouvrira immédiatement.
Il y a aussi un autre “verrou de sécurité”, un service en premier plan dans l’apk de NautilusLauncher
, appelé AppMonitorService
. En décompilant l’apk, vous pouvez voir trois variables intéressantes :
public static final int MonitorIntervalSeconds = 1;
// Quelques autres 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"};
Et ainsi ce service “protège activement” le verrouillage. À chaque fermeture de l’application (via le maintien du bouton “Back”), il y aura une tentative de rouvrir JRNY. En forçant sa fermeture, nous désactivons également tous les services en premier plan.
(les fautes de frappe que vous pourriez voir dans les extraits de code proviennent des développeurs de Nautilus eux-mêmes, pas de moi)
©2022-2024 Sebastián Barrenechea. Tous droits réservés.
Construit avec Astro v4.16.13.