Knight1/vanmoof-s5-decomp
GitHub: Knight1/vanmoof-s5-decomp
VanMoof S5/A5 智能电动自行车固件的净室逆向工程项目,通过逐组件反编译重建可编译的源码树以实现互操作性和自主修复。
Stars: 0 | Forks: 0
# vanmoof-s5-decomp
对 **VanMoof S5 / A5** 固件(内部代号为
`XS5`)进行净室重建。通过反编译,生成可构建的源码树,
以重新生成二进制等价(或行为等价)的镜像。
这是 [`vanmoof-s3-decomp`](https://github.com/Knight1/vanmoof-s3-decomp) 的兄弟项目。S5 是新一代产品,在架构上有很大的不同:它不再是在串行总线上使用几个小型 MCU,而是运行一个 **Linux 应用处理器**(i.MX8
级别)、一个 **蜂窝调制解调器**(nRF9160)、一个 **BLE SoC**(nRF5x, Zephyr),以及通过 CAN 总线连接的一系列 **Cortex-M sub-ECU**。此仓库逐个目标地对这一协议栈进行拆解。
## 固件来源
参考镜像是 **`v1.5.0-main`** FOTA 包(构建版本 `20240129`,
版本号 `1.5.0`),位于:
```
../VanMooof-Firmware/SA5/
├── v1.5.0-main/
│ └── v1.5.0-main ← gzip → tar → SquashFS rootfs (the i.MX8 Linux system, ~57 MB)
└── v1.5.0-main_device_files/ ← the individual per-ECU images + manifest.txt
```
`manifest.txt` 是此版本中包含的组件的权威列表
(`Filename,Device,Date,Time,Major,Minor,Patch,Type,AllowSkip,DontRollback`)。
## 目标
下文的容器格式和大小已通过镜像头确认;标记为 *(tbc)* 的 MCU
型号是根据向量布局 / SDK 推断出来的,有待在 Ghidra 中确认。
### 应用处理器(Linux)
| 组件 | 镜像 | 格式 | 大小 | 状态 |
| --- | --- | --- | --- | --- |
| `main` (i.MX8 系统) | `v1.5.0-main` → `VM-XS5_FOTA` | gzip → tar → **SquashFS** (zlib) | ~57 MB | 待定 — 解包 rootfs,枚举服务 |
### 无线 SoC(Zephyr + MCUboot,magic `0x96f3b83d`)
| 组件 | 镜像 | MCU | 大小 | 状态 |
| --- | --- | --- | --- | --- |
| `ble` | `ble.*.bin` | Nordic nRF5x *(tbc)*, Zephyr | ~273 KB | 待定 |
| `modem` | `modem.*.bin` | Nordic **nRF9160** (LTE-M/NB-IoT + GNSS), Zephyr | ~302 KB | 待定 |
两者都带有 MCUboot 镜像头(`0x96f3b83d`);其 payload 是一个 Zephyr/nRF
Connect SDK 应用程序。`modem` 还在设备文件目录中包含一个供应商的 modem 固件
(`mfw_nrf9160_1.3.1.zip`)。
### Sub-ECU(ARM Cortex-M,原始向量表)
全部以 Cortex-M 向量表开头(初始 SP 为 `0x2000_8000`,但
`user_ecu` 为 `0x2001_0000`)。型号 *(tbc)* 有待通过 Ghidra 确认。
| 组件 | 镜像 | 角色 | 大小 | 状态 |
| --- | --- | --- | --- | --- |
| [`user_ecu`](user_ecu/) | `user_ecu.*.bin` | 主控制器(S5 的 "muco") — **Cortex-M4F**, **FreeRTOS**;LED 环/传感器/dmic 任务;I²C+CRC-8 ECU 内部总线 | ~106 KB | **活跃中** — 已分析 160 个函数,**已命名 44 个**,已映射 boot+comms+control |
| `imx8_bridge` | `imx8_bridge.*.bin` | i.MX8 与 ECU/CAN 总线之间的网关 | ~24 KB | 待定 |
| `motor_control` | `motor_control.*.bin` | 电机控制器(非标准头 `0x000008aa`) | ~25 KB | 待定 |
| `motor_sensor` | `motor_sensor.*.bin` | 电机位置/扭矩检测 | ~25 KB | 待定 |
| `power_control` | `power_control.*.bin` | 电源管理 | ~29 KB | 待定 |
| `power_pedal` | `power_pedal.*.bin` | 踏板助力检测 | ~28 KB | 待定 |
| `elock` | `elock.*.bin` | 电子车架锁 | ~27 KB | 待定 |
| `eshifter` | `eshifter.*.bin` | 电子变速器(自动变速箱) | ~29 KB | 待定 |
| `frontlight` | `frontlight.*.bin` | 前车灯 | ~28 KB | 待定 |
| `rearlight` | `rearlight.*.bin` | 尾灯 | ~27 KB | 待定 |
### 外设 / 供应商固件
| 组件 | 镜像 | 供应商 | 大小 | 状态 |
| --- | --- | --- | --- | --- |
| `battery_primary_panasonic` | `battery_primary_panasonic.0.0.1.4.256.*.bin` | 松下 BMS — 已加密(存在 `_DECRYPTED.bin` 文件);头部 `"(C) 2021 Energy Company of Panasonic Group"` | ~98 KB | 待定 |
| `charger_liteon_normal` | `charger_liteon_normal.0.0.1.8.0.*.bin` | LiteON 充电器(标准版) | ~23 KB | 待定 |
| `charger_liteon_speed` | `charger_liteon_speed.0.0.1.2.0.*.bin` | LiteON 充电器(速度版) | ~23 KB | 待定 |
## 计划的仓库布局
参照 `vanmoof-s3-decomp`:每个目标一个独立的子目录,随着
工作的开始逐一创建。
```
vanmoof-s5-decomp/
├── README.md
├── .gitignore
├── Makefile ← top-level dispatcher (added with the first buildable target)
├── main/ ← i.MX8 Linux rootfs analysis (SquashFS unpack, service map)
├── ble/ ← nRF5x BLE app (Zephyr/MCUboot)
├── modem/ ← nRF9160 cellular app (Zephyr/MCUboot)
├── user_ecu/ ← main vehicle controller
├── imx8_bridge/ ← i.MX8 ↔ ECU bus gateway
├── motor_control/ ├ motor_sensor/
├── power_control/ ├ power_pedal/
├── elock/ eshifter/ frontlight/ rearlight/
├── battery/ ← Panasonic BMS (encrypted)
├── charger/ ← LiteON chargers
├── tools/ ← cross-target tooling (FOTA unpack, MCUboot/CAN helpers)
└── reference/ ← shared datasheets, CAN/protocol notes, pin maps
```
每个目标子目录遵循 S3 的约定:包含 `src/`、`include/`、
`docs/`(`progress.md`、`hardware.md`、`protocol.md`)、`ghidra/exports/`,以及
linker script + `Makefile`。
## 法律声明
这是一个净室互操作性项目。本仓库**不会**
重新分发 OEM 固件镜像 — 请从 FOTA 包或您拥有的
自行车的闪存转储中提取它们。
根据 EU Software Directive 2009/24/EC Art. 6 和 US DMCA §1201(f),出于互操作性目的的逆向工程是合法的。本仓库中重构的源码属于原创作品,衍生自对 OEM 镜像的分析以及公开可用的文档。
免责声明。如果出错,将重构的固件刷入自行车将导致
**硬件变砖或损坏**。请勿将其刷入您日常依赖的自行车。请使用备用
PCB 或硬件在环仿真器。
标签:云资产清单, 固件分析, 客户端加密, 嵌入式系统, 物联网, 自行车智能硬件, 逆向工程