wheregoes/byd-dolphin-hacking

GitHub: wheregoes/byd-dolphin-hacking

这是一个针对比亚迪海豚车机系统的逆向工程项目,旨在揭示安全漏洞并提供交互工具用于车辆信息安全分析。

Stars: 3 | Forks: 1

# 🚗 比亚迪海豚车机系统 — 研究与逆向工程 针对**比亚迪海豚 25/26**款信息娱乐系统(DiLink 3,Android 10)的逆向工程、文档记录和工具开发。 此处所有内容均通过ADB探索、APK反编译和CAN总线探测发现 — 未使用任何专有文档。 ## 📋 目录 - [车机规格](#-head-unit-specs) - [入门指南](#-getting-started) - [关键发现](#-key-findings) - [安全发现](#-security-findings) - [系统架构](#-architecture) - [文档资料](#-documentation) - [脚本工具](#-scripts) - [仓库结构](#-repository-structure) - [许可证](#-license) ## 🖥️ 车机规格 | 属性 | 值 | |----------|-------| | 平台 | DiLink 3.0 | | Android | 10 (API 29) | | SoC | Qualcomm QCM6125 (SM6125 Trinket) | | 架构 | ARM64, 8核心 | | 内存 | ~3.5 GB | | 内核 | 4.14.117-perf | | ADB | WiFi, 端口 5555 | | 车机IP | `192.168.10.10` (车辆WiFi) | | 固件 | `13.1.32.2507250.1` (2025年7月25日) | | MCU | `13.5.5.2505300.2` | | Bootloader | **已解锁** (`ro.boot.flash.locked=0`) | | 验证启动 | 橙色 (已解锁) | | 仪表盘 | 独立的 Qt/QML 系统 (Qt 5.15.10 / 6.5.5) | ## 🚀 入门指南 **新手?** 从[侧载指南](docs/sideloading-guide.md)开始,在你的比亚迪车机上安装应用 — 无需root权限。 关于基于此研究的自定义应用,请参见 [byd-apps](https://github.com/wheregoes/byd-apps)。 ### 快速ADB连接 ``` adb connect 192.168.10.10:5555 ``` ### 侧载快速须知 - **USB方法** — 将APK文件放入 `Third Party Apps XX` 文件夹(国家代码后缀),插入车机 - **万能密码** — `BYD6125F`(DiLink 3系列通用) - **APK要求** — ARM64, `targetSdk ≤ 33`, `minSdk ≤ 29` - **国家特定限制** — 哈萨克斯坦 (14应用白名单), 印度 (仅Mappls), 欧洲/日本/澳大利亚 (在线验证) ## 🔬 关键发现 ### ✅ 有效功能(无需Root) | 功能 | 详情 | |---------|---------| | **空调温度读取** | `getTemprature(zone)` — 区域1/2 = 设定温度, 区域4 = 室外/环境温度 | | **完全空调控制** | 40多个getter + SET方法 (启停, 温度, 风扇, 风向模式) 通过权限绕过实现 | | **空调远程控制** | `hasFeature("ACRemoteControl") = 1`, 支持10-30分钟定时 | | **权限绕过** | `BydPermissionContext` (ContextWrapper) 在客户端自动授予 `BYDAUTO_*` 权限 | | **CAN总线读写** | 通过ADB使用 `app_process` + 反射实现 | | **75+比亚迪软件包** | 具备CAN总线访问权限, 100多个自定义 `BYDAUTO_*` 权限 | | **引擎模拟器音效** | CAN总线可写 — UI显示3个预设但MCU接受1-255 | | **AVAS预设选择** | CAN总线可写 — UI显示2个但MCU接受0-5+ | | **AVAH测试音调** | 使用工厂诊断信号 (`0x6E970010`) 在AVAS外部扬声器播放 | | **内容提供程序** | 暴露车辆数据 (电池, 胎压, 保养, 行程能耗) | | **侧载** | USB驱动器或ADB — [参见指南](docs/sideloading-guide.md) | | **浏览器blob下载绕过** | `fetch→blob→anchor.click` 静默将文件 (包括APK) 保存到 `/sdcard/Download/` — 无需用户手势 (Chromium 113漏洞) | ### ⚠️ 部分有效功能 | 功能 | 状态 | |---------|--------| | **车门锁状态** | 主车门返回INVALID (0), 儿童锁可读。没有专用的 `setDoorLockStatus()` — 需要使用未知feature ID的通用 `set()` | | **360全景影像** | `BYDAutoPanoramaDevice` 服务器端强制执行, 绕过失败。`AVMCamera`/`NormalCamera` 存在于 `bmmcamera.jar` 中但无法被第三方应用加载 | ### ❌ 无效功能 | 功能 | 原因 | |---------|--------| | **自定义AVAS音频 (Boombox)** | MCU固件阻止I2S到AVAS的路由 | | **AVAS音量控制** | MCU硬编码, 无CAN信号可改变 | | **自定义锁车/开机音效** | MCU固件拒绝命令 | | **喇叭** | 硬件继电器, 无法通过软件控制 | | **开机动画** | 需要root权限替换 (`/system/media/`) | | **车内温度** | 未找到API — 全面探测确认不可用 | ### 🔓 Root权限功能 (Magisk) Root权限是可选的 — 大多数功能无需root即可工作。[Root指南](docs/rooting-guide.md) | 功能 | 详情 | |------------|---------| | 直接SPI访问 | `/dev/spidev_ivi` — 绕过128字节Java API限制 (最高支持247字节SPI记录) | | ALSA混音器控制 | 通过 `tinymix` 潜在实现AVAS音频路由 | | MCU配置重置 | 直接SPI命令重置MCU状态 | | 系统分区写入 | 修改 `/system/media/` (开机动画), 安装系统应用 | | 内核符号 | `/proc/kallsyms` 访问, `dmesg` | | KernelSU | **不可行** — 需要GKI内核5.10+, 设备运行4.14.117 (非GKI) | ## 🔒 安全发现 研究人员的关键安全相关发现: | 发现 | 影响 | |---------|--------| | **Bootloader已解锁** | `ro.boot.flash.locked=0`, 橙色验证启动 — 可通过fastboot实现Magisk root | | **权限绕过** | `BydPermissionContext` 覆盖 `enforceCallingOrSelfPermission()` — 自动授予所有 `BYDAUTO_*` 权限。适用于空调, 车门锁, 车身控制。对全景影像无效 (服务器端IPC检查) | | **upgrade_server — 无权限检查** | Binder服务接受来自UID 2000 (shell) 的调用而不抛出SecurityException。可从 `adb shell` 使用有效签名包触发固件更新 | | **COTA认证破解** | 使用字符移位密钥的HMAC-SHA256。区域分辨率API确认工作正常 (HTTP 200) | | **浏览器blob绕过** | Chromium 113: `fetch()→blob→anchor.click` 绕过比亚迪的**任意网页**下载阻止 — 远程漏洞利用, 无需ADB。已验证52MB APK | | **端口7000 (CarPlay)** | `carplayserv` 以**root**权限运行, 监听 `0.0.0.0` — 网络暴露的攻击面 | | **IDD-IDPS监控** | 入侵检测系统在 `localhost:12406`, 监控 `wlan0`/`rmnet` 接口。三个root-UID客户端 | | **SPI未保护** | 数据包格式 `[featureId_BE:4][dataLen:1][data:dataLen]` — 无CRC, 无HMAC | | **大多数BYDAUTO权限** | `protectionLevel=normal` — 任何应用安装时都可请求 | ## 🏗️ 架构 ### 通信栈 ``` App → BYDAutoManager → Binder → DiCarServer (UID 1000) → auto.default.so → /dev/spidev_ivi → MCU ``` ### 音频 / AVAS路径 ``` SoC → I2S → MCU DSP → A2B bus → Amplifiers / AVAS speaker ``` ### 云控制流程 ``` BYD App → HTTPS → BYD Cloud → MQTT → cloudmanager (native) → CAN bus ``` ### OTA更新路径 | 路径 | 方法 | |------|--------| | **COTA** | 云端OTA — `com.byd.cota` (应用配置/资源更新) | | **FOTA** | 固件OTA — 需要与IMEI衍生证书的双向TLS | | **OTG** | USB更新 — 寻找 `msm8953_64` 路径 (遗留, 尽管使用QCM6125 SoC) | ### 网络拓扑 ``` Car WiFi: 192.168.10.x Head Unit: 192.168.10.10 ADB: port 5555 CarPlay: port 7000 (root, 0.0.0.0) IDD-IDPS: port 12406 (localhost) ``` ## 📚 文档资料 ### 指南 | 文档 | 描述 | |-----|-------------| | 📱 [侧载指南](docs/sideloading-guide.md) | 通过USB或ADB安装应用 — 无需root权限 | | 🔬 [侧载内部原理](docs/sideloading-internals.md) | 浏览器漏洞利用链, blob下载绕过, AftermarketInstallTool逆向工程, 国家特定白名单 | | 🔓 [Root指南](docs/rooting-guide.md) | 通过fastboot的Magisk root — A/B分区安全, 恢复程序 | ### 系统深入分析 | 文档 | 描述 | |-----|-------------| | 🖥️ [系统概述](docs/system-overview.md) | 硬件, 分区, 服务, 网络拓扑, 开放端口 | | 🔌 [比亚迪汽车API](docs/bydauto-api.md) | 100多个 `BYDAUTO_*` 权限, 设备类型, 处理器类, protobuf模式 | | 📊 [内容提供程序](docs/content-providers.md) | CarStatusProvider URI, 模式, 能耗遥测数据格式 | ### 车辆功能 | 文档 | 描述 | |-----|-------------| | ❄️ [空调与气候控制](docs/ac-climate-control.md) | 温度区域, 空调状态getter/setter, 编码特性, 权限绕过代码 | | 🔊 [音效与主题](docs/sound-and-themes.md) | 音频硬件拓扑, 200多个CAN信号ID, AVAS/AVAH分析, MCU探测结果 | | 📷 [摄像系统](docs/camera-system.md) | 双摄像头API架构, 360视图系统, 权限强制分析 | | 🔄 [OTA系统](docs/ota-system.md) | COTA/FOTA/OTG逆向工程, upgrade_server漏洞, COTA认证分析 | ### NFC数字钥匙 | 文档 | 描述 | |-----|-------------| | 🔑 [NFC数字钥匙](docs/nfc-digital-key.md) | 硬件分析, 固件锁, IntelligentEntry应用逆向工程, CAN信号 | | ✉️ [NFC激活邮件](docs/byd-nfc-activation-email.md) | 向比亚迪请求NFC激活的邮件模板 — 已证实<24小时激活 | | | → [英文模板](docs/nfc-activation-email-en.md) · [葡萄牙语](docs/nfc-activation-email-ptbr.md) · [中文](docs/nfc-activation-email-zh.md) | ## 🛠️ 脚本工具 所有脚本通过 `app_process` 在设备上运行。推送并执行: ``` adb push scripts/BydAudioQuery.java /data/local/tmp/ adb shell "cd /data/local/tmp && app_process -Djava.class.path=. / BydAudioQuery read 0x1B10003D" ``` ### CAN总线与音频 | 脚本 | 用途 | |--------|---------| | `BydAudioQuery.java` | CAN总线读写工具 — 直接信号访问 | | `BydAudioRoutingTest.java` | 音频路由测试 (I2S, AVAS路径) | | `BydNavAudioTest.java` | 导航音频通道测试 | | `BydDeviceScan.java` | 多设备信号扫描器 | | `SysMix.java` | 系统音频混合器查询 | ### AVAS与音效 | 脚本 | 用途 | |--------|---------| | `BydAvasPlayer.java` | AVAS旋律播放器 (频率控制) | | `AvasRoute.java` | AVAS音频路由实验 | | `AvasVolume.java` / `AvasVolume2.java` | AVAS音量控制尝试 | | `AvahFreq.java` | AVAH频率扫描测试 | | `AvahBare.java` | 最小化AVAH测试音调触发 | | `AvahCombo.java` | AVAH组合信号测试 | | `AvahCycle.java` | AVAH循环测试模式 | | `AvahIsolate.java` | AVAH信号隔离测试 | | `AvahStop.java` | AVAH信号停止/清理 | ### MCU与系统探测 | 脚本 | 用途 | |--------|---------| | `BydMcuProbe.java` | MCU安全探测 — 功能扫描, 极限值测试 | | `BydBufferProbe.java` | MCU缓冲区溢出/边界测试 | | `BydSpiDirect.java` | 直接SPI通信 (需要root权限) | | `BydDebugProbe.java` | 调试接口/隐藏功能发现 | | `BydLockSoundMonitor.java` | 车门锁声音事件监控 | ### 车辆系统 | 脚本 | 用途 | |--------|---------| | `BydNfcKeyProbe.java` | NFC数字钥匙CAN总线扫描器 | | `BydCotaProbe.java` | COTA云API探测 — 区域分辨率, 认证测试 | | `BydUpgradeProbe.java` | upgrade_server Binder服务探测 | | `car-telemetry.py` | 车辆数据轮询与记录 (Python) | ### Chromium标志分析 | 脚本 | 用途 | |--------|---------| | `flags_extract.py` / `flags_extract_all.py` | 从车机浏览器提取Chromium标志 | | `flags_descriptions.py` | 将标志名称映射到描述 | | `flags_verify.py` / `flags_verify2.py` / `flags_verify3.py` / `flags_verify_final.py` | 验证标志状态和行为 | | `flags_full_list.py` | 完整标志枚举 | | `flags_probe_dom.py` | 基于DOM的标志探测 | ## 📁 仓库结构 ``` docs/ Guides and deep-dive documentation scripts/ On-device tools (CAN bus, MCU probes, AVAS, Chromium) tools/ browser-exploit/ Browser sideloading research index.html Main test page — blob download bypass PoC autodownload.html Auto-download trigger test install.html APK install flow test pwa.html PWA install behavior test cdp_capability_audit.py CDP protocol capability audit cdp_download_test.py CDP download trigger tests cdp_audit_results.json Full CDP audit results serve_https.py Local HTTPS server for testing sideload-test.apk Mock APK for install chain testing data/ apks/ Extracted system APKs (DiCarServer, CarSetting) audio-config/ Audio platform XML configs (I2S, mixer paths) car-status/ CarStatusProvider data dumps native-libs/ Native shared libraries (auto.default.so, libbydauto.so) packages/ Package lists and service dumps permissions/ BYDAUTO permission definitions system-properties/ System property dumps and Android settings chromium_flags_*.json Chromium flag analysis data mcu-probe-*.txt MCU probe scan results apk-analysis/ Vehicle type mappings (VehicleCarType.json, vehicleType.json) ``` 自定义Android应用 (车门音效等) 位于 [byd-apps](https://github.com/wheregoes/byd-apps)。 ## 📄 许可证 MIT
标签:ADB调试, Android逆向, APK反编译, ARM64架构, BYD Dolphin, CAN总线分析, DiLink 3, JS文件枚举, meg, NFC密钥破解, OTA更新研究, Qualcomm芯片分析, 云资产清单, 侧载应用, 信息安全, 域名枚举, 嵌入式系统, 工具开发, 汽车电子, 车载信息娱乐系统, 车载系统, 逆向工具, 逆向工程