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).
/sdcard/Pictures/nautilus
Al descompilar NautilusLauncher
puedes ver referencias a esa ruta específica:
// ruta: 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();
}
// ruta: 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();
}
// ...
}
El efecto de colocar el archivo en su lugar es que NautilusLauncher
activará adb después de cada reinicio. Si el archivo NO está en su lugar, NautilusLauncher
DESACTIVARÁ activamente adb (si estaba habilitado anteriormente).
/sdcard/Nautilus/redbend/Credentials.txt
Por lo que parece, Red Bend Software (adquirido por Harman, ahora entiendo por qué tantas referencias a KNOX) está proporcionando servicios OTA para el hardware de Nautilus. He encontrado algunas referencias a ese archivo dentro de 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")));
// ...
}
// ...
}
También en com.redbend.client.ClientService
podemos encontrar:
// ...
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])));
}
// ...
}
// ...
}
Dada esa información, podemos etiquetar el contenido en el archivo /sdcard/Nautilus/redbend/Credentials.txt
como:
Primera línea: DOMAIN_NAME
Segunda línea: DOMAIN_PIN
DOMAIN_PIN
parece ser un código pin real ya que es un número de seis dígitos.
Hay algunas credenciales dentro de la “Red Bend Network” para asociar una máquina con una marca/producto específicos para actualizaciones OTA. Espero que esas credenciales sean IDÉNTICAS dentro de todo el hardware de Nautilus. El archivo viene incluido dentro del APK com.redbend.client
y se extrae al instalarlo.
Encontré referencias de com.redbend.client
aquí, y me pareció bastante gracioso ver que se estrellaba en un auto. Espero que no falle tan a menudo en nuestras máquinas también.
Este fue bastante fácil de descifrar. El nombre Bluetooth aparece como CL831-xxxxxxx
(número oculto) de CHILEAF.
Al escanearlo a través de nRF Connect se expuso la dirección MAC del dispositivo y algunos datos clave:
Ritmo Cardíaco:
UUID: 0x180D
Medición del Ritmo Cardíaco
UUID: 0x2A37
Parecía bastante estándar, y un post de la Comunidad de Home Assistant ya había descubierto esto (no el mismo modelo, pero parece que el Monitor de Ritmo Cardíaco usa un protocolo estándar). He creado un archivo de configuración de ESPHome aquí como prueba de concepto:
©2022-2024 Sebastián Barrenechea. Todos los derechos reservados.
Construido con Astro v4.16.13.