Logo do projeto fl3xbl0w

Dump da ROM - fl3xbl0w

Lançado em 28 de mai. de 2022

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).

Atualização 2024

Alcançamos um marco importante no projeto graças à colaboração da comunidade! Um colaborador, alphab0ing, tem trabalhado na criação de uma ROM personalizada para a placa Vantron RK3399 da Bowflex. Você pode ver mais neste tópico do GitHub.

Já faz mais de um ano que minha console recebeu uma atualização de sistema via OTA. Rapidamente me conectei via ADB para fazer um backup dos arquivos (se eu os encontrasse) e, felizmente, tive sucesso!

Essa atualização foi armazenada no diretório de trabalho típico da Nautilus, /sdcard/Nautilus/redbend/. Os arquivos extraídos são os seguintes:

1_1_script.rdp
1_delta.rdp
1_suffix.rdp
Credentials.txt
crc.rdp
deltas_header.rdp
dma_config.txt
dp
installation_order.txt
section1.rdp
suffix_section.rdp

O arquivo 1_delta.rdp era particularmente grande, então presumi que ali estava a mágica. Depois de inspecionar um pouco o arquivo, cheguei a isto:

1_delta.rdp: Java archive data (JAR): Descompactar como um .zip
	- payload.bin: Extrair com https://github.com/ssut/payload-dumper-go
		- boot.img: Android bootimg, kernel (0x10008000), ramdisk (0x11000000), second stage (0x10f00000), page size: 2048, cmdline (console=ttyFIQ0 androidboot.baseband=N/A androidboot.wificountrycode=US androidboot.veritymode=enforcing androidboot.hardware=r)
		- dtbo.img: data
		- oem.img: Linux rev 1.0 ext2 filesystem data, UUID=b886e36e-ac40-5948-86dd-27c114bd225e, volume name "oem" (extents) (large files) (huge files)
		- system.img: Linux rev 1.0 ext2 filesystem data, UUID=0a7fc206-6c88-5018-bacd-4ea8a11db7ca (extents) (large files) (huge files)
		- trust.img: data
		- uboot.img: data
		- vbmeta.img: data
		- vendor.img: Linux rev 1.0 ext2 filesystem data, UUID=67531afd-7aed-52f3-9196-b1cdad9fd724, volume name "vendor" (extents) (large files) (huge files)

Os arquivos da atualização OTA (HP-22_T56_EEA Android OS Image 3.10 release-keys) foram compartilhados no Internet Archive.

Com esses arquivos, alphab0ing conseguiu obter o DTS (Device Tree Source) original do dispositivo (baixar). Isso é crucial para o desenvolvimento de ROMs personalizadas e para entender melhor o hardware. Vamos ver como isso avança!

Modo de Carga Rockchip

Um processador RK3399 alimenta o hardware do Android. Os processadores Rockchip vêm com um “loader mode” como característica padrão.

O conjunto de ferramentas que utilizei é:

Há uma versão mais nova do driver disponível para download, mas sabe-se que é incompatível com o rkDumper.

Para brincar com isso, você terá que desmontar a Console Bowflex, desparafusar a tampa traseira de plástico e remontá-la em uma “forma desnuda”. Não tente isso, pois brincar com o hardware do Android em Loader Mode pode levar a um dispositivo permanentemente danificado.

Console montada com a tampa traseira removida

Aqui estão as partes relevantes da placa lógica do Android para coisas da Rockchip:

PCB da Vantron

Você pode deixar o aplicativo Android Tool Release aberto o tempo todo como referência para verificar em que modo a console está.

Com a máquina ligada em “modo normal” e conectada a um computador, ela é identificada como NFTM-LAR:

NFTM-LAR:
  Product ID: 0x0001
  Vendor ID: 0x2207 (Fuzhou Rockchip Electronics Co., Ltd.)
  Version: 3.10
  Velocidade: Até 480 Mb/s
  Fabricante: Vanzo
  ID de Localização: 0x14120000 / 9
  Corrente Disponível (mA): 500
  Corrente Requerida (mA): 500
  Corrente Extra de Operação (mA): 0

Com a máquina desligada, conectada via USB a um computador, mantendo pressionado o “Recovery button” e ligando-a, ela deve iniciar em “Loader mode”. A máquina “emitirá um som”, mas a tela permanecerá estática. Você pode desligar, esperar um minuto, ligar e a máquina iniciará normalmente.

O hardware do Android não gerencia o “som” após ligar a máquina, mas sim através das outras PCBs da Nautilus.

Agora será reportado no computador como USB download gadget (Número de Série oculto):

USB download gadget:
  Product ID: 0x330c
  Vendor ID: 0x2207 (Fuzhou Rockchip Electronics Co., Ltd.)
  Versão: 99.99
  Número de Série: XXXXXXXXXXXXXXX
  Fabricante: Rockchip
  ID de Localização: 0x14120000

Depois de executar o rkDumper contra a console, obtemos informações sobre as partições:

"EFI PART" sign found (RKFP FW dump)

Partition "EFI_part" (0x00004000) saved (format: RockChip RKFP dump)
Partition "uboot_a" (0x00002000) saved (format: Rockchip uboot image file)
Partition "uboot_b" (0x00002000) saved (format: Rockchip uboot image file)
Partition "trust_a" (0x00002000) saved (format: unknown)
Partition "trust_b" (0x00002000) saved (format: unknown)
Partition "misc" (0x00002000) saved (format: unknown)
Partition "resource" (0x00008000) saved (format: unknown)
Partition "kernel" (0x00010000) saved (format: unknown)
Partition "dtb" (0x00002000) saved (format: unknown)
Partition "dtbo_a" (0x00002000) saved (format: unknown)
Partition "dtbo_b" (0x00002000) saved (format: unknown)
Partition "vbmeta_a" (0x00000800) saved (format: unknown)
Partition "vbmeta_b" (0x00000800) saved (format: unknown)
Partition "boot_a" (0x00020000) saved (format: unknown)
Partition "boot_b" (0x00020000) saved (format: unknown)
Partition "backup" (0x00038000) saved (format: unknown)
Partition "security" (0x00002000) saved (format: unknown)
Partition "cache" (0x00100000) saved (format: unknown)
Partition "system_a" (0x00500000) saved (format: unknown)
Partition "system_b" (0x00500000) saved (format: unknown)
Partition "metadata" (0x00008000) saved (format: unknown)
Partition "vendor_a" (0x00100000) saved (format: unknown)
Partition "vendor_b" (0x00100000) saved (format: unknown)
Partition "oem_a" (0x00100000) saved (format: unknown)
Partition "oem_b" (0x00100000) saved (format: unknown)
Partition "frp" (0x00000400) saved (format: unknown)
Partition "sw_release" (0x00ed7000) saved (format: unknown)
Partition "video" (0x0047e000) saved (format: unknown)
Partition "userdata" (0x0169bbdf) saved (format: unknown)

uboot_a e uboot_b foram extraídos com sucesso, mas todas as outras partições marcadas como (formato: desconhecido) estão mal respaldadas, extraindo apenas valores hexadecimais CC delas.

Um caso semelhante ao meu foi documentado no 4pda, e depois de perguntar ao desenvolvedor do rkDumper, ele diz que deve haver um novo loader da RockChip em seu lugar. Seguir este método parece inviável por enquanto.

ADB

Alguns dados semelhantes podem ser encontrados através do adb, mas não parece ser possível fazer um backup, pois carecemos de permissões de root:

> ls -al /dev/block/platform/
total 0
drwxr-xr-x 3 root root   60 2022-04-13 19:38 .
drwxr-xr-x 5 root root 1300 2022-04-13 19:38 ..
drwxr-xr-x 3 root root  700 2022-04-13 19:38 fe330000.sdhci
> ls -al /dev/block/platform/fe330000.sdhci/by-name/
total 0
drwxr-xr-x 2 root root 600 2022-04-13 19:38 .
drwxr-xr-x 3 root root 700 2022-04-13 19:38 ..
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 backup -> /dev/block/mmcblk0p15
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 boot_a -> /dev/block/mmcblk0p13
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 boot_b -> /dev/block/mmcblk0p14
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 cache -> /dev/block/mmcblk0p17
lrwxrwxrwx 1 root root  20 2022-04-13 19:38 dtb -> /dev/block/mmcblk0p8
lrwxrwxrwx 1 root root  20 2022-04-13 19:38 dtbo_a -> /dev/block/mmcblk0p9
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 dtbo_b -> /dev/block/mmcblk0p10
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 frp -> /dev/block/mmcblk0p25
lrwxrwxrwx 1 root root  20 2022-04-13 19:38 kernel -> /dev/block/mmcblk0p7
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 metadata -> /dev/block/mmcblk0p20
lrwxrwxrwx 1 root root  20 2022-04-13 19:38 misc -> /dev/block/mmcblk0p5
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 oem_a -> /dev/block/mmcblk0p23
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 oem_b -> /dev/block/mmcblk0p24
lrwxrwxrwx 1 root root  20 2022-04-13 19:38 resource -> /dev/block/mmcblk0p6
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 security -> /dev/block/mmcblk0p16
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 sw_release -> /dev/block/mmcblk0p26
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 system_a -> /dev/block/mmcblk0p18
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 system_b -> /dev/block/mmcblk0p19
lrwxrwxrwx 1 root root  20 2022-04-13 19:38 trust_a -> /dev/block/mmcblk0p3
lrwxrwxrwx 1 root root  20 2022-04-13 19:38 trust_b -> /dev/block/mmcblk0p4
lrwxrwxrwx 1 root root  20 2022-04-13 19:38 uboot_a -> /dev/block/mmcblk0p1
lrwxrwxrwx 1 root root  20 2022-04-13 19:38 uboot_b -> /dev/block/mmcblk0p2
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 userdata -> /dev/block/mmcblk0p28
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 vbmeta_a -> /dev/block/mmcblk0p11
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 vbmeta_b -> /dev/block/mmcblk0p12
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 vendor_a -> /dev/block/mmcblk0p21
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 vendor_b -> /dev/block/mmcblk0p22
lrwxrwxrwx 1 root root  21 2022-04-13 19:38 video -> /dev/block/mmcblk0p27

Outras ideias

Algo que podemos fazer é dessoldar o chip eMMC e lê-lo externamente para poder fazer backup de todo o seu conteúdo. Seria bom para criar uma ROM personalizada (Custom ROM), mas não vou dessoldar o da minha ÚNICA Console (seria legal ter uma de reserva).

Conteúdo traduzido por chatgpt-4o-latest

©2022-2024 Sebastián Barrenechea. Todos os direitos reservados.

Construído com Astro v4.16.13.