fl3xbl0wプロジェクトのロゴ

Bowflexの好奇心 - fl3xbl0w

リリース日: 2022年5月28日

リバースエンジニアリングプロジェクト。Bowflex Treadmill 22から始まりましたが、最終的にはNautilus Inc.(Nautilus、Bowflex、Schwinn)が販売するすべてのAndroidマシンに一般化されました。

/sdcard/Pictures/nautilus ファイル

NautilusLauncherを逆コンパイルすると、その特定のパスへの参照が見られます:

// path: 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();
}
// path: 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 SoftwareHarmanに買収されました。これで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 の内容は次のようにラベル付けできます:

1行目: DOMAIN_NAME
2行目: DOMAIN_PIN

DOMAIN_PINは実際のピンコードで、6桁の数字です。

「Red Bend Network」内のいくつかの資格情報が、特定のブランド/製品とマシンをOTAアップデート用に関連付けるために使用されているようです。この資格情報がすべてのNautilusハードウェアで同一であることを願っています。このファイルはcom.redbend.client APK内に含まれており、インストール時に抽出されます。

com.redbend.clientに関する参照をこちらで見つけましたが、車でクラッシュしているのを見て少し面白かったです。私たちのマシンでも頻繁にクラッシュしないことを願っています。

Bluetooth心拍数モニター

これは比較的簡単に解読できました。Bluetooth名はCL831-xxxxxxx(番号は非公開)として表示され、CHILEAF製です。

nRF Connectでスキャンすると、デバイスのMACアドレスといくつかの重要なデータが公開されました:

心拍数:
UUID: 0x180D
心拍数測定
UUID: 0x2A37

これはかなり標準的なもので、Home Assistant Communityの投稿ですでに解明されていました(同じモデルではありませんが、心拍数モニターは標準プロトコルを使用しているようです)。私は概念実証として、ESPHomeの設定ファイルをこちらに作成しました:

Home Assistantで心拍数センサーを表示しているスクリーンショット
コンテンツの翻訳者: chatgpt-4o-latest

©2022-2024 セバスティアン・バレネチェア. すべての権利を保有.

構築: Astro v4.16.13.