富斯ix6安全研究
富斯 FlySky FS-i6X 发射机 + AFHDS 2A 接收机 来整理。需要注意:FS-i6X 能配多种接收机,例如 FS-iA6B、FS-iA10B、FS-X6B、FS-A8S

一、目前可以确定的核心信息
| 项目 | 初步结论 | 可信度 |
|---|---|---|
| 工作频段 | 2.408–2.475 GHz | |
| 无线协议 | AFHDS 2A | |
| 调制方式 | GFSK | |
| 射频芯片 | AMICCOM A7106 系列 | |
| 发射机主控 | Geehy 极海 APM32F072VBT6 | |
| 跳频方式 | FHSS,单个连接使用16个跳频点 | |
| 数据包周期 | 公开兼容实现约3.85 ms一帧,约260帧/秒 | |
| 加密和认证 | 公开实现中未发现密码学加密、消息认证码或防重放计数器 | |
| 优先研究方向 | SPI抓包、绑定过程、跳频同步、身份字段、重放与伪造、抗干扰能力 |
富斯官方给出的 FS-i6X 参数包括:2.408–2.475 GHz、AFHDS 2A、GFSK、135个射频信道、标称带宽500 kHz和小于20 dBm的发射功率。FCC 测试报告显示,它在一次通信中使用16个不同频点,相邻选中频点至少间隔约1 MHz;实测20 dB占用带宽约1.05 MHz,发射功率大约13~15 dBm。这里的“500 kHz”更接近频率栅格或厂商标称信道参数,不应直接理解为实际信号只占500 kHz。
二、AFHDS 2A 的公开协议结构
虽然富斯没有公开完整的 AFHDS 2A 空口协议,但 Deviation、Multiprotocol 和多个自制接收机项目已经完成了较完整的兼容实现,说明该协议能够通过 SPI 和射频抓包逆向恢复。
公开实现显示:
跳频
-
每个连接使用16个频点;
-
跳频表根据发射机身份参数计算;
-
数据包在16个频点之间循环发送;
-
一次数据帧周期约3.85 ms;
-
绑定阶段会传输与跳频同步有关的信息。
数据包
公开代码中的典型结构为:
-
发射数据包约38字节;
-
接收机遥测包约37字节;
-
数据包中包含4字节发射机ID;
-
正常通信中还包含4字节接收机ID;
-
通道摇杆值以固定格式排列;
-
绑定数据中可出现16个跳频信道参数。
部分兼容接收机实现还提到:
-
4字节同步字;
-
CRC校验;
-
Hamming(7,4)纠错编码;
-
500 kHz频率栅格。
这些机制主要负责同步、纠错和抗随机干扰,不是密码学安全机制。
四、可能存在的无线安全缺陷
以下结论主要根据公开兼容代码推断,最终需要在你手中的发射机和接收机上验证。
1. 空口数据可能没有加密
公开实现中,通道值、发射机ID、接收机ID等字段均以可直接解析的形式构造,未发现 AES、流密码或其他加密过程。
可能影响:
-
被动获取摇杆通道值;
-
判断油门、横滚、俯仰、偏航等控制变化;
-
获取发射机和接收机身份参数;
-
还原绑定及跳频过程。
风险判断:高可信度的信息泄露缺陷。
2. 身份字段可能只是普通ID,不是认证凭据
公开代码主要通过4字节发射机ID和4字节接收机ID识别通信对象,没有看到基于密钥的挑战应答或消息认证码。
这意味着攻击者在掌握:
-
发射机ID;
-
接收机ID;
-
跳频序列;
-
发包周期和频点相位;
之后,理论上可能构造“看起来来自合法发射机”的数据包。
不过,单纯复制一个发射机ID未必立即成功,因为还可能受到接收机ID、模型匹配、跳频初始位置和时序窗口影响。因此应把它列为 身份冒充测试假设,而不是直接认定已经能够接管。
3. 可能缺少防重放机制
公开包结构中没有明显发现:
-
单调递增帧序号;
-
随机数;
-
时间戳;
-
会话级消息认证码;
-
已认证的滚动码。
因此,接收机可能无法区分:
-
当前合法数据包;
-
之前录制的数据包;
-
攻击者重新构造的相同数据包。
需要测试接收机是否依赖严格的跳频时序和连续包状态。即使完整录制后直接重放失败,也不代表不存在重放风险;攻击者可能需要重新对齐频点和时隙。
4. 绑定阶段可能是薄弱环节
绑定阶段需要让接收机学习发射机身份和跳频参数。公开实现中,绑定包包含发射机ID和跳频相关信息,但没有明显看到基于预共享密钥的身份验证。
潜在问题:
-
接收机处于绑定模式时可能接受任意兼容发射机;
-
攻击者可能先于合法发射机完成绑定;
-
可能通过伪造绑定包替换保存的身份参数;
-
断电后是否永久保存,需要针对具体接收机测试。
该风险通常要求接收机已经被人为置入绑定模式,所以攻击面比正常飞行状态小。
5. 跳频不能等同于加密
AFHDS 2A 使用 FHSS,可以降低同频干扰并提高共存能力,但公开实现显示跳频序列可以由身份参数计算,而且绑定过程还会交换跳频相关信息。
因此跳频只能提高普通监听和干扰的门槛,无法替代:
-
加密;
-
身份认证;
-
完整性保护;
-
防重放机制。
6. 干扰和失步攻击
FCC资料显示,一条连接只使用16个跳频点。若攻击者能够获得跳频表和当前相位,理论上可以进行比全频段噪声干扰更高效的跟随式或选择式干扰。
建议重点观察:
-
丢失多少连续帧后进入 failsafe;
-
重新收到合法包后恢复时间;
-
单频干扰、部分频点干扰和宽带干扰的差别;
-
是否能够用伪造数据阻止 failsafe;
-
干扰消失后是否存在错误重同步。
7. 遥测和配置包伪造
AFHDS 2A 是双向协议,接收机可以返回遥测数据。公开实现中,遥测包的身份检查看起来主要依赖普通ID字段,因此应测试:
-
电压、RSSI、传感器数据伪造;
-
虚假低电压或虚假正常状态;
-
遥测包是否影响发射机UI或告警;
-
failsafe、接收机设置等控制包是否具备认证。
五、最值得收集的资料
官方资料
- FS-i6X产品参数和用户手册
包含频率、调制方式、信道数量、功率、接口和绑定流程。官方页面目前列出的固件版本为1.0.52,更新时间为2022年5月18日。 - FCC ID:N4ZFLYSKYI6X
FCC档案中包含射频测试报告、内部照片、外部照片和用户手册,是确认PCB版本和射频参数的重要来源。 - A7105数据手册
重点看寄存器表、频率计算、数据速率、同步字、CRC、FIFO和GIO引脚。 - STM32F072数据手册和RM0091
在确认芯片丝印后,再选择准确容量和封装版本。
协议逆向资料
- Multiprotocol AFHDS2A A7105实现
适合研究跳频算法、绑定包、数据包和遥测包。 - Deviation AFHDS2A实现及讨论
包含早期SPI逆向过程和兼容发射实现。 - TinyHawkFlyskyRx等兼容接收机代码
适合从接收机角度理解同步、纠错、绑定和跳频。
拆机

主控:Geehy 极海 APM32F072VBT6
APM32F072x8xB Datasheet V2.0.pdf
APM32F072x8xB User Manual V1.7.pdf
射频芯片A7106
官方页面:https://www.amiccom.com.tw/asp_cn/product_detail.asp?CATG_ID=2&PRODUCT_ID=105

思路:
1、AFHDS 2A协议缺陷,是否可以知道跳频表
2、主控和射频芯片的SPI暴露,使用逻辑分析仪抓取通信数据
| 主板测试点 | 逻辑分析仪 | 作用 |
|---|---|---|
| SCS | D0/CH0 | 射频芯片片选 |
| SCK | D1/CH1 | SPI时钟 |
| MOSI | D2/CH2 | APM32 → A7106 |
| MISO | D3/CH3 | A7106 → APM32 |
| AGND | GND | 共地 |
3、是否有缺陷可以断链
-
官方固件
-
OpenI6X:有针对 FS-i6X 的 OpenTX/EdgeTX 移植版
重放数据:
RX和TX可以空口获得
16个跳频点可以通过TX算出来(AFHDS2A_calc_channels函数)/空口直接听
公开 AFHDS 2A 实现的绑定阶段不是立刻使用16项跳频表,而是在两个固定信道之间切换:
0x0D = 13
0x8C = 140
第三方接收机首次绑定时:
- 初始化 A7105/A7106;
- 写入 AFHDS 2A 固定同步ID;
- 在
0x0D和0x8C间扫描; - 接收
0xBB/0xBC绑定包; - 从字节1~4保存 TX ID;
- 从字节11~26保存16个跳频点;
- 生成或读取自己的4字节 RX ID;
- 将 RX ID放入绑定响应包的字节5~8;
- 向发射机发送
0xBC响应; - 将 TX ID、RX ID和跳频表保存到 Flash;
- 进入正常跳频接收。