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: 通过 逆向工程 破解驱动证书校验, 使其跳过
这边提供已经破解好的, 直接下载即可, 仓库地址
其实还有方案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: 在安装时替换
此方案适合从旧版本升级和新装驱动的用户
安装驱动时会让选择解压路径, 如图, 直接确定
到用户许可协议时停下, 如图
打开文件资源管理器, 前往解压路径下的 Display.Driver
目录
例如 C:\NVIDIA\DisplayDriver\...\...\International\Display.Driver
将 nvxdapix.dll
复制并替换到这里
返回 NVIDIA 驱动安装程序 继续正常的安装流程
期间会遇到 Windows 安全中心 的弹窗, 如图
选择 始终安装此驱动程序软件
因为破解会修改驱动, 导致驱动的 WHQL 数字签名失效
然后就完成了
普通用户不需要继续往下看了
逆向笔记
这里以 Linux 为例
将 nvidia-gridd
拖进 ida64.exe
, 直接打开等它分析完 (窗口左下角变成 AU: idle
)
选择 View
-> Open subviews
-> Strings
进入 Strings
子视图, 按下 Ctrl+F
搜索 Failed to validate public certificates
双击打开结果, IDA Pro 会自动切换到 IDA View-A
, 找到字符串下方的 DATA XREF
如果是 调用链视图 可以按 空格键 切换到 汇编视图
双击后面的 sub_xxx
, 按下 F5
会自动反编译成伪 C 代码
可以看见图中 while
内部就是校验证书, goto LABEL_10
为校验失败时的行为
需要确定while
调用的函数不含其他作用, 才可以安全 NOP 掉 (vGPU 18 是没有的)
具体可以双击函数名, IDA 会自动反编译 (没有基础就将伪 C 代码喂给 AI 分析)
可以结合调用链确定函数返回值, 建议自己跟着DATA XREF
和F5 反编译伪 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
会自动定位到函数位置
向下找到 while
语句的调用
可以根据 while 调用的函数名判断, 一行 C 指令 IDA 会用段落分开相对应的汇编指令
图中将多余的 jmp
指令同样 NOP 掉, 需要有一定的汇编基础
使用 Ctrl + N
(Edit
-> Patch program
-> NOP
) 进行 NOP
部分 IDA 可能没有这个, 建议换几个包
然后 Edit
-> Patch program
-> Apply patches to
, 在弹出的对话框选择你的 nvidia-gridd
进行 patch
最后记得用二进制编辑器打开 patch 好的文件, 将 X-NLS-Signature
替换为小写的 x-nls-signature
HTTP/2 兼容性, 不改没法用, 参见 gridd-unlock-patcher