logo
0
0
WeChat Login
Chief<520@zut.edu.cn>
fix: 修正控制协议为[X轴, Y轴]双字节方案

English | 简体中文

🦋 X-FLY 扑翼机逆向控制项目

Python License Status Auth cnb

通过蓝牙通信拦截与逆向分析,实现用电脑/手机远程控制扑翼机



✨ 项目简介

本项目是一个扑翼机(仿生鸟)蓝牙控制逆向工程项目。通过分析手机APP与扑翼机之间的蓝牙通信协议,实现了用电脑/手机远程控制扑翼机的完整方案。

核心功能

  • 🔍 蓝牙通信拦截:抓包分析APP与设备的通信数据
  • 🔧 协议逆向分析:解析蓝牙GATT特征值与控制指令
  • 🌐 Web 控制台:基于 FastAPI + WebSocket 的跨平台 Web 控制界面,手机/电脑均可操控
  • 🎮 多端控制:虚拟摇杆、键盘 WASD、Xbox/PS 手柄三种操控方式
  • 🎨 HUD 界面:玻璃拟态设计,含雷达扫描、姿态仪、油门柱、粒子尾迹等飞行仪表
  • 📊 指令测试工具:系统化的字节测试与组合指令验证

🎯 适用场景

  • 硬件安全研究
  • 蓝牙协议逆向学习
  • 机器人/无人机控制开发
  • 嵌入式系统分析

📂 项目结构

X-FLY/
├── app/                        # 封装好的控制程序(推荐使用)
│   ├── web/                    # 🌐 Web 控制服务(最佳体验)
│   │   ├── server.py           #   FastAPI + WebSocket + BLE 后端
│   │   └── static/             #   玻璃拟态前端
│   │       ├── index.html
│   │       ├── style.css
│   │       └── app.js
│   ├── gui_control.py          # 🎨 Tkinter GUI 控制面板
│   └── wasd.py                 # ⌨️ 命令行 WASD 控制
│
├── scripts/                    # 研究/测试脚本(逆向开发过程)
│   ├── code字节测试.py         # 单bit测试+组合指令测试
│   ├── verify_control.py       # 连接验证脚本
│   ├── code.py ~ code5.py      # 各阶段逆向测试
│
├── tools/                      # 蓝牙抓包工具
│   ├── capture_windows.bat     # Windows抓包脚本
│   ├── android_capture_tool-*.bat  # Android抓包工具
│   └── BT_HCI_*.curf           # 抓包数据文件
│
├── data/                       # 抓包数据保存目录
├── font/                       # 字体资源(MiSans)
├── docs/ / temp/               # 文档 / 临时
├── requirements.txt            # Python 依赖
├── 启动Web控制.bat             # Windows 一键启动
├── README.md                   # 项目说明
├── LICENSE                     # Apache 2.0
└── .cnb.yml                    # CNB配置

🚀 快速开始

环境要求

  • 操作系统:Windows / macOS / Linux
  • Python版本:3.8 或更高
  • 蓝牙适配器:支持BLE(低功耗蓝牙)4.0+

安装依赖

pip install -r requirements.txt

三种控制方式

🌐 方式一:Web 控制(最佳体验,支持手机遥控)

python app/web/server.py

或双击 启动Web控制.bat

启动后终端会显示两个地址:

本机访问: http://localhost:8000
手机访问: http://192.168.x.x:8000   ← 手机浏览器打开即可当遥控器

特性

  • 🎨 玻璃拟态 HUD 界面,含雷达/姿态仪/油门柱/粒子尾迹
  • 📱 响应式设计,手机/电脑都能用
  • 🕹️ 虚拟摇杆 + 键盘 WASD + Xbox/PS 手柄(Gamepad API)
  • ⚡ WebSocket 实时通信,延迟显示
  • 🚨 紧急停止一键触发
  • 🎛️ 系统设置面板:主题配色、背景模式、HUD 组件开关,支持导出/重置

🎨 方式二:桌面 GUI(Tkinter 版)

python app/gui_control.py

⌨️ 方式三:命令行 WASD

python app/wasd.py

控制按键

按键功能
W / ↑前进
A / ←左转
D / →右转
S / ↓停止
Q / E强左/右转(Web版)
空格紧急停止(Web版)
+ / -油门微调(Web版)

🔬 技术细节

蓝牙GATT特征值

特征UUID功能说明
00007771-8e22-4541-9d4c-21edae82ed19设备初始化与模式控制
0000acc1-0000-1000-8000-00805f9b34fb飞行控制指令(方向+油门)
00002a19-0000-1000-8000-00805f9b34fb电池电量读取(Web版使用)

初始化指令

连接后必须发送初始化指令:

f9 04 51 01 56 5a 52 01 53 5a

控制指令格式(2字节)

格式:BB AA(十六进制)

  • 第一字节(BB)- 方向控制

    • 00 - 停止
    • 01 - 左转
    • 08 - 强左转(Web版)
    • 20 - 居中(直飞)
    • 40 - 右转
    • 80 - 强右转
  • 第二字节(AA)- 油门控制

    • 00 - 无油门
    • 02 - 小油门
    • 03 - 中油门
    • FF - 满油门

常用指令示例

# 启动+居中前进
2002  # 居中 + 小油门

# 左转+油门
0102  # 左转 + 小油门

# 右转+油门
4002  # 右转 + 小油门

# 停止
0000  # 完全停止

📝 程序说明

🎯 封装好的控制程序 (app/)

程序名功能特性
app/web/server.py🌐 Web 控制服务FastAPI + WebSocket、虚拟摇杆/键盘/手柄、HUD仪表、主题系统、手机遥控
app/gui_control.py🎨 Tkinter GUI 控制面板HUD动画、电量反馈、键盘/鼠标控制、紧急停止
app/wasd.py⌨️ 命令行 WASD 控制轻量、快速启动

🔬 研究/测试脚本 (scripts/)

脚本名测试内容
code字节测试.py系统化字节测试(单bit扫描+组合)
verify_control.py连接验证
code.py基础控制功能
code2.py单方向测试
code3.py单油门测试
code4.py方向+油门组合
code5.py4位码交互控制

🛠️ 开发工具

蓝牙抓包

Windows系统

cd tools
capture_windows.bat

Android系统: 使用 tools/android_capture_tool-*.bat 配合 Wireshark 分析

抓包数据分析

抓包数据保存在 data/ 目录,使用 Wireshark 打开 .curf.log 文件分析蓝牙通信协议


⚠️ 注意事项

  1. 安全第一:在开阔场地测试,远离人群和障碍物
  2. 电量充足:确保扑翼机电池电量充足
  3. 连接稳定:保持蓝牙适配器与扑翼机距离在3米以内
  4. 初始化:每次连接必须发送初始化指令
  5. 持续发送:控制指令需要持续发送(约30-50ms间隔)以保持状态

🔧 故障排除

无法扫描到设备

  • 检查扑翼机是否已开机
  • 确认蓝牙适配器支持BLE
  • 尝试重启蓝牙适配器

连接失败

  • 确保扑翼机未被其他设备连接
  • 检查蓝牙驱动是否正常
  • 尝试关闭电脑蓝牙后重新开启

控制无响应

  • 检查是否已发送初始化指令
  • 确认指令格式正确(4位十六进制)
  • 尝试增加发送频率

📚 参考资料

🤝 贡献

欢迎提交Issue和Pull Request!


⭐ Star

如果这个项目对你有帮助,请给个Star支持一下!

About

本项目针对消费级扑翼机(仿生鸟)进行蓝牙控制逆向研究,通过拦截并分析手机APP与设备间的BLE通信数据,成功找到了蓝牙GATT特征值与控制指令的映射协议。项目基于Python开发,实现了用电脑端脚本替代官方APP的完整控制方案。其核心亮点在于支持WASD键盘映射,让用户能像操作游戏一样直观控制仿生鸟飞行,并提供了系统化的字节级指令测试工具。

扑翼机仿生鸟蓝牙逆向BLEGATTPython飞控硬件安全协议分析
50.81 MiB
10.11 KiB
0 forks0 stars1 branches0 TagREADMEApache-2.0 license
Language
Python51.6%
JavaScript17.9%
CSS10.7%
HTML6.8%
Others13%