使用反作弊接口

反作弊客户端接口支持Windows、Mac和Linux平台,需要安装64位操作系统。

要使用反作弊接口,你必须:

  1. 查看并遵守开发先决条件

  2. 确定你的网络架构客户端策略类型

  3. 配置你的客户端模块反作弊完整性工具反作弊启动加载器可执行文件

  4. 仅限Windows)配置Windows服务安装程序

  5. 将反作弊接口与你的游戏代码集成:

    1. 使用连接接口确定用户身份。

    2. 注册客户端-服务器点对点的回调。

    3. 设置会话通知

  6. 使用集成核对清单来确认反作弊接口的运行情况。

客户端模块设置和更新

每当游戏启动时,反作弊启动加载器都会为你的游戏获取最新配置的反作弊客户端模块。更新可能包括反作弊预防和检测方面的漏洞修订和改进。

设置、更新和恢复客户端模块

  1. 转到 开发人员门户(Developer Portal)

  2. 点击 你的产品(Your Product) > 游戏服务(Game Services) > 反作弊(Anti-Cheat)

  3. 从下拉菜单选择相应的 系统(Windows、Linux或macOS)。

  4. 对于更新和恢复测试模块在游戏中是否按照预期运行。

  5. 使用要激活的客户端模块的 更多选项(More Options) 按钮来选择 激活构建(Activate Build)

定期检查开发人员门户的 客户端模块发布(Client Module Releases) 列表中是否出现新的反作弊模块。

当需要在实时游戏中更新客户端模块时,务必测试新的模块在游戏中是否按照预期运行,然后再将其激活。

测试模块
  1. 在开发人员门户的 客户端模块发布(Client Module Releases) 列表中,选择新客户端模块的 更多选项(More Options) 按钮。

  2. 选择 下载配置文件(Download Config File)。这将下载纯文本的配置文件,用于强制测试系统下载和使用指定的反作弊模块,而非你当前正在使用的模块。

  3. 将下载的配置文件放到与游戏可执行文件相同的目录,并使用相同的名称。

    1. 例如,如果游戏的可执行文件名称是 MyGame-Win64-Shipping.exe,那么配置文件必须放在相同的目录中,并且名称为 MyGame-Win64-Shipping.exe.eac

  4. 使用反作弊启动加载器正常启动游戏。

  5. 找到反作弊启动加载器的日志文件

  6. 验证反作弊启动加载器的日志文件是否显示预期的时间戳,并指明配置文件中的URL已使用。

  7. 通过为你的游戏选择的相应测试流程来运行游戏。你至少应该能够成功连接到受保护的多玩家游戏会话,并可以使用所有关键功能,例如游戏中的购买覆层。

  8. 完成后移除.eac配置文件,以便测试系统和实时环境保持一致。此.eac文件绝不能作为游戏发布的一部分发售。

  9. 当你确信新模块能在游戏中按预期运行时,选择 激活构建(Activate Build)

恢复客户端模块

如果你怀疑最新的更新导致游戏出现问题,那么可能需要恢复到上一个反作弊模块。

按照与你执行更新时相同的指令进行操作,但选择上一个版本,而非最新版本。

我们建议恢复到最近的上一个版本,而不是过久的版本。

开发者门户中的反作弊服务配置

在EOS开发者门户反作弊服务页面的顶部,会显示两个配置状态。客户端保护(Client Protection) 表示反作弊客户端模块和保护是否会在玩家启动游戏时通过反作弊引导器交付。服务器启动(Server Kicks) 表示反作弊保护是否会在受保护的游戏会话中执行,以及未运行反作弊服务或存在违规行为的玩家是否会通过SDK回调被标记并移除。

点击配置按钮后,你可以在3种不同配置选项之间选择。

  • 全部启用

    • 常规操作中应使用此配置。反作弊客户端模块会在游戏开始时执行,并且在受保护的游戏会话中,它会被强制执行。

  • 启用客户端保护并禁用服务器启动

    • 如果有过多玩家因为某些反作弊错误,而从受保护游戏会话中被移除,则应临时使用此选项。反作弊客户端模块会在游戏开始时执行,但它不会在受保护的游戏会话中被强制执行,所以无法有效防止或检测出作弊行为。

  • 全部禁用

    • 该配置可以在紧急情况下临时使用,例如当反作弊相关的崩溃影响到大量玩家时,并且这类情况无法通过恢复到早期反作弊客户端模块来解决。反作弊客户端模块不会在游戏开始时执行;在受保护的游戏会话中,它不会被强制执行。如果可能的话,最好能恢复到早期的反作弊客户端模块。如果使用该配置,在恢复到"全部启用"状态之前,你只能启用若干小时的"客户端保护"状态,以此作为过渡期,从而避免大量玩家突然从受保护游戏会话中被移除。

反作弊完整性工具配置

反作弊必须能够验证每个玩家机器上的关键游戏文件与开发人员提供的文件是否匹配。你可以使用SDK的 EOS_AntiCheatTools 包中的 anticheat_integritytool 来配置文件完整性检查。

反作弊完整性工具(Anti-Cheat Integrity Tool) 是一个命令行工具,可以在构建流程结束时轻松添加,可用于生成以下文件:

  • 一个签名的游戏文件的哈希列表(目录),可以用配置文件来定义。在运行时,反作弊服务会加载该签名目录,并在访问内容文件时确认它们是否匹配。

  • 一个签名的运行时配置,用于客户端反作弊,允许开发者配置某些产品的特定设置。

由于游戏文件会在访问时被验证,所以工具不会阻止目录文件被删除。如果某个关键文件在磁盘中丢失,则游戏代码会适当地处理它。

如果目录文件本身或其覆盖的目录文件被修改,然后被加载,则游戏客户端会自动被阻止加入受保护的多人游戏会话。不过,游戏可以在离线、单人或不受保护的模式下运行(这类模式不受反作弊保护)。

你必须针对每个在运行时启用了反作弊的游戏版本或更新运行此工具。你应该将其配置为针对游戏的每个发售版本自动运行,并确保输出文件包含在最终发布的正确目录中。

配置完整性工具

  1. 在开发人员门户上,转到 你的产品(Your Product) > 游戏服务(Game Services) > 反作弊(Anti-Cheat)> 下载完整性密钥(Download Integrity Keys),然后点击 下载(Download)。这将自动下载一个压缩文件,里面是用于检查完整性的必要文件。

    1. 这些文件专用于你当前正在查看的产品。如果在多个产品上工作,请确保使用匹配的包。

    2. 不要泄漏私人密钥,不要将其发布出去,否则玩家可以绕过完整性保护。

  2. 从工具压缩文件中提取 base_private.keybase_public.cer 文件,然后将文件移动到与 anticheat_integritytool.cfganticheat_integritytool.exe 相同的目录中。

  3. 修改 anticheat_integritytool.cfg 中的值,以满足你的需要。

    1. 修改 search_options 下的字段,控制哪些文件被编入目录。

      1. 只要游戏发布的文件含有可执行代码(.dll、.exe等),那么就要将该文件纳入完整性检查之列,否则就有可能发生注入作弊。通常不需要包含其他游戏资产,因为修改这些资产无法在游戏过程中带来显著的不公平优势。

    2. 在某些情况下,游戏引擎本身可能支持验证特定的资产文件格式。

      1.例如,虚幻引擎支持高效地签署和验证其.pak存档文件。如果有此类支持可用,最好还是使用一下,但不要将这些文件纳入反作弊文件完整性检查中。

    3. 修改 runtime_configuration 下的字段,指定以下运行时设置:

      1. max_active_game_instances:设置单台电脑上可以运行的最大活跃游戏实例的数量。 如果不设置该值,或将其设置为零,将导致无限数量的实例数。

      2. crash_reporter_name: 设置崩溃报告对象的名字(被传递给客户端反作弊沙盒)。如果发生崩溃,允许崩溃报告者访问游戏进程,但我们将在授予上述访问权的30秒内强制终止游戏进程,以保持游戏的完整性。

      3. anti_tamper_solution_name:游戏正在使用的反篡改解决方案的名称。目前认可的方案有Arxan、Denuvo、Themida、StarForce、VMrotect、SteamDRM。如果你的游戏使用的是其他专有解决方案,你可以在传递 "Generic" 作为参数,以确保兼容性。打开命令提示符,然后按照以下方式运行工具: anticheat_integritytool.exe -target_game_dir <game_root_directory> -productid <your eos_product_id>

  4. 成功后,工具将会把文件输出到你指定的 target_game_dirEasyAntiCheat\Certificates 子目录。

启动配置

必须使用 反作弊启动加载器帮助程序可执行文件 来启动游戏,以确保反作弊保护组件可以在创建游戏进程之后立即加载。你传给反作弊启动程序的任何命令行参数,都将被自动转发给你的游戏的可执行程序。

配置反作弊启动加载器可执行文件

  1. EasyAntiCheat/Settings.json 文件中填写你的 ProductIdSandboxIdDeploymentId。这些值可以在开发人员门户的 产品设置(Product Settings) 页面上找到。

  2. 列出 Settings.json 文件中用于调用EOS SDK API并受到反作弊保护的最终游戏可执行文件。

    1. 例如,虚幻引擎通常配置为在游戏根目录中输出一个小型BootstrapPackagedGame帮助程序可执行文件,而实际游戏可执行文件驻留在一个子目录中,例如 Binaries\Win64Settings.json 中列出的可执行文件必须是 Binaries\Win64 中的文件,因为这是实际上需要受到反作弊保护的文件。

  3. 可选配置:

    1. 标题: 为启动程序进程提供一个希望使用的标题。如果未提供标题,将使用默认标题"轻松反作弊启动程序(Easy Anti-Cheat Launcher)"。

    2. wait_for_game_process_exit: 如需获取游戏进程的退出代码,请将此设置为 1,以便保持启动程序进程一直开着。游戏进程窗口可见后,启动程序窗口会隐藏自己。

    3. requested_splash:自定义启动屏幕图像的路径,通常是带有游戏自有图形的图像 1.格式:仅支持.png。 1.尺寸:高度必须是800像素和450像素。

    4. 图标自定义

      1. Windows

        1. 从EOS SDK 1.15开始,启动程序将尝试提取目标可执行文件的图标(在 可执行文件 字段中指定)。

          如果提取失败,将使用内嵌的Easy Anti-Cheat图标。

          如果你想让启动程序使用其他图标,你可以将图标文件放入 EasyAntiCheat/BootstrapperIcon.ico

          请注意,这只影响Windows任务栏和任务管理器中显示的图标。

          要自定义显示在Windows任务栏中的图标,请将你的自定义图标文件放在 EasyAntiCheat/BootstrapperIcon.ico 中。

          当浏览磁盘上的文件时,启动程序可执行文件在Windows资源管理器中显示的图标是嵌入在文件本身中的,无法改变。不过,大多数PC商店,包括Epic Games商城(使用参考)和Steam可以通过配置,让游戏快捷方式使用任何图标。

      2. Mac

        1. 从EOS SDK 1.15开始,启动程序将存储在其 .app 包中。

          这未启动程序增加了Easy Anti-Cheat icon的图标,同时也使其可以被修改。要改变图标,你可以用自己的 .icns 文件替换 AntiCheatIcon.icns。

          请注意,包需要文件名保持不变。由于包有签名,修改图标需要你用自己的签名再次签署该包。

如果你遇到了和必要或可选配置有关的问题,请参考启动加载程序的日志文件

使用多个启动程序配置文件

某些情况下,需要准备多个引导器配置文件并在启动时在它们之间切换。例如,同一个游戏分发版本,需要在生产或测试环境中使用,而 SandboxIdDeploymentId 不同;或者,根据用户选择的启动设置,可能需要使用多个不同的游戏可执行文件。

你可以通过传递格式为 -anticheat_settings=SecondarySettings.json 的命令行参数,来指定游戏启动时使用的配置文件。其中,SecondarySettings.json 需要替换为你要用的配置文件的文件名。此参数将被 bootstrapper 读取,不会传递给游戏可执行文件。

注册回调

反作弊客户端和服务器接口在多玩家游戏会话期间生成回调事件,以便为玩家保持连接和实施反作弊保护。你必须在第一个受保护的多玩家游戏会话开始之前配置这些接口,但根据使用的模式,配置将有一些差异。

通用

反作弊客户端有一个与模式无关的回调,可以在出现反作弊客户端完整性违反时,通知游戏进程。

当反作弊有违规信息提供给游戏进程时,如要注册一个回调,请使用 EOS_AntiCheatClient_AddNotifyPeerAuthStatusChanged

提供给回调的信息必须以指定格式显示给玩家。这有助于他们理解为何无法加入在线多人游戏会话。消息始终以本地化格式提供。

该功能不会向用户暴露他们不需要的信息,以防止用户在这些受保护的会议中获得优势。

客户端-服务器模式

客户端-服务器模式要求同时具有反作弊客户端和反作弊服务器接口,因此在注册回调时需要注意 EOS_AntiCheatClient…EOS_AntiCheatServer… 之间的命名差异。

要在必须使用游戏本身的联网功能将反作弊消息交付到连接的客户端或游戏服务器时注册触发的回调,需要使用 EOS_AntiCheatServer_AddNotifyMessageToClientEOS_AntiCheatClient_AddNotifyMessageToServer。 当 EOS_AntiCheatServer_AddNotifyMessageToClient 关联的回调在游戏服务器上触发时,你必须使用游戏本身的联网功能,把不透明的消息数据发送给合适的客户端。然后使用收到的消息数据调用 EOS_AntiCheatClient_ReceiveMessageFromServer**。

相反,当 EOS_AntiCheatClient_AddNotifyMessageToServer 关联的回调函数在游戏客户端上触发时,你必须使用游戏本身的联网功能,把不透明的消息数据发送给游戏服务器,并在收到数据后调用 EOS_AntiCheatServer_ReceiveMessageFromClient

EOS_AntiCheatServer_AddNotifyClientActionRequired 在必须将操作应用到连接的客户端时注册触发的回调,比如因其反作弊保护未按照预期工作而从游戏中将其删除。

如果回调指向的代码变得无效,则必须使用相应的函数 EOS_AntiCheatClient_RemoveNotifyMessageToServerEOS_AntiCheatServer_RemoveNotifyMessageToClientEOS_AntiCheatServer_RemoveNotifyClientActionRequired 删除这些回调。

以下回调对于客户端-服务器模式是可选的,能为游戏提供额外的信息。

当连接的客户端达到新的反作弊身份验证状态以限制滥用时,你可能需要注册要触发的回调,以防止其在收到相应的回调和状态级别之前出现在关卡中。使用 EOS_AntiCheatServer_AddNotifyClientAuthStatusChanged 注册新状态的回调,如果回调指向的代码变得无效,则使用相应的函数 EOS_AntiCheatServer_RemoveNotifyClientAuthStatusChanged 删除此回调。

点对点模式

EOS_AntiCheatClient_AddNotifyMessageToPeer 注册的回调函数会在某个反作弊消息必须发送给某个对等端时触发。你必须使用游戏本身的联网功能把不透明的消息数据发送给合适的对等端,然后在收到数据后调用 EOS_AntiCheatClient_ReceiveMessageFromPeerEOS_AntiCheatClient_AddNotifyPeerActionRequired 在你必须将操作应用到连接的对等端时注册触发的回调,比如因其反作弊保护未按照预期工作而从游戏中将其删除。游戏将决定在当前的游戏情境中采取最合适的方式来处理此操作。

非权威客户端在被告知应该删除一个对等端时,最简单的响应方式是从游戏断开连接并提供一条清晰的错误消息。此解决方案在小型游戏会话中非常有效,例如1v1比赛,但更大规模的游戏会话需要更复杂的游戏逻辑。EOS_ANTICHEATCLIENT_PEER_SELF 是一个代表本地游戏客户端的特殊句柄,用于表明本地游戏客户端无法参与在线游戏(将被对等端拒绝)。

要在对等端的身份验证状态发生变化时注册触发的回调,请使用 EOS_AntiCheatClient_AddNotifyPeerAuthStatusChanged。在注册新对等端并建立通信之后,最多可能需要60秒钟才能触发此回调。例如,此回调可能用于只有在完全完成反作弊身份验证之后才允许对等端的一些操作。

当上述回调被调用时(带有 EOS_EAntiCheatCommonClientAuthStatus::EOS_ACCCAS_RemoteAuthComplete 参数),验证才被视为完全完成。这意味着用户已经成功与反作弊后端进行了验证。

如果玩家可以在验证完全完成前参与在线游戏,就无法保证他们可以运行反作弊客户端保护。在这种情况下,他们可以一直游戏,直到发生验证超时踢出。

如果游戏的完整性取决于玩家不离开在线会话,则必须实施完整的验证检查。

受保护的游戏会话通知

只有当玩家参与要保护的多玩家游戏时,反作弊接口才会激活。当玩家加入或离开受保护的多玩家会话时,必须使用以下API来通知接口。

开始受保护的游戏会话

当本地用户使用 EOS_AntiCheatClient_BeginSession 进入受保护的多玩家游戏会话时,必须通知反作弊客户端接口。

在使用客户端-服务器模式时,当受保护的多玩家会话通过 EOS_AntiCheatServer_BeginSession 启动时,还必须通知反作弊服务器接口。

在受保护的游戏会话期间

回调将依赖调用 ``EOS_Platform_Tick``。如需更多详细信息,请请参阅平台接口

注册客户端(客户端服务器模式)

对于专用服务器(客户端-服务器模式),必须使用 EOS_AntiCheatServer_RegisterClient 注册受保护的游戏会话中出现的每个客户端。为受保护的游戏会话开始时出现的每个玩家,以及在受保护的游戏会话进行期间的任意时间点加入会话的玩家调用此函数。

游戏服务器上的这些调用应该与客户端上对 EOS_AntiCheatClient_BeginSessionEOS_AntiCheatClient_EndSession 的调用相匹配。

例如,你可以在关卡过渡开始时选择取消注册客户端,然后在过渡结束时重新注册客户端。必须确保每个客户端也按照相同的方式来结束和重新启动自己的受保护游戏会话。

当已注册的客户端离开受保护的游戏会话,或者通过使用 EOS_AntiCheatServer_UnregisterClient 结束受保护的游戏会话时,也必须取消注册这些客户端。

结束受保护的游戏会话

当本地用户离开受保护的多玩家游戏会话时,必须使用 EOS_AntiCheatClient_EndSession 通知反作弊客户端接口。

当游戏服务器结束受保护的多玩家游戏会话时,必须使用 EOS_AntiCheatServer_EndSession 通知反作弊服务器接口。

定义数据功能的事件(客户端-服务器模式)

Gameplay数据功能是可选的,可以提供与游戏状态有关的额外数据来用于反作弊目的。这些功能当前针对的是动作/射击类型的游戏,不适用于其他类型。

例如,反作弊服务能够在不依赖客户端的情况下使用来自服务器的此数据检测出射击游戏中的瞄准辅助作弊。

可以使用 EOS_AntiCheatServer_LogGame…EOS_AntiCheatServer_LogPlayer... 函数记录一组常见的内置事件。你可以按照关联事件发生的频率来调用这些函数。SDK中包含用于高效处理这些事件以及限制网络流量生成量的逻辑。

除了内置事件,在开始第一个受保护的游戏会话之前,在游戏启动时调用 EOS_AntiCheatServer_RegisterEvent 可定义任意自定义事件。然后,可以在受保护的游戏会话期间使用 EOS_AntiCheatServer_LogEvent 来记录这些事件。建议尽可能使用内置事件,因为可以从特定的优化中获益。

处理作弊检测结果

如果在你的游戏中检测到了作弊,这些检测结果将在开发人员门户的 惩罚(Sanctions) 页面上显示为待定的惩罚。你必须进行审核并根据自己的最佳判断来决定是否在游戏中激活所有这些惩罚。

为了避免将检测细节公开给作弊手段开发者,不提供产生作弊检测结果的原始数据。如果发现了错误的作弊检测结果,与其关联的惩罚将自动标记为被删除,并提供相应的消息。

故障排除

操作问题

在激活新的反作弊客户端模块时,如果出现了问题,请恢复到之前使用的客户端模块。

如果因为违反反作弊规定,导致突然有过多玩家从受保护游戏会话中被移除,请将反作弊服务配置改为"启用客户端保护并禁用服务器启动",以解除玩家限制,并提供更多时间进行故障排除。

日志

对于大部分反作弊问题,最好从日志数据入手。

反作弊接口是EOS SDK的组件,可以程序化生成日志输出,而不是使用日志记录接口直接创建日志文件。你的游戏代码必须将此日志数据写入便于使用的位置,以进行故障排除。

要对开发期间的问题进行故障排除,我们建议将反作弊的日志级别设置为 VeryVerbose

服务和反作弊启动加载器会自动创建自己的日志文件。

服务
  • Windows: %AppData%\EasyAntiCheat\service.log

反作弊启动加载器
  • Windows:

    • 模块下载信息: %AppData%\EasyAntiCheat<Your ProductId><Your DeploymentId>\loader.log

    • 启动加载器日志: %AppData%\EasyAntiCheat\anticheatlauncher.log

  • Linux:

    • 模块下载信息: .cache/com.epicgames.easyanticheat/Your ProductId>Your DeploymentId>/loader.log

    • 启动加载器日志: .cache/com.epicgames.easyanticheat/anticheatlauncher.log

  • Mac:

    • 模块下载信息: /Users/<Current_User>/Library/Caches/com.epicgames.easyanticheat/<Your ProductId><Your DeploymentId>/loader.log

    • 启动加载器日志: /Users/<Current_User>/Library/Caches/com.epicgames.easyanticheat/anticheatlauncher.log

    • 启动器自己的日志: %AppData%\EasyAntiCheat\anticheatlauncher.log

常见错误

反作弊剔除理由(客户端动作理由)

身份验证失败 / 身份验证超时(1/2)

在客户端-服务器模式下,此错误意味着游戏服务器未从游戏客户端收到反作弊身份验证消息。超时时间段在调用 EOS_AntiCheatServer_RegisterClient 时开始,并且在 RegisterTimeout 秒后结束。此错误的最常见原因是:

  • 未正确实现游戏服务器和游戏客户端之间的消息传递。验证消息是否按照文档记录的方式进行传递,并且在游戏本身的联网功能进行处理期间未损坏或截断。

  • 当游戏客户端处于阻止加载阶段,因而无法通信时,游戏服务器调用了 EOS_AntiCheatServer_RegisterClient。验证客户端是否在服务器调用 EOS_AntiCheatServer_RegisterClient 之前完成了阻止加载阶段,但在完成之前,不要允许客户端执行有意义的游戏操作,以预防游戏弱点。

  • 游戏客户端是在没有使用反作弊启动加载器的情况下启动的,因此没有反作弊保护。验证正常启动流程是否包含反作弊启动加载器。

检测信号超时

此错误意味着反作弊数据流在初始身份验证之后停止了较长时间。此错误的最常见原因是:

  • 游戏服务器或本地对等端遇到了性能问题,并且反作弊消息传递得非常缓慢,甚至根本没有传递。通过检查你自己的性能指标,验证游戏逻辑是否正常运行。

  • 客户端或对等端已断开连接,但未调用对应的UnregisterClient函数。验证在断开连接时是否总是调用了UnregisterClient函数。

NullClient

该错误表示反作弊启动加载器无法加载反作弊模块,而是以"NullClient"故障安全模式启动。请查看受影响电脑上的反作弊启动加载器日志了解详情。最常见的原因包括:

  • 由于互联网连接问题或防火墙,导致反作弊启动加载器无法在游戏启动时下载反作弊模块。

  • 玩家在没有激活客户端模块的平台上启动游戏,例如使用Wine/Proton时没有激活Linux模块。

  • 你的开发者门户网站中的客户端保护设置被禁用,并且该服务在之后的完全重新启用时,没有设置任何过渡期。

ClientViolation

该错误表示在相应的游戏客户端上,出现了反作弊客户端违规错误。完整信息由 EOS_AntiCheatClient_PollStatus 函数提供。该函数应定期在游戏客户端上调用,并为玩家显示相关错误。详见受保护游戏会话通知

Game Security Violation

如果某个关键的反作弊组件被终止,或者电脑的配置方式绕过了默认的Windows内核安全功能,该错误可能会在游戏客户端上显示。

该错误的一个常见原因是硬件控制(如RGB照明)软件包运行可一些具有安全漏洞的驱动程序,而这些安全漏洞已被滥用于作弊。在这类情况下,我们建议玩家更新到软件包的最新可用版本(如果没有,则请与软件供应商联系)。

将调试程序和反作弊结合使用

当反作弊保护激活时,调试程序不会工作。

对于常见的游戏开发任务,我们建议在不激活反作弊保护的情况下运行游戏,方法是直接启动游戏可执行文件,而不使用反作弊启动加载器可执行文件。

当以这种方式启动游戏时,反作弊保护将不会激活,并且不会干扰调试程序。如果反作弊已经正确集成,应该无法在这种情况下加入受保护的多玩家会话。

外部崩溃转储器

在Windows中作为独立进程运行的崩溃转储工具,需要读取游戏进程的内存才能正常工作。可惜,这种级别的访问很容易被劫持或被用于作弊,所以在正常情况下,它会被反作弊保护程序阻止。

为了兼容反作弊保护,除非识别出应该触发转储的异常情况,否则外部崩溃转储器禁止打开Windows进程或游戏进程的线程句柄(具有内存访问权限)。识别到异常情况时,可以打开一个完整的访问句柄,并且为了处理崩溃,可以短暂访问游戏进程内存。这段时间内,游戏进程线程将自动暂停。经过短暂的延迟,游戏进程将被终止,以防止滥用。

反作弊保护会自动识别Windows WerFault和虚幻引擎的CrashReportClient转储器(它们都符合这些要求)。如果你的崩溃转储器也符合这些要求,那么只需将可执行文件的名称设置为以"CrashReport"开头,即可以同样方式操作。

注意,某些不兼容的崩溃转储工具会在每次启动游戏进程时立即打开该进程的一个完全访问句柄。因为上述逻辑,使用这些工具会导致游戏挂起,并在启动后不久退出。