开启关键之门
三年前发布对2021款本田思域车载主机研究和逆向工程初步成果,现更新项目进展。在梳理更新流程方面取得重大进展,本田支持通过USB对车载主机更新,USB驱动器含签名的AOSP更新文件,经Android恢复模式暂存和应用。好在其`res/keys`中保留公开的AOSP测试密钥,即便修改`recovery`二进制文件,`verify_file`签名逻辑与原生AOSP一致。所以,正确格式化USB驱动器并以公开AOSP测试密钥签名,无需传统root权限就能将内容安装到车载主机。只要车载主机通电,攻击者物理访问前端USB端口,就能通过更新路径执行任意代码,这是“邪恶女仆攻击”,因需物理访问汽车内部,称其为“邪恶代客泊车攻击”,也叫“EvilValet”。此博客非技术详细分析,想了解可查看技术文档。还发布新工具ota - builder,虽处早期阶段,但构建安装带有`setuid`的`su`二进制文件的更新文件较容易。有理由相信所有更新用公开AOSP测试密钥签名,虽无法获取所有官方更新文件和访问所有车载主机变体及其文件系统,不过确认公开可用的欧盟软件更新文件`MRC_EU_SW_v12_4.zip`用测试密钥签名,欢迎贡献者支持或反驳该假设。
工具构建
除更新流程,最有用的是apk - rebuilder,它能从互联网获取本田思域更新文件,生成清晰输出文件树,自动完成逆向工程师手动工作,包括解析资源、重构.smali代码、重新打包APK文件、提取ramdisk等。因不能发布本田实际源代码,发布一个接收更新文件输出本田.smali代码、图像资产等的函数,生成输出遵循清晰目录结构,可在文档中引用,无需上传敏感文件本身。
待完成工作——招募贡献者
有一些未完成的工作值得去做。
已知版本
更新流程脆弱,依赖版本号,虽不限制运行未签名代码能力,版本号可“伪造”,但构建更新文件需知车载主机期望的版本号,且车载主机软件与构建不匹配的更改可能导致意外行为和恢复循环。若驾驶第十代本田思域且懂技术,鼓励为仓库中“已知版本,显示音频软件”部分做贡献。若特别勇敢,可阅读`ota - builder`代码尝试刷新更新,但要自行承担风险,不同车载主机可能陷入恢复循环致设备软砖。
工具链
本地机器上有试验阶段、仍在开发的工具链,它获取候选的.c代码,用与原始供应商二进制文件相同编译器版本和构建标志为ARMv7编译,在理解更新流程工作中不可或缺,大量使用Docker。当前版本杂乱,特定于工作流程,希望发布更清晰实现。
自定义主题
开发apk - renderer时对此有探索,自定义主题难实现,因存在于三菱版的AOSP框架中,车载主机应用压缩且期望使用硬编码资源ID,发布自定义主题需精细编辑供应商框架并编写自动完成工具,虽不简单、可能不值得努力,但欢迎贡献者参与。
改进aidl - rebuilder
开发了解析.smali文件并生成/映射车载主机上所有AIDL接口的工具,该工具可工作,但未完全审核准确性,为开发自定义应用(如虚拟速度计)打开大门,欢迎贡献者参与。
关于文档和大语言模型的思考
更注重工具开发而非参考文档,想法是提供可靠、确定性工具将车载主机代码转换为易理解形式,人们可用大语言模型查询以回答具体问题,这样可避免维护与实际车载主机代码不一致的参考文档,因车载主机代码才是事实依据。如解释通过ADB连接到车载主机的用户指南有用,但大语言模型可直接访问Java代码时,解释某些Java代码工作的文档成维护负担。
总结与致谢
目前对车载主机大部分调查工作已完成,这是可无休止投入精力的项目,但可能转向其他项目,不过仓库不会被放弃,随时欢迎提交拉取请求。特别感谢Tunas带来美好回忆,以及Hackaday对最初工作的报道。