Steamworks 文献库
Steam DRM

概览

Steam DRM 包装器是 Steam 平台的重要组成部分,因为它会在启动游戏前先启动 Steam,以验证游戏所有权并确保 Steamworks 各项功能正常运行。

Steam DRM 包装器自身并非一个反盗版方案。 Steam DRM 包装器防范的是非常随意的盗版行为(如将所有游戏文件复制至另一台电脑),并具备一些代码混淆功能,但是蓄意攻击者很容易就可以将其移除。

我们建议使用无法在非法副本上运行的 Steamworks 功能(如在线多人游戏、成就、排行榜、集换式卡牌等)提升您游戏的合法副本的价值。

参见将 Steam 包装器与其他 DRM 结合使用,了解同时使用 Steam DRM 包装器与其他 DRM 或反篡改方案的更多信息。

Steam DRM 自动包装器

可从 SteamPipe 上传脚本中应用 Steam 包装器。 这样可以通过已登录的客户端向 Steam 服务器发出初始化请求,然后通过 HTTP 将未包装的原始可执行文件发送至 Steam 后端。 包装会在服务器上进行,然后 steamcmd 便会下载包装完成的可执行文件。

要使用 SteamPipe 进行 DRM 包装,请在脚本中先执行登录操作,再运行 drm_wrap 指令:
drm_wrap [appid] [input filename] [output filename] [toolname] [flags] [<destination>]

参数:
  • appid - 以数字组成的应用程序 ID。
  • input filename - 输入未包装的原始可执行文件的相对或绝对路径。 记得在可能包含空格的路径前后使用引号!
  • output filename - 工具将写入输出的已包装可执行文件的相对或绝对路径。
  • toolname - “drmtoolp”是目前唯一支持的 toolname 参数。
  • flags - 以下数值标志的位掩码,用于指定工具行为。
    • 0 - 常规包装(最高保护级别)。
    • 6 - 兼容模式(禁用混淆)。
    • 32 - 跳过调试器检查。
    • 38 - 兼容模式并跳过调试器检查(最低保护级别)。
  • destination, optional parameter - “cloud”或“local”。 当前默认值为“cloud”。 除非使用“cloud”选项时遇到问题,否则不需要使用“local”选项。

以下是执行 run_build.bat 脚本登录、应用 DRM 、生成并将生成版本上传至 Steam 的示例(App ID 为 480 ):
builder\steamcmd.exe +login mysteamaccount +drm_wrap 480 "D:\src\steamworkssdk\steamworksexample\release\steamworksexample.exe" "D:\src\steamworkssdk\tools\ContentBuilder\content\windows_content\SteamworksExample.exe" drmtoolp 0 +run_app_build ..\scripts\app_build_480.vdf +quit

手动使用 Steam DRM 包装器

若要快速地用 Steam 包装器包装 exe 文件,可使用 Steamworks 应用程序数据管理页面对游戏主要的 exe 文件进行包装。

  1. 在应用管理员页面,选择您希望新增 DRM 的游戏。
  2. 在应用管理员页面中,选择“技术工具”下方的“编辑 Steamworks 设置”。
  3. 选择“安全性”选项卡下的 DRM。
  4. 上传游戏的主要 exe。关于更多有关工具执行选项的说明,请见上方的自动包装段落。
  5. 将 exe 下载至您的本地电脑上。
  6. 将 exe 重命名回原来的文件名。
  7. 将 exe 复制至内容工具 depot 的来源位置中。
  8. 建立一个新版本的 depot。
  9. 在您的本机内容服务器上测试 depot。

将 Steam 包装器与其他 DRM 结合使用

Steam 包装器既可以、也应该与其他 DRM 解决方案配合使用。 要实现这一点,请在应用任何其他 DRM 之前,先以兼容模式应用 Steam 包装器。 请务必先应用它,以免干扰其他 DRM 解决方案。 兼容模式将会禁用该包装器的 DRM 功能。

从 Steamworks 页面中的下拉菜单中选择兼容模式,或选择自动 drmtool 中的适当标记,即可在兼容模式下提交 exe 文件。

常见问题

问:我的 C# / .NET 游戏在使用了 Steam 包装器后便无法运行。
答: Steam 包装器不支持 .NET 应用程序。 请使用 SteamAPI_RestartAppIfNecessary 代替 DRM 包装器。

问:我的游戏在使用了 Steam 包装器后便无法运行。
答: Steam 包装器可能会导致其他 DRM 工具失效。 由于可能存在冲突,请参阅将 Steam 包装器与其他 DRM 结合使用

问:每次建立新生成版本时都需要对我的 exe 文件应用 DRM 吗?
答: 是的,每个您打算发布的生成版本,都需要先用 Steam 包装器进行包装。 您可使用上述的 Steam 自动包装器流程将其自动化。

问:在应用 Steam DRM 包装器后,杀毒软件供应商检测到我的二进制文件有病毒。 我该怎么做?
答: DRM 注入流程会以与某些病毒相同的方式修改您的二进制文件,因此可能会发生这样的误报。 请联系杀毒软件提供商,或是使用 API 替代 Steam DRM 包装器。