NVIDIA vGPU 18 添加了 NLS 服务实例的强制证书校验, 而且强制升级了 NLS 协议版本到 2.0 (DLS 3.4), 以至于我们无法继续用老办法破解授权

已知情报

vGPU 18.0 向 客户端驱动 和 GSP 固件 (开源 Host 驱动 kernel-open) 添加了 NLS ROOT CA, 所以建议使用闭源 Host 驱动 (kernel)

  • 驱动强制 NLS 服务实例的证书, 驱动会尝试和 GSP RM 通信校验 (没新卡没法验证, 看逆向代码是这样, 建议使用闭源 Host
    驱动)
  • 官方正版 DLS 证书有效期三年, 到期必须更新否则没法用
  • Turing 架构 (20系) 的 GSP 固件包含 1 个 NLS ROOT CA (但是驱动有两个 CA)
  • Ampere 架构 (30系) 的 GSP 固件目前没有找见
其他架构没有 GSP 固件

没看懂老黄在干啥, 犹豫要不要干死 vGPU 破解吗?
您可能是 正版 NVIDIA 硬件 受害者

破解方法

如果你懒得破解可以在 Host 使用 vGPU 18, Guest 依然使用 vGPU 17, 当然也可以使用 Quadro 驱动 (据说不破解 Host 不能使用 CUDA)

虽然老黄的发布说明写了不支持 vGPU 17 的驱动, 但是实际测试 Guest 是可以用 vGPU 17 的

这样也能享受 vGPU 18 的新特性 (例如 混合模式)


佛西云盘 可能提供了修改好的 (详细请咨询管理员), 使用修改好的只需 升级 FastAPI-DLS 即可

升级 FastAPI-DLS

您需要升级 FastAPI-DLS 到 2.0 版本以上 (建议重新安装)

升级完成后需要替换原来的 client_configuration_token (tok 文件), 否则无法获取授权

破解驱动程序

  • 方案1: 替换 驱动内的 ROOT CA 到你自己的 CA (FastAPI-DLS 官方方案)

详情请看 gridd-unlock-patcher 仓库

  • 方案2: 通过 逆向工程 破解驱动证书校验, 使其跳过

这边提供已经破解好的, 直接下载即可, 仓库地址

警告! 此仓库只适用于 64 位系统!


其实还有方案3, Windows 下驱动有授权缓存, 位于 C:\Program Files\NVIDIA Corporation\vGPU Licensing\TrustedStorage, 因为 Linux 没有所以不考虑

替换驱动文件

记得删除旧的 client_configuration_token (tok 文件), 再下载新的替换, 否则无法获取授权

Linux 安装完驱动后替换 nvidia-gridd 即可

rm -f /usr/bin/nvidia-gridd # 删除已有文件

# 这里以 18.1 破解好的举例, 你可以自己上传
wget -O /usr/bin/nvidia-gridd https://github.com/rbqvq/patched-nvidia-grid-drivers/raw/refs/heads/master/patched/18.1/nvidia-gridd

chmod +x /usr/bin/nvidia-gridd # 授予可执行权限
systemctl restart nvidia-gridd # 重启服务

Windows 有两种方案

  • 方案1: 安装完驱动再替换 (FastAPI-DLS 官方方案)
此方案适合已经安装了新版本驱动的用户

详情请看 gridd-unlock-patcher 仓库 里面有 PowerShell 脚本

简单来说, 在 C:\Windows\System32\DriverStore\FileRepository 搜索 nvxdapix.dll, 根据修改日期找到最新的, 右键打开文件所在位置

选中 nvxdapix.dll 右键属性, 找到 安全 选项卡, 选择 高级

找到 所有者 单击 更改

在弹出的对话框输入 Administrators 单击 检查名称, 然后一路点击 应用 (没有就点击 确定), 直到关闭所有属性窗口

再次选中 nvxdapix.dll 右键属性, 找到 安全 选项卡, 选择 编辑

单击 添加

在弹出的对话框输入 Administrators 单击 检查名称, 允许所有权限, 然后一路点击 应用 (没有就点击 确定), 直到关闭所有属性窗口

然后复制并覆盖掉 nvxdapix.dll

然后重启计算机 (或者 NVDisplay.ContainerLocalSystem 服务)

  • 方案2: 在安装时替换
此方案适合从旧版本升级和新装驱动的用户

安装驱动时会让选择解压路径, 如图, 直接确定

NVIDIA GRID 驱动安装程序 - 选择自解压目录

到用户许可协议时停下, 如图

NVIDIA GRID 驱动安装程序 - 用户协议

打开文件资源管理器, 前往解压路径下的 Display.Driver目录

例如 C:\NVIDIA\DisplayDriver\...\...\International\Display.Driver

nvxdapix.dll 复制并替换到这里

返回 NVIDIA 驱动安装程序 继续正常的安装流程

期间会遇到 Windows 安全中心 的弹窗, 如图

Windows 安全中心弹窗

选择 始终安装此驱动程序软件

因为破解会修改驱动, 导致驱动的 WHQL 数字签名失效

然后就完成了


普通用户不需要继续往下看了

逆向笔记

这里以 Linux 为例

nvidia-gridd 拖进 ida64.exe, 直接打开等它分析完 (窗口左下角变成 AU: idle)

选择 View -> Open subviews -> Strings

进入 Strings 子视图, 按下 Ctrl+F 搜索 Failed to validate public certificates

Strings 搜索结果

双击打开结果, IDA Pro 会自动切换到 IDA View-A, 找到字符串下方的 DATA XREF

如果是 调用链视图 可以按 空格键 切换到 汇编视图

IDA View-A - DATA XREF

双击后面的 sub_xxx, 按下 F5 会自动反编译成伪 C 代码

Pseudocode

可以看见图中 while 内部就是校验证书, goto LABEL_10 为校验失败时的行为

需要确定 while 调用的函数不含其他作用, 才可以安全 NOP 掉 (vGPU 18 是没有的)
具体可以双击函数名, IDA 会自动反编译 (没有基础就将伪 C 代码喂给 AI 分析)
可以结合调用链确定函数返回值, 建议自己跟着 DATA XREFF5 反编译伪 C 摸索摸索
while ( !(unsigned __int8)sub_42F0C0(a1, v5, a2, a3) )
{
   v5 = *++v4;
   if ( !*v4 )
     goto LABEL_10;
}
LABEL_10:
    v7 = 0;
    syslog(3, "Failed to validate public certificates");

找到函数名, 图里为 sub_432E40, 切换到 IDA View-A

然后到左边 Functions 视图按下 Ctrl + F, 搜索这个函数名

双击打开, IDA View-A 会自动定位到函数位置

IDA View-A - 函数位置

向下找到 while 语句的调用

可以根据 while 调用的函数名判断, 一行 C 指令 IDA 会用段落分开相对应的汇编指令

IDA View-A - 指令位置

图中将多余的 jmp 指令同样 NOP 掉, 需要有一定的汇编基础

使用 Ctrl + N (Edit -> Patch program -> NOP) 进行 NOP

部分 IDA 可能没有这个, 建议换几个包

NOP

然后 Edit -> Patch program -> Apply patches to, 在弹出的对话框选择你的 nvidia-gridd 进行 patch

Apply patches to

最后记得用二进制编辑器打开 patch 好的文件, 将 X-NLS-Signature 替换为小写的 x-nls-signature

HTTP/2 兼容性, 不改没法用, 参见 gridd-unlock-patcher
最后修改:2025 年 05 月 11 日
如果觉得我的文章对你有用,请随意赞赏