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).
/sdcard/Pictures/nautilus
Ao descompilar NautilusLauncher
, você pode ver referências a esse caminho específico:
// caminho: 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();
}
// caminho: 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();
}
// ...
}
O efeito de colocar o arquivo em seu lugar é que o NautilusLauncher
ativará o adb após cada reinicialização. Se o arquivo NÃO estiver em seu lugar, o NautilusLauncher
DESATIVARÁ ativamente o adb (se estiver habilitado anteriormente).
/sdcard/Nautilus/redbend/Credentials.txt
Pelo que parece, a Red Bend Software (adquirida pela Harman, agora entendo por que tantas referências ao KNOX) está fornecendo serviços OTA para o hardware da Nautilus. Encontrei algumas referências a esse arquivo 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")));
// ...
}
// ...
}
Também em 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])));
}
// ...
}
// ...
}
Com essa informação, podemos etiquetar o conteúdo no arquivo /sdcard/Nautilus/redbend/Credentials.txt
como:
Primeira linha: DOMAIN_NAME
Segunda linha: DOMAIN_PIN
DOMAIN_PIN
parece ser um código PIN real, já que é um número de seis dígitos.
Há algumas credenciais dentro da “Rede Red Bend” para associar uma máquina a uma marca/produto específicos para atualizações OTA. Espero que essas credenciais sejam IDÊNTICAS em todo o hardware da Nautilus. O arquivo vem incluído dentro do APK com.redbend.client
e é extraído durante a instalação.
Encontrei referências de com.redbend.client
aqui, e achei bastante engraçado ver que estava travando em um carro. Espero que não falhe tão frequentemente em nossas máquinas também.
Este foi bastante fácil de decifrar. O nome Bluetooth aparece como CL831-xxxxxxx
(número oculto) da CHILEAF.
Ao escanear através do nRF Connect, a direção MAC do dispositivo e alguns dados chave foram expostos:
Frequência Cardíaca:
UUID: 0x180D
Medição da Frequência Cardíaca
UUID: 0x2A37
Parecia bastante padrão, e um post da Comunidade do Home Assistant já havia descoberto isso (não o mesmo modelo, mas parece que o Monitor de Frequência Cardíaca usa um protocolo padrão). Criei um arquivo de configuração do ESPHome aqui como prova de conceito:
©2022-2024 Sebastián Barrenechea. Todos os direitos reservados.
Construído com Astro v4.16.13.