现代和起亚汽车中的非导航 D-Audio 2V 主机运行相当准系统的 Linux 版本。通过我的研究和逆向工程,我已经能够弄清楚固件更新过程,直到可以为这些系统开发定制固件。
为了让您创建自己的固件修改,您需要验证几件事。
![起亚汽车创建自定义固件指南插图 起亚汽车创建自定义固件指南插图](https://static.esw.eswlnk.com/2022/07/2022071908084276.png-esw)
- 您车辆的主机正在运行 D-Audio。特别是显示音频 Gen2V。为了验证您的主机运行的版本是否正确,请比较现代网站上的图像。
- 您的车辆主机单元的固件更新应该可用。现代汽车的更新可以在这里找到,起亚汽车的更新可以在这里找到。D-Audio 2 系统的更新可以在“显示音频软件更新”下找到。
- 访问 Linux 计算机。
然后,您需要为您的车辆下载固件更新,该更新可在上述更新站点下找到。更新文件应该是一个 zip 文件,其中包含另一个名为“enc_system_package_{version}.zip”的 zip 文件。将此内部 zip 文件解压缩到 Linux 计算机上。
我创建了一组脚本来帮助自动提取和修改这些更新。
下载这些脚本并将它们解压缩到一个空文件夹中,然后将您的固件文件复制到同一文件夹中。
修改设置(可选)
现在,如果您想更改脚本使用的文件夹,可以选择编辑 settings.sh 文件。目录将自动创建,因此无需自己创建。
可用设置如下:
- ZIP_PASSWORD_FILE
- 包含固件更新的 ZIP 密码的文本文件的位置。
- ENCRYPTION_KEY_FILE
- 包含用于解密加密文件的 AES 密钥的文本文件的位置。
- ENCRYPTION_IV_FILE
- 包含用于解密加密文件的 AES IV 的文本文件的位置。
- RSA_PRIVATE_SIGNING_KEY_FILE=keys/rsa_private.pri
- 用于签署固件更新的 RSA 私钥的位置。
- SYSTEM_IMAGE_MOUNT_DIR
- 挂载系统映像的目录。
- UPDATE_EXTRACT_TEMP_DIR
- 在编辑固件文件时保存固件文件的目录。
- KEYS_DIR
- 包含 Zip 密码和加密/签名文件的目录。
设置文件中的所有文件位置都应与 settings.sh 文件相关。
设置环境
现在运行“./setupEnvironment.sh”,这将创建 settings.sh 文件中指定的文件夹和文件。
现在必须填写 KEY_DIR 目录中的键。输入这些值时,请确保文件中只有一行,并且文件中不包含多余的空格。
- zipPassword.txt 应包含:“ ahqltmTkrhk2018@@ ”(不带引号)
- aes_key.txt 应包含:“2b7e151628aed2a6abf7158809cf4f3c”
- aes_iv.txt 应包含:“000102030405060708090a0b0c0d0e0f”
- rsa_private.pri 可以在这里下载
提取更新
一旦在更新文件中填写了所有密钥和密码,就可以通过运行 ./extract_update.sh {Path to your update file} 来提取更新文件。
该脚本将:
- 如果 UPDATE_EXTRACT_TEMP_DIR 尚未清理,请清理它。
- 使用 zip 密码文件提取更新文件。
- 将 system.img 文件挂载到 SYSTEM_IMAGE_MOUNT_DIR(这需要 sudo/输入您的密码)
修改固件
现在系统映像已挂载(默认为 system_image 目录),可以根据您的需要进行修改。
亚行后门
另一个可以添加的简单后门是通过将 adbd(Android 调试桥守护程序)TCP 服务器添加为 systemd 服务来启用它。Android Debug Bridge 是调试 android 设备的常用方法,它允许将文件拉取和推送到设备以及启动交互式 shell。Android Debug Bridge Daemon 的一个版本位于这些非 Android 主机上,可能用于在开发期间进行调试。
要启用 Android 调试桥,您可以下载此zip 文件并将其解压到您的 settings.sh 文件所在的位置。然后你可以简单地运行:“sudo ./createADBDBackdoor.sh”。
注意:该脚本需要 sudo 才能访问已挂载的系统映像内的 systemd 路径。添加的服务将在启动时在主机上的端口 5555 上运行 ADB 服务器,可以在主机网络上使用 Google 的 adb 命令行实用程序连接到该服务器。
有关安装后如何使用 ADB 后门的信息,请查看有关 ADB 的附加信息部分。
编译固件
修改系统映像后,可以使用 ./compile_update.sh 脚本对其进行编译
由于涉及散列,此脚本可能需要一点时间才能运行。该脚本执行以下步骤:
- 运行同步以验证更改是否保存到已安装的系统映像。
- 卸载系统映像。
- 计算更新的新更新文件列表,并为修改后的 system.img 文件生成新哈希。
- 使用 RSA 私钥对更新文件列表进行签名。
- 生成更新 zip 文件。
创建的文件将命名为“enc_system_package_PUT_VERSION_HERE.zip”,因为我懒得让它实际命名正确。
您所要做的就是将创建的 zip 文件重命名为与原始固件更新 zip 具有相同的名称,并将其放在 FAT 格式的闪存驱动器的根目录中。
然后可以将闪存驱动器插入您的汽车并按照正常的安装步骤进行操作。
注意:更新过程可能需要一段时间。
然后宾果游戏!您修改后的固件已安装在您的汽车中。
关于亚行的其他信息
一旦 ADBD TCP 服务器服务在您的主机上运行,您就可以连接到它。
为了连接到它,您的主机网络上必须有一台计算机。有两种方法可以做到这一点:
- 如果您的主机有 Wi-Fi 热点,请连接到 W-Fi
- 如果您的主机具有无线 Android Auto/Apple CarPlay,您可以按照以下步骤转储 Wi-Fi 密码:
- 使用 RTL8152/8153 USB 转以太网适配器连接到主机
- 预装了 RTL8152/8153 以太网适配器的驱动程序。带有 USB 集线器的适配器将无法工作。这个适配器对我有用。
- 您的计算机不会被分配 IPv4 地址,因此您必须使用Wireshark之类的工具来查找主机的链接本地 IPv6 地址。
连接后:下载 adb 命令行工具并通过运行以下命令连接到主机:
adb connect 192.168.0.1
如果您使用的是以太网适配器,则必须将 192.168.0.1 替换为主机的 IPv6 地址。
然后,您可以使用以下命令启动 shell:
adb shell /bin/bash
📮评论