andrzejogh/convers-bt-audio

GitHub: andrzejogh/convers-bt-audio

通过原生固件补丁让 Ford Convers+ 仪表盘在蓝牙音频播放时显示音轨标题和艺术家信息的逆向工程项目。

Stars: 1 | Forks: 0

# convers-bt-audio **原生固件补丁,使 Ford Convers+ 仪表盘能够显示 Bluetooth 音轨标题和艺术家——就像它现有的 USB 功能一样。** Convers+ 仪表盘(MCU: NXP **MAC7116**)会显示 USB 和 CD 来源的音轨元数据,但 Bluetooth Audio 屏幕却一直空白,因为固件从未处理过 BT 元数据的 CAN 消息。本项目在**原生固件中**补齐了这一缺失的部分——无需外部 CAN 桥接设备,无需额外硬件,也无需配套应用程序。 - ✅ Bluetooth 音轨的**标题**和**艺术家**现在可以显示在 *BT Audio* 屏幕上 - ✅ 复用了仪表盘自身且已正常工作的媒体文本处理流水线(USB 路径) - ✅ 每个字段最多支持 **18 个字符** - ✅ 仅以**补丁脚本**形式发布——你需要为自己的*固件 dump* 打补丁;本项目不会重新分发 Ford 的二进制文件 ![Convers+ BT Audio 屏幕显示实时的 Bluetooth 音轨标题和艺术家](https://static.pigsec.cn/wp-content/uploads/repos/cas/71/717c24731caa49539fa40791e5e009a156d9507087355bae0a40b88a99f40bea.jpg) *在 Ford Mondeo MK4 FL 上修补过的仪表盘——BT Audio 屏幕现在可以显示通过 Bluetooth 流式传输的实时音轨标题(“Stars Will Align”)和艺术家(“Kygo, Imagine Dragons”)。* ## ⚠️ 免责声明——在进行任何操作前请阅读 **这会修改与车辆安全性相关的组件固件。你需完全自担风险。** - **确实存在变砖的风险。** 刷写失败可能导致仪表盘无法启动。恢复可能需要 JTAG/BDM 硬件,且不保证一定能成功。 - **这很可能会使你的保修失效**,并且可能违反车辆软件的使用条款。 - **在刷写任何内容之前,请务必保留原始固件**和 EEPROM 的**经过验证的完整备份**。并将其存放在安全的地方。 - 你的固件 dump **包含你的 VIN 及其他车辆数据**——切勿将其公开上传。 - 本项目**不隶属于 Ford、也未受其认可或支持**。此处使用“Ford”和“Convers+”仅为标识目标硬件。 - 对于任何损坏、损失或伤害,作者**不承担任何责任**。如果你不习惯阅读反汇编代码或恢复变砖的 ECU,**请不要继续操作。** 如果以上任何一点让你感到畏惧,那就对了。请在此处止步。 ## 兼容性 | 项目 | 详情 | |------|-------| | **已确认的车型** | **Ford Mondeo MK4 facelift (FL), 2011+** | | 仪表盘 | Ford Convers+ IPC | | MCU | NXP MAC7116 (ARM7TDMI-S, Thumb, **big-endian**, ARMv4T) | | 固件基址 | `0x5000` | | **已确认的固件** | **1412-FL**, VBF 分区 `CS7T-14C026-CD` | | 其他车型 / 版本 | **未经测试。** 其他使用相同 Convers+ 仪表盘的 Ford 车型可能适用。补丁脚本会验证在每个 hook 点预期的确切字节,如果不匹配则会**中止**,因此它们会拒绝修补不兼容的镜像,而不是导致其损坏。 | 如果你使用的是其他版本的固件且脚本中止,请带上你的版本字符串提交一个 issue——通常这些偏移量是可以被移植的。 ## 工作原理(简述) Bluetooth 通过 CAN ID `4B1`(源字节 `0x12`)发送音轨元数据,采用 `[field][source][01][01][text]` 格式的 ISO-TP 文本帧。原厂固件将 `4B1` 视为无用的 2 字节“信号”并将其文本丢弃。 该补丁安装了一个小型 code cave,hook 进了 CAN 接收路径(在消息按类型分发**之前**),它会执行以下操作: 1. 读取原始的 FlexCAN 邮箱并过滤出 CAN ID `4B1`, 2. 重组 ISO-TP payload(First / Consecutive / Single 帧), 3. 将完成的文本输入到**与 USB 路径相同的媒体调度器**中,该调度器会将其写入屏幕已读取的 Bluetooth 元数据存储区。 针对 BT Audio 屏幕渲染器的另一个小补丁重新定位了一个字符串缓冲区,使得标题和艺术家各自都可以长达 18 个字符,且不会互相覆盖。 完整的技术说明:**[docs/HOW_IT_WORKS.md](docs/HOW_IT_WORKS.md)**。 ## 环境要求 - **Python 3.8+** - 一种**读取和写入**你仪表盘固件的方法(例如通过 bootloader / VBF 刷写工具)。本项目**不会**替你刷写——它只生成修补后的镜像。 - 可选,用于验证/实验:[Capstone](https://www.capstone-engine.org/) (`pip install capstone`) 和 [Unicorn](https://www.unicorn-engine.org/) (`pip install unicorn`),如果你想进行反汇编或模拟。 有关 dump 和刷写 Convers+ 仪表盘的社区资源可以在 [microhacker 论坛](https://microhacker.denkdose.de/)找到。 ## 用法 **0. 务必先备份。** Dump 出你的固件*和* EEPROM,并保留经过验证的副本。 **1. 提取代码分区**,从你的固件镜像(基于 `0x5000` 的程序镜像)中提取。如果你的 dump 已经是那个镜像,直接将其用作 `main.bin` 即可。 **2. 应用 CAN 补丁(BT 元数据 → 媒体存储区):** ``` python tools/apply_patch_v3.py main.bin main_patched.bin ``` 脚本会打印出它找到的 hook,并在写入前断言其是否匹配。如果因不匹配而中止,说明你的固件版本不同——请停止操作并提交一个 issue。 **3. 应用渲染器补丁(18 字符字段):** ``` python tools/apply_render_18.py main_patched.bin main_patched.bin ``` **4. 重新打包为可刷写的 VBF**,使用你的原始 VBF 作为模板(保留正确的零件号、地址和 CRC): ``` python tools/vbf_tool.py pack original.vbf main_patched.bin main_patched.vbf ``` **5. 刷写 `main_patched.vbf`**(使用你惯用的工具),然后播放一首 Bluetooth 音乐并打开 *BT Audio* 屏幕。 ## 限制 - 每个字段**最多 18 个字符**。这是原厂渲染器栈上缓冲区的硬性限制;要显示更多字符需要对绘图代码进行更深度的修改。 - **仅处理 `4B1`**(不包含 `4B0`)。这两者携带相同的文本,但在帧级别上存在交错;同时处理两者会导致共享的重组缓冲区损坏。仅处理 `4B1` 提供的信息是完整的。 - **Album** 也会被重组,但许多仪表盘在 BT 屏幕上并不显示 Album 字段。 - 仅在一种固件变体上进行了测试(参见兼容性部分)。 ## 仓库结构 ``` tools/ apply_patch_v3.py CAN 4B1 → media store code cave (hook @0x236f6, cave @0x83240) apply_render_18.py BT Audio renderer patch (18-char title/artist) vbf_tool.py VBF pack/unpack (CRC16-CCITT + CRC32) docs/ HOW_IT_WORKS.md full reverse-engineering write-up FLASHING.md dump → patch → pack → flash walkthrough ``` ## 贡献 欢迎提交 issue 和 PR——尤其是针对其他固件版本的移植(请附上你的版本字符串以及脚本报告的字节信息)。请**切勿**将固件 dump 或 VBF 文件附加到 issue 中;它们包含 Ford 的代码和你的 VIN。 ## 许可证 [MIT](LICENSE) © 2026 andrzejogh 不隶属于 Ford Motor Company。商标归其各自所有者所有。
标签:CAN总线, NXP MAC7116, 云资产清单, 固件补丁, 嵌入式开发, 汽车电子, 蓝牙音频, 逆向工具, 逆向工程