rmeadomavic/ax12-research
GitHub: rmeadomavic/ax12-research
对 RadioMaster AX12 遥控器进行硬件逆向工程,完全解密了 MT8788 与 AT32F435 之间的 UMBUS 专有通信协议,并提供了协议解析、帧验证、流量模拟等工具集。
Stars: 7 | Forks: 1
# RadioMaster AX12 — 逆向工程参考
对 RadioMaster AX12 RC 遥控器的独立硬件研究。厂商没有提供这些内部结构的文档。所有信息均来自原装设备 —— 对运行中的应用进行被动 `strace` 捕获、符号级二进制分析,以及设备上探测。未修改任何固件。



## 架构
AX12 搭配运行 Android 9 的 MediaTek MT8788 SoC 和负责所有物理 I/O 的 AT32F435 协处理器。两者通过 UMBUS 通信 —— 一种专有的 921600 波特率串行协议。
```
┌──────────────┐ UART @ 921600 ┌───────────┐ CRSF ┌──────────┐
│ MT8788 SoC │◄───── UMBUS ────►│ AT32 MCU │◄──────►│ ELRS TX │
│ Android 9 │ │ AT32F435 │ │ (LR1121) │
│ Flyshark │ │ │ └──────────┘
│ Qt6 + Lua │ │ Gimbals │
└──────────────┘ │ Switches │
│ Pots/Trims│
└───────────┘
```
Android 端运行 Flyshark,这是一个嵌入 Lua 5.3 VM 的 Qt6/QML 应用。MCU 处理霍尔效应摇杆、开关、电位器、微调,并通过 CRSF 驱动 ELRS LR1121 射频模块。
## 关键发现
**UMBUS 协议完全解密。** 八种帧类型,已映射字段和时序。MCU 以 25 Hz 发送通道数据,以 4 Hz 发送心跳,以 5 Hz 发送 ELRS 遥测。校验和为 CRC-8/MAXIM,每种类型有初始值 —— 这一发现使我们达到了 100% 验证。[协议规范 →](docs/protocol/umbus-protocol.md)
**33 个输出通道**,每个通道支持反向、曲线、双速率和混控。每个物理控制都映射到其 UMBUS 字节偏移量。[硬件映射 →](docs/hardware/hardware-map.md)
**MCU 独立运行。** AT32 以文档化的速率广播所有帧类型,无论应用是否运行。无需握手。
**出厂即 Root。** 附带 SUID `su`、`userdebug` 构建、SELinux permissive 模式。无需漏洞。[Root 指南 →](docs/guides/root-guide.md)
**未文档化的硬件。** GPS 接收器(MT6631,已确认)、FM 调谐器、HDMI 视频输入(通过 RN6752M)、IMU(ICM-42607,当前固件中驱动损坏)、sysfs 中的 USB OTG 支持、带无 SIM 卡槽的休眠 LTE 基带。这些都未在原生 UI 中暴露。[硬件映射 →](docs/hardware/hardware-map.md)
**分析了 25MB 原生库。** 13,000+ 个动态符号。三种通信传输(UART、TCP、USB-HID)、带 LVGL 绑定的 Lua 5.3 VM、带离线地图的地面控制站。通过 strings/readelf 分析 —— 未反编译。[分析 →](docs/software/native-lib-analysis.md)
## 快速开始
```
# 解析 UMBUS 帧从 strace 捕获
python3 tools/strace-parser.py captures/idle-strace.txt
# 验证 CRC 校验和
python3 tools/umbus.py captures/idle-frames.bin
# 生成合成流量用于离线测试
python3 tools/simulator.py generate --seconds 5
```
在已 Root 的 AX12 上,参阅[捕获会话指南](docs/guides/capture-session-guide.md)记录您自己的数据。
## 文档
### 协议
- [UMBUS 协议](docs/protocol/umbus-protocol.md) — 帧格式、时序、字段映射
- [校验和调查](docs/protocol/checksum-investigation.md) — CRC-8/MAXIM,每种类型的初始值
- [ELRS 遥测](docs/protocol/elrs-telemetry-analysis.md) — 通过 UMBUS 的射频链路质量
- [CRSF 参考](docs/protocol/crsf-reference.md) — Crossfire 串行协议
### 硬件
- [硬件映射](docs/hardware/hardware-map.md) — 架构、控制、传感器、外设
- [AT32F435 MCU](docs/hardware/at32-mcu.md) — 协处理器角色、固件、SWD 访问
- [设备树](docs/hardware/device-tree.md) — 来自反编译 DTS 的 SoC 外设
- [系统审计](docs/hardware/system-audit.md) — 分区、内核模块、设备节点
- [ELRS Backpack](docs/hardware/elrs-backpack.md) — ESP backpack、WiFi MAVLink、OTA
- [MT8788 研究](docs/hardware/mt8788-research.md) — 平台内部结构
- [外设探索](docs/peripheral-exploration.md) — IMU、SPI1、蓝牙、LED、调制解调器及其他 12 个子系统
### 软件
- [原生库](docs/software/native-lib-analysis.md) — 25MB `.so` 逆向工程
- [Lua API](docs/software/lua-api.md) — Lua 5.3 VM、LVGL、EdgeTX API
- [Flyshark 应用](docs/software/flyshark-app.md) — Qt6/QML 架构、模型格式
### 指南
- [入门指南](docs/guides/getting-started.md) — 设置和首次捕获
- [开发者快速开始](docs/DEVELOPER_QUICKSTART.md) — SSH、工具、Lua 开发
- [Root 指南](docs/guides/root-guide.md) — Termux、Tailscale、Root 访问
- [捕获会话](docs/guides/capture-session-guide.md) — 记录 strace 数据
- [工具参考](docs/guides/tool-usage.md) — 所有工具及使用示例
## 工具
40+ 个 Python 工具,仅使用标准库。无外部依赖。
| 工具 | 用途 |
|------|---------|
| `umbus.py` | 协议库 —— 解析、编码、验证 |
| `strace-parser.py` | 从 strace 输出中提取 UMBUS 帧 |
| `monitor.py` | 实时 TUI 通道查看器 |
| `calibrator.py` | 控制面校准 |
| `live_dashboard.py` | 基于 Web 的实时仪表板 |
| `simulator.py` | 合成流量生成器 |
| `system_test.py` | 自动化诊断套件 |
| `fm_radio.py` | FM 收音机控制 |
| `gps_tool.py` | GPS 位置读取器 |
完整列表:[`tools/README.md`](tools/README.md)
### 战术工具
作战工具(ATAK/CoT 桥接、MAVLink 集成、空域感知、Lua 战术小组件)位于单独仓库:[`ax12-tac-tools`](https://github.com/rmeadomavic/ax12-tac-tools)
## 规格
| | |
|---|---|
| **SoC** | MediaTek MT8788 — 4×A73 + 4×A53 @ 2.0 GHz,12nm |
| **MCU** | AT32F435 — Cortex-M4F @ 288 MHz |
| **射频** | ELRS (LR1121),250 mW,2.4 GHz / sub-GHz |
| **显示屏** | 5.5" 1280×720 IPS,1000 尼特 |
| **电池** | 双 21700,10 Ah,USB PD 20W |
| **摇杆** | 霍尔效应,4 轴,可拆卸 |
| **视频输入** | Mini HDMI → RN6752M → CSI-2,最高 1080p60 |
| **内核** | Linux 4.4.146,Android 9 |
| **存储** | 64 GB eMMC |
| **重量** | 649 g |
## 状态
空闲状态协议已完善 —— 完全解密、CRC 验证且工具化。硬件已枚举。原生库已在符号级别映射。
待完成目标:非空闲状态捕获(对频、飞行、教练)、应用至 MCU 命令语义、ELRS 遥测字段映射、USB OTG 物理测试。参阅 [ROADMAP.md](ROADMAP.md)。
## 贡献
参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。目前最高价值的贡献:非空闲状态捕获、ELRS 遥测字段识别,以及物理 USB OTG 测试。
## 许可证
[MIT](LICENSE) — Kyle Adomavicius
标签:Android逆向, AT32F435, CRC-8, CRC校验, CRSF协议, DNS 反向解析, ELRS, FPV, IoT安全, Lua, MT8788, Qt6, RC发射器, strace, UART, UMBUS协议, 串行通信, 二进制分析, 云安全运维, 协议逆向, 固件分析, 嵌入式系统, 微控制器, 无人机, 无线安全, 无线电遥控, 硬件逆向工程, 符号分析, 被动监听, 设备树