Проект по реверс-инжинирингу. Начался с беговой дорожки Bowflex Treadmill 22, но в итоге был обобщен для любого Android-устройства, продаваемого компанией Nautilus Inc. (Nautilus, Bowflex, Schwinn).
/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) предоставляет услуги OTA для оборудования Nautilus. Я нашел некоторые ссылки на этот файл внутри 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
похоже на реальный пин-код, так как это шестизначное число.
Есть некоторые учетные данные в “Сети Red Bend” для ассоциации машины с определенным брендом/продуктом для OTA обновлений. Я надеюсь, что эти учетные данные ИДЕНТИЧНЫ для всего оборудования Nautilus. Файл включен в APK com.redbend.client
и извлекается при установке.
Я нашел ссылки на com.redbend.client
здесь, и мне показалось довольно забавным видеть его сбои в машине. Я надеюсь, что он не сбоит так часто в наших устройствах.
Это было довольно просто расшифровать. Имя Bluetooth появляется как CL831-xxxxxxx
(номер скрыт) от CHILEAF.
При сканировании через nRF Connect, MAC-адрес устройства и некоторые ключевые данные были раскрыты:
Сердечный ритм:
UUID: 0x180D
Измерение сердечного ритма
UUID: 0x2A37
Это казалось довольно стандартным, и пост из сообщества Home Assistant уже разобрался в этом (не та же модель, но похоже, что монитор сердечного ритма использует стандартный протокол). Я создал файл конфигурации ESPHome здесь в качестве концепции:
©2022-2024 Себастьян Барренечеа. Все права защищены.
Создано с использованием Astro v4.16.13.