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 或硬件在环仿真器。
标签:云资产清单, 固件分析, 客户端加密, 嵌入式系统, 物联网, 自行车智能硬件, 逆向工程