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).
/sdcard/Pictures/nautilus
En décompilant NautilusLauncher
, vous pouvez voir des références à ce chemin spécifique :
// chemin : com/nautilus/nautiluslauncher/LauncherService.java
public void run() {
if (!new File("/sdcard/Pictures/nautilus").exists()) {
LauncherService.access$000(LauncherService.this).disableAdbDebug();
LauncherService.access$000(LauncherService.this).enterKioskMode();
return;
}
LauncherService.access$000(LauncherService.this).enableAdbDebug();
}
// chemin : com/nautilus/nautiluslauncher/MainActivity.java
protected void onCreate(Bundle bundle) {
// ...
if (!new File("/sdcard/Pictures/nautilus").exists()) {
this.mPlatformControl.disableAdbDebug();
this.mPlatformControl.enterKioskMode();
} else {
this.mPlatformControl.enableAdbDebug();
}
// ...
}
L’effet de placer le fichier à cet endroit est que NautilusLauncher
activera adb après chaque redémarrage. Si le fichier N’EST PAS en place, NautilusLauncher
DÉSACTIVERA activement adb (s’il était activé auparavant).
/sdcard/Nautilus/redbend/Credentials.txt
Il semble que Red Bend Software (acquis par Harman, maintenant je comprends pourquoi tant de références à KNOX) fournit des services OTA pour le matériel de Nautilus. J’ai trouvé quelques références à ce fichier dans com.redbend.client.apk
.
package com.redbend.client;
public class Ipl {
protected static final String AUTO_SELF_REG_FILE_PATH = "Credentials.txt";
// ...
public static int iplGetAutoSelfRegDomainInfo(Context context, String[] strArr) {
// ...
File file = new File("/sdcard/Nautilus/redbend/");
if (!file.exists()) {
file.mkdirs();
}
copyAssets(context, "Credentials.txt", file.getCanonicalPath());
bufferedReader = new BufferedReader(new FileReader(new File(file.getAbsoluteFile(), "Credentials.txt")));
// ...
}
// ...
}
Aussi dans com.redbend.client.ClientService
nous pouvons trouver :
// ...
public class ClientService extends SmmService {
// ...
@Override // com.redbend.app.SmmService, android.app.Service
public void onCreate() {
// ...
if (Ipl.iplGetAutoSelfRegDomainInfo(this, strArr) == 0) {
sendEvent(new Event("D2B_AUTO_SELF_REG_INFO").addVar(new EventVar("DMA_VAR_AUTO_SELF_REG_DOMAIN_NAME", strArr[0])).addVar(new EventVar("DMA_VAR_AUTO_SELF_REG_DOMAIN_PIN", strArr[1])));
}
// ...
}
// ...
}
Avec ces informations, nous pouvons étiqueter le contenu du fichier /sdcard/Nautilus/redbend/Credentials.txt
comme :
Première ligne : DOMAIN_NAME
Deuxième ligne : DOMAIN_PIN
DOMAIN_PIN
semble être un vrai code PIN car c’est un nombre à six chiffres.
Il y a quelques identifiants au sein du “Réseau Red Bend” pour associer une machine à une marque/un produit spécifique pour les mises à jour OTA. J’espère que ces identifiants sont IDENTIQUES sur tout le matériel de Nautilus. Le fichier est inclus dans l’APK com.redbend.client
et est extrait lors de son installation.
J’ai trouvé des références de com.redbend.client
ici, et j’ai trouvé cela assez drôle de voir qu’il s’écrasait dans une voiture. J’espère qu’il ne plante pas aussi souvent dans nos machines.
Celui-ci a été assez facile à déchiffrer. Le nom Bluetooth apparaît comme CL831-xxxxxxx
(numéro caché) de CHILEAF.
En le scannant via nRF Connect, l’adresse MAC de l’appareil et quelques données clés ont été exposées :
Fréquence Cardiaque :
UUID : 0x180D
Mesure de la Fréquence Cardiaque
UUID : 0x2A37
Cela semblait assez standard, et un post de la Communauté Home Assistant avait déjà découvert cela (pas le même modèle, mais il semble que le Moniteur de Fréquence Cardiaque utilise un protocole standard). J’ai créé un fichier de configuration ESPHome ici comme preuve de concept :
©2022-2024 Sebastián Barrenechea. Tous droits réservés.
Construit avec Astro v4.16.13.