marshallrichards/turbodrone
GitHub: marshallrichards/turbodrone
通过反向工程解析畅销低价无人机,开放其程序化控制与视频流访问能力。
Stars: 434 | Forks: 58
# Turbodrone
反向工程 Amazon 上一些最畅销的约 50 美元“玩具”无人机的 API 和客户端,以替代它们附带的闭源移动应用。

## 简介
如今,Amazon 上有非常便宜的“玩具”无人机,基本上是早期 DJI Mavic 的精简克隆版。约 50 美元即可拥有 1080p 相机用于 FPV 和录制、微型向下光学流传感器用于定位与高度保持,以及开箱即用的良好飞行配置。这类无人机唯一的问题是它们运行闭源固件,且只能通过定制移动应用进行控制。我认为将这些无人机从“监狱”中解放出来并编写一个 API 和客户端来访问视频流并向下发送控制命令会非常酷。通过反向工程移动应用的工作方式,您可以把这个 50 美元的高性能“玩具”无人机变成可以程序化控制并用于各种应用和实验的设备。
## 硬件
* WiFi 摄像头无人机(按推荐顺序排列):
| 品牌 | 型号编号 | 兼容性 | 购买链接 | 备注 |
|------------|-----------------|---------------|-------------------------------------------------------------|-------|
| Generic | M10 | 已测试 | [Aliexpress](https://www.aliexpress.us/item/3256809708895605.html) | 目前最喜欢的。无刷电机。RTSP 视频流非常稳定。 |
| Karuisrc | K417 | 已测试 | [Amazon](https://www.amazon.com/Electric-Adjustable-AIdrones-Quadcopter-Beginners/dp/B0CYPSJ34H/) | 第一个支持无刷电机的型号。做工很棒。 |
| Loiley | S29 | 已测试 | 已找不到链接 | 做工优秀,摄像头有云台(未在 API 中实现)|
| Hiturbo | S20 | 已测试 | [Amazon](https://www.amazon.com/dp/B0BBVZ849G), [Alternate Amazon Listing](https://www.amazon.com/Beginners-Foldable-Quadcopter-Gestures-Batteries/dp/B0D8LK1KJ3) | 原始测试平台,做工优秀|
| FlyVista | V88 | 已测试 | [Amazon](https://www.amazon.com/dp/B0D5CXY6X8) | |
| ? | D16/GT3/V66 | 已测试 | 最便宜的在 [Aliexpress](https://www.aliexpress.us/item/3256808590663347.html),[Amazon](https://www.amazon.com/AUHIFVAX-Intelligent-Avoidance-Christmas-Thanksgiving/dp/B0FJRVH76T) | 20% 更小的 DJI Neo 克隆。仅适合室内飞行。
| Several Brands | E58 | 已测试 | [Amazon](https://www.amazon.com/Foldable-Quadcopter-Beginners-Batteries-Waypoints/dp/B09KV8L7WN/) | |
| Several Brands | E88/E88 Pro | 疑似 | [Amazon](https://www.amazon.com/Beginners-Foldable-Quadcopter-Real-Time-Rechargable/dp/B0FKNH6Q4T) | |
| Several Brands | E99/E99 Pro | 疑似 | [Amazon](https://www.amazon.com/LJN53-Foldable-Drone-Dual-Cameras/dp/B0DRH9C6RF) | |
| Swifsen | A35 | 疑似 | [Amazon](https://a.co/d/bqKvloz) | 非常小的“玩具”无人机|
| Unknown | LSRC-S1S | 疑似 | | 在另一个针对 WiFi UAV 应用 的反向工程工作中提及|
| Velcase | S101 | 待办 | [Amazon](https://www.amazon.com/Foldable-Beginners-Quadcopter-Carrying-Positioning/dp/B0CH341G5F/) | 做工较低,电池和螺旋桨比 S29 & S20 更小|
| Redrie | X29 | 待办 | [Amazon](https://www.amazon.com/Adults-1080P-Foldable-Altitude-Auto-Follow-Batteries/dp/B0CZQKNYL5) | 正在处理中|
_**已测试** 表示该无人机已在物理环境中使用 turbodrone 运行并确认兼容。_
_**疑似** 表示该 APK 使用的包和库与已测试的无人机完全相同。_
_**待办** 表示 APK 使用的数据包和协议不同,需要作为新实现添加到 API 中。_
* WiFi 适配器(推荐使用 [ALFA Network AWUS036ACM](https://www.amazon.com/Network-AWUS036ACM-Long-Range-Wide-Coverage-High-Sensitivity/dp/B08BJS8FXD) 或类似设备)
* 无人机广播自己的 WiFi 网络,因此计算机必须连接到该网络。
* 虽然不是必须的(因为可以使用计算机内置 WiFi 连接无人机网络),但如果希望飞行时保持互联网连接,建议使用该适配器。
## 安装配置
进入 `backend` 目录
```
cd backend
```
添加虚拟环境
```
python -m venv venv
source venv/bin/activate
```
安装依赖
```
pip install -r requirements.txt
```
_如果_您在 Windows 上,需要手动安装 `curses` 库。
```
pip install windows-curses
```
打开一个新的终端窗口并安装前端依赖。
_确保已安装 Node.js 20+。_
```
cd frontend
npm install
```
确保 WiFi 适配器已插入,无人机已开启,连接到 “BRAND-MODEL-XXXXXX” 网络后再继续。
在 `backend` 目录中创建 `.env` 文件。根据您使用的无人机类型添加 DRONE_TYPE:
```
# 对于基于 "com.vison.macrochip" (s2x) 的无人机,如 S20 和 S29:
DRONE_TYPE=s2x
# 对于基于 WiFi 的无人机,如 V88 和 D16:
# DRONE_TYPE=wifi_uav
# 对于 Cooingdv 发布者无人机应用,如 RC UFO 和 KY UFO:
# DRONE_TYPE=cooingdv
```
启动后端服务:
```
uvicorn web_server:app
```
在另一个终端中启动前端 Web 客户端:
```
npm run dev
```
打开 Web 客户端(地址为 `http://localhost:5173`),您应该能看到无人机视频 feed 并能对其进行控制。
如果要通过游戏手柄控制,请插入手柄并移动摇杆以检测,然后按下切换按钮在键盘和控制器控制之间切换。
请确保在安全的区域飞行,最好在户外且风力较小的地方。注意,“降落”按钮 _目前_ 更像是一个紧急停止按钮,会立即停止无人机电机。
## 状态
重连逻辑已解决。
视频 feed:稳定。
控制:已通过 Web 客户端大幅改进。针对 WiFi UAV 无人机的实现仍需微调。
Web 客户端:支持多种输入方式,如键盘、游戏手柄控制器以及 ThinkPad TrackPoint 鼠标(哈哈)。
正在为 [Amazon 最畅销无人机列表](https://www.amazon.com/best-selling-drones/s?k=best+selling+drones) 中的更多无人机添加支持。
## 贡献
要为新的“玩具”无人机添加支持,请下载该无人机使用的 APK(可从镜像站点获取),并使用 [jadx](https://github.com/skylot/jadx) 反编译为 Java 文件开始逆向工程。
随后,查看 `AndroidManifest.xml` 并寻找应用的入口点类。寻找明确提及的端口使用或协议使用(如 TCP 或 UDP)。这些应用通常会在嵌入在 APK 中的原生 C++ 库中完成实际的通信和视频 feed 处理。您可以使用 Ghidra 等工具反编译原生库,以发现有用信息。对于视频 feed 处理,您需要弄清楚其使用的格式(例如 JPEG、YUV 等),以及是否使用压缩,以及在从数据包重组图像帧时字节结构是什么样的。
此外,Wireshark 是您理解应用发送和接收原始数据包的利器。请观看这个 [视频](https://x.com/marshallrichrds/status/1923165437698670818) 了解用于为 Hiturbo S20 无人机添加支持的逆向工程过程概述。
一旦您弄清了遥控和视频处理的协议与流程,可以编写一个小的测试程序,并将其添加到 `experimental` 目录中,以便其他人可以试用。
之后,您可以开发一个与现有后端架构兼容的实现;例如 `s2x` 和 `wifi_uav` 这两个反向工程实现。
## 实验性支持
对于尚未完全集成到 Turbodrone 中、但支持有限的无人机和应用程序,请参见 `experimental` 目录。
标签:1080p, Amazon, API, Embedded Systems, FPV, Hardware Hacking, IoT, JS文件枚举, MITM代理, Mobile App Reversing, RTSP, Toy Drone, turbodrone, USB WiFi, WiFi 摄像头, 云资产清单, 位置保持, 光学流, 刷写固件, 协议分析, 四旋翼, 固件分析, 姿态保持, 客户端, 开源控制, 抓包分析, 无人机, 权限提升, 程序化控制, 网络通信, 蓝牙, 逆向工具, 逆向工程, 遥控