fl3xbl0w项目标志

Bowflex 奇趣 - fl3xbl0w

发布于 2022年5月28日

逆向工程项目。起初是针对Bowflex Treadmill 22,但后来泛化为适用于Nautilus Inc.(Nautilus、Bowflex、Schwinn)销售的任何Android设备。

/sdcard/Pictures/nautilus 文件

当反编译 NautilusLauncher 时,你可以看到对那个特定路径的引用:

// 路径: 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();
}
// 路径: 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();
  }
  // ...
}

将文件放在其位置的效果是 NautilusLauncher 将在每次重启后激活 adb。如果文件不在位,NautilusLauncher 将主动禁用 adb(如果之前已启用)。

/sdcard/Nautilus/redbend/Credentials.txt 文件

看来 Red Bend Software被 Harman 收购,现在我明白为什么有这么多关于 KNOX 的引用)为 Nautilus 硬件提供 OTA 服务。我在 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")));
    // ...
  }
  // ...
}

还在 com.redbend.client.ClientService 中可以找到:

// ...
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])));
      }
    // ...
  }
  // ...
}

根据这些信息,我们可以将 /sdcard/Nautilus/redbend/Credentials.txt 文件中的内容标记为:

第一行:DOMAIN_NAME
第二行:DOMAIN_PIN

DOMAIN_PIN 似乎是一个真实的 PIN 码,因为它是一个六位数的数字。

在 “Red Bend Network” 中有一些凭据,用于将机器与特定品牌/产品关联以进行 OTA 更新。我希望这些凭据在所有 Nautilus 硬件中都是相同的。该文件包含在 com.redbend.client APK 中,并在安装时提取。

我在 这里 找到了对 com.redbend.client 的引用,看到它在一辆车中崩溃,我觉得相当有趣。我希望它在我们的机器上不会那么频繁地失败。

蓝牙心率监测器

这个问题相当直接。蓝牙名称显示为 CL831-xxxxxxx (数字隐藏) 来自 CHILEAF

通过 nRF Connect 扫描时,设备的 MAC 地址和一些关键数据被暴露:

心率:
UUID: 0x180D
心率测量
UUID: 0x2A37

这似乎相当标准,而且 Home Assistant 社区的一个帖子已经弄清楚了这一点(不是同一型号,但看起来心率监测器使用标准协议)。我在这里创建了一个 ESPHome 配置文件作为概念验证:

Home Assistant 显示心率传感器的截图
内容翻译者 gpt-4-1106-preview

©2022-2024 Sebastian Barrenechea. 保留所有权利.

构建于 Astro v4.16.13.