现代和起亚汽车中的非导航 D-Audio 2V 主机运行相当准系统的 Linux 版本。通过我的研究和逆向工程,我已经能够弄清楚固件更新过程,直到可以为这些系统开发定制固件。

为了让您创建自己的固件修改,您需要验证几件事。

  1. 您车辆的主机正在运行 D-Audio。特别是显示音频 Gen2V。为了验证您的主机运行的版本是否正确,请比较现代网站上的图像。
  2. 您的车辆主机单元的固件更新应该可用。现代汽车的更新可以在这里找到,起亚汽车的更新可以在这里找到。D-Audio 2 系统的更新可以在“显示音频软件更新”下找到。起亚汽车创建自定义固件指南
  3. 访问 Linux 计算机。

然后,您需要为您的车辆下载固件更新,该更新可在上述更新站点下找到。更新文件应该是一个 zip 文件,其中包含另一个名为“enc_system_package_{version}.zip”的 zip 文件。将此内部 zip 文件解压缩到 Linux 计算机上。

我创建了一组脚本来帮助自动提取和修改这些更新。

下载这些脚本并将它们解压缩到一个空文件夹中,然后将您的固件文件复制到同一文件夹中。

该文件夹应如下所示:固件脚本

修改设置(可选)

现在,如果您想更改脚本使用的文件夹,可以选择编辑 settings.sh 文件。目录将自动创建,因此无需自己创建。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 文件中指定的文件夹和文件。

运行此文件后,您的设置应如下所示:运行 setupEnvironment.sh 后的文件

现在必须填写 KEY_DIR 目录中的键。输入这些值时,请确保文件中只有一行,并且文件中不包含多余的空格。

  • zipPassword.txt 应包含:“ ahqltmTkrhk2018@@ ”(不带引号)
    • 这个密码是通过访问现代摩比斯的开源网站找到的,从任何有它的车辆上下载“D-Audio2V R1”文件起亚汽车创建自定义固件指南 然后解压“daudio_2.0value.yocto.poky.zip”压缩包并从“scripts/ linuxenvsetup.sh”文件,其中“zip”命令与“-P”(密码)参数一起使用起亚汽车创建自定义固件指南
  • aes_key.txt 应包含:“2b7e151628aed2a6abf7158809cf4f3c”
  • aes_iv.txt 应包含:“000102030405060708090a0b0c0d0e0f”
    • 这些值来自与 zip 相同的“linuxenvsetup.sh”文件,它们可以在 generate_aes128_encryption 函数中找到。
    • 这些值实际上是NIST 文档 SP800-38A中列出的第一个 AES 128 位 CBC 示例密钥/iv 。起亚汽车创建自定义固件指南
  • rsa_private.pri 可以在这里下载
    • 我通过从我的主机恢复映像中对 updateAgent 应用程序进行反编译和逆向工程,然后在 Google 上搜索公钥来得到这个。
    • 现代摩比斯使用的公钥/私钥是一个非常常见的测试密钥:/,可以在很多地方找到

提取更新

一旦在更新文件中填写了所有密钥和密码,就可以通过运行 ./extract_update.sh {Path to your update file} 来提取更新文件。运行 extract_update.sh

该脚本将:

  1. 如果 UPDATE_EXTRACT_TEMP_DIR 尚未清理,请清理它。
  2. 使用 zip 密码文件提取更新文件。
  3. 将 system.img 文件挂载到 SYSTEM_IMAGE_MOUNT_DIR(这需要 sudo/输入您的密码)

修改固件

现在系统映像已挂载(默认为 system_image 目录),可以根据您的需要进行修改。

你可以看到我在第 2 部分中添加到我的系统的后门

亚行后门

另一个可以添加的简单后门是通过将 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 命令行实用程序连接到该服务器。运行 createADBDBackdoor 脚本

有关安装后如何使用 ADB 后门的信息,请查看有关 ADB 的附加信息部分。

编译固件

修改系统映像后,可以使用 ./compile_update.sh 脚本对其进行编译运行 compile_update 脚本

由于涉及散列,此脚本可能需要一点时间才能运行。该脚本执行以下步骤:

  1. 运行同步以验证更改是否保存到已安装的系统映像。
  2. 卸载系统映像。
  3. 计算更新的新更新文件列表,并为修改后的 system.img 文件生成新哈希。
  4. 使用 RSA 私钥对更新文件列表进行签名。
  5. 生成更新 zip 文件。

创建的文件将命名为“enc_system_package_PUT_VERSION_HERE.zip”,因为我懒得让它实际命名正确。

您所要做的就是将创建的 zip 文件重命名为与原始固件更新 zip 具有相同的名称,并将其放在 FAT 格式的闪存驱动器的根目录中。

然后可以将闪存驱动器插入您的汽车并按照正常的安装步骤进行操作。

注意:更新过程可能需要一段时间。

然后宾果游戏!您修改后的固件已安装在您的汽车中。

关于亚行的其他信息

一旦 ADBD TCP 服务器服务在您的主机上运行,​​您就可以连接到它。

为了连接到它,您的主机网络上必须有一台计算机。有两种方法可以做到这一点:

  • 如果您的主机有 Wi-Fi 热点,请连接到 W-Fi
  • 如果您的主机具有无线 Android Auto/Apple CarPlay,您可以按照以下步骤转储 Wi-Fi 密码:
    • 将闪存驱动器插入主机的 USB 端口。
    • 进入主机上的设置屏幕所有菜单屏幕第 2 页
    • 设置屏幕第 2 页
    • 然后进入 Wi-Fi 设置并按“生成新的 Wi-Fi 密钥”按钮Wi-Fi 设置页面
    • 通过按住物理“无线电”按钮 30 秒或从工程模式下的 USB 设置中转储日志。在这两种情况下,都会出现一个弹出窗口,允许您将日志复制到 USB 驱动器。
    • 从 USB 驱动器中提取日志并提取它们。
    • 打开 Logcat 文件并搜索术语“passphrase”,日志条目将如下所示:日志条目
    • 使用密码连接到 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