数字版权管理 (DRM) 保护的等级
PC 上的 Microsoft Store 授权系统只能防御最基本的攻击。我们建议你不要仅依赖它来保护需要保护的内容。以下几项措施可以为更高级的攻击增加保护层。- 游戏在启动时发起的许可证检查
- 针对游戏许可证检查的防篡改保护
- 使用许可证令牌进行的服务端许可证验证
基础许可证检查
作为最基本要求,我们建议为任何希望获得 DRM 保护的游戏添加基础许可证检查。以下代码示例展示了执行此检查的基础实现,即使你没有使用任何其他 Gaming Runtime 相关的 API 调用也可以使用。你可以将此代码添加到启动路径中,并在许可证检查失败时显示特定的 UI。通过 XBOX Game Pass 授予的许可证会返回
isActive = true,与购买获得的许可证相同。XStoreGameLicense 结构体中没有标识许可证获取方式的字段,因此客户端许可证检查无法区分 Game Pass 访问与直接购买。若要进行这种区分,请使用从你的服务检测 XBOX Game Pass 订阅访问中介绍的服务端查询。非 Microsoft 提供的防篡改保护
尽管基础许可证检查示例提供了一定的保护,但攻击者常常会修改游戏的可执行文件来绕过此类检查。因此,保护游戏的下一步是使用非 Microsoft 提供的防篡改产品来阻断这些攻击途径。GDK PC 游戏有可选方案。请与你的防篡改供应商合作,获取如何将此保护集成到游戏中的详细说明。服务端许可证验证
防篡改保护在游戏启动时能起到很好的保护作用,但大多数最终都会被绕过。若要更进一步,联网游戏可以执行服务端许可证验证检查,并阻止许多客户端攻击。有关更多信息,请参阅许可证令牌概述。 基本流程如下:- 游戏服务向游戏客户端请求许可证令牌,并附上一个由游戏服务生成、代表该唯一请求的 GUID。
- 客户端随后调用客户端 API XStoreQueryLicenseTokenAsync。
- 该 API 调用授权服务,并判断游戏是否应向该用户返回许可证。
- 如果 API 能获得有效许可证,则返回一个已签名的许可证令牌,其中包含服务端提供的会话标识符。
- 客户端随后将许可证令牌回传给游戏服务。
- 游戏服务验证签名,确认该许可证来自 Microsoft Store 且未被修改。
- 游戏服务随后核对会话 GUID 是否与第 1 步中传给客户端的一致。
- 之后游戏服务可以信任该令牌中的授权信息是有效的。
