把电动滑板车拆开逆向,再用 Rust 重写固件
来源:bensimms.moe — bensimms.moe · 161 分 · by vinhnx
📋 概述
作者把自己那台 Egret GT 电动滑板车从硬件到固件拆了个遍,并用 Rust 重写了显示单元的固件。入口是个意外发现:开机时按住键盘上的下键,滑板车会进入固件升级模式。他先从 CAN 总线做嗅探,用 SN65HVD230 收发器配合 Rust 库的异步接口,一边骑一边记录,渐渐标出油门、驾驶模式与电机转速对应的报文;接着拆机找到标着 APM32E103xCxE(STM32F103 的克隆)的 MCU,用 OpenOCD 通过 SWD 端口把 flash 与 RAM 都 dump 出来。RAM 里大量固定指针让 Ghidra 的引用分析容易了很多,他也因此很快定位到主 CAN 处理函数。
🔑 核心要点
- 入口是「按住下键开机」触发的固件升级模式。
- 先用 CAN 总线嗅探 标出油门、模式与转速报文。
- MCU 是 APM32E103xCxE(STM32F103 克隆),靠 SWD 加 OpenOCD 提取固件。
- 同时 dump RAM 让 Ghidra 的指针引用分析变得容易。
- 显示单元用了厂商外设库且没开 LTO,反编译结果与源码几乎对得上。
💡 金句
我承认这里基本是抄的——把现成实现拿过来,对着两份数据手册改寄存器名。
👍 0
👎 0
← 返回 Hacker News 首页