或许有人会质疑:"这系统很垃圾,懂点编程就能绕过",但我们需要理性看待:反作弊的本质是提升作弊门槛,而非追求绝对防御。但就像门锁防不住专业小偷却能阻拦大多数普通人的道理一样——当你的游戏面对成千上万的普通玩家时,真正会钻研绕过技术的永远是极少数。
对接反作弊实例预览:
环境准备:
注意:需要使用C++ 且需要导入EAC反作弊SDK
EPIC的SDK: EOS-SDK-41373641-v1.17.0 包含devtools
前往 dev.epicgames.com 创建一个组织,创建完成后再创建自己的项目。
进入开发者门户后,在右上角有一个 SDK 下载的入口打开Product Setting 并下载SDK 创建 productid deploymentid sandboxid
Epic 已经帮你创建好了Dev, Stage 和 Live 三个环境的沙盒 ID 和部署 ID
创建完成游戏项目之后,还需要对项目进行一些配置,Epic 的服务分为 Dev, Stage 和 Live 阶段,分别的对应关系是 Dev 对应的开发阶段,Stage 对应的是灰度测试阶段,Live对应的是正式发行。正常情况下我个人觉得只需要关注 Dev 以及 Live 俩个阶段即可。


创建客户端政策
点击进入客户端,然后添加新的客户端政策,

然后设置如图所示,取名可以自定义,咱们这边就叫 AntiCheat, 然后类型选择 TrustServer, 其他的设置使用默认设置即可。

最后点击添加新的客户端策略。
创建客户端
客户端名称取名ANCTest,客户端政策就使用刚才设置的 AntiCheat.

身份提供程序
进入身份提供程序,添加身份提供程序。EOS 提供了多种第三方的身份验证渠道,如图所示:


需要去steam开发者平台。里面的栏目中需要设置一个加密密钥,这个密钥该去 STEAMWORKS 开发者平台去获取,如何获取这个密钥,下面的内容中我会讲到。
身份验证的内容设置完毕后,我们就可以上线沙盒环境了。
沙盒
点击沙盒后,你会看到页面中有三个环境,Dev, Stage 和 Live,测试的话我们肯定是选择 Dev, 灰度测试我们就选择 Stage(当然用 dev 也没关系),然后上线后就用 Live,所以顺序大家别弄错了。
首先要部署 Dev 沙盒的身份提供程序,选择我们之前设置好的 Steam, 下拉列表中找到 Gray.

最后点击部署,然后完成部署,这样我们 EOS 反作弊的功能就在 Epic 开发者门户中设置好了。
STEAMWORKS 生成密钥
最后,咱们来补上没说全的内容,如何去获取 STEAMWORKS 中对应的加密密钥呢!
第一步
登录 STEAMWORKS 开发者后台:https://partner.steamgames.com/apps/
然后进入所对应的 App,譬如我的游戏“奥德赛”是要在 Steam 上发售的,所以我肯定是要在它平台上创建一个游戏应用。
第二步
进入app后,找到技术工具,编辑 Steamworks 设置,



好了,拷贝这一串加密密钥到上面所说的身份提供程序中 Steam 的加密密钥栏中设置一下即可。
配置EOS SDK Dev工具
打开压缩包解压反作弊工具:EOS_AntiCheatTools-win32-x64-2.1.0

将dist文件夹中的 start_protected_game.exe EasyAntiCheat 放入你编译好的游戏项目文件夹中

进入EasyAntiCheat文件夹,编辑Settings.json 配置反作弊信息,配置productid deploymentid sandboxid

进入平台激活反作弊客户端模块并下载配置文件



将.eac文件放入编译好的项目目录下,命名为与游戏入口程序一模一样的名称

下载完整性KEY zip文件, 主要目的保证游戏文件完整性没有被篡改

解压后我们将得到两个文件,分别是 base_private.key base_public.cer 将文件放入在devtools文件夹中

然后我们新建2个bat方便执行加密指令 将xxxxx 替换为你的productid target_game_dir替换为你的项目实际位置
命名为生成HashA.bat
anticheat_integritytool.exe -productid xxxxxxx -target_game_dir G:\UE5Project\ANCTest\Build\WindowsClient
@pause命名为 生成加密HashB.bat
anticheat_integritytool.exe -productid xxxxx -inkey base_private.key -incert base_public.cer -target_game_dir G:\UE5Project\ANCTest\Build\WindowsClient
@pause运行A 批处理后再次运行B 批处理

游戏文件完整性加密完成
此时使用游戏项目目录中的start_protected_game.exe启动游戏,而非UE编译出来的EXE程序。

反作弊加载完成后进入游戏,自此已对接完成,接下来详细说明反作弊在不同网络架构中的运行模式,然后是C++对接流程(需要自行实现API)
反作弊接口支持适用于各种游戏网络架构的不同模式。反作弊客户端接口支持所有这些游戏网络,而反作弊服务器接口专门针对专用的服务器(客户端-服务器模式)。
专用服务器(客户端-服务器模式)
在权威游戏服务器上使用此模式,并同时实现反作弊客户端和服务器接口。

点对点模型(点对点模式)
此模式的使用对象为:每个游戏客户端都与所有其他游戏客户端交换网络消息但没有游戏客户端对游戏会话具有完整权限的全互联布局。

监听服务器
当单个玩家充当游戏会话的权威游戏主机时,你必须使用点对点或客户端-服务器模式。

EOS反作弊系统完整流程列表
反作弊工作流程图:

系统初始化流程
1. EOS平台初始化
EOS_Initialize()
作用: 初始化整个EOS SDK
时机: 程序启动时最先调用
重要性: 所有EOS功能的基础
EOS_Platform_Create()
作用: 创建EOS平台实例
参数: 包含ProductId、SandboxId、DeploymentId等配置
返回: EOSPlatformHandle句柄
2. 反作弊接口获取
EOS_Platform_GetAntiCheatServerInterface()
作用: 获取服务端反作弊接口
用于: 服务端反作弊功能
EOS_Platform_GetAntiCheatClientInterface()
作用: 获取客户端反作弊接口
用于: 客户端反作弊功能
用户认证流程
3. 用户ID处理
EOS_ProductUserId_FromString()
作用: 将字符串转换为EOS用户ID
用途: 用户身份识别和验证
EOS_ProductUserId_IsValid()
作用: 验证用户ID是否有效
重要性: 确保用户身份合法性
EOS_ProductUserId_ToString()
作用: 将EOS用户ID转换为字符串
用途: 日志记录和调试
4. 用户登录状态
EOS_Platform_GetConnectInterface()
作用: 获取EOS Connect接口
用途: 处理用户连接和认证
EOS_Connect_GetLoginStatus()
作用: 检查用户登录状态
返回: 登录状态枚举值
EOS_Connect_GetLoggedInUserByIndex()
作用: 获取已登录用户信息
用途: 获取当前用户ID
5. 用户认证操作
EOS_Connect_Login()
作用: 执行用户登录
参数: 包含认证凭据
EOS_Connect_CreateUser()
作用: 创建新用户账户 如果是steam平台,则需要关联steam 将需要通过steam api获取SteamTicket作为参数
时机: 首次登录时
EOS_Connect_AddNotifyAuthExpiration()
作用: 注册认证过期通知
用途: 处理token过期情况
EOS_Connect_CopyIdToken()
作用: 复制ID令牌
用途: 获取用户认证信息
EOS_Connect_IdToken_Release()
作用: 释放ID令牌内存
重要性: 防止内存泄漏
客户端反作弊流程
6. 客户端会话管理
EOS_AntiCheatClient_BeginSession()
作用: 开始客户端反作弊会话
参数: 用户ID、反作弊模式(P2P/ClientServer)
重要性: 启动客户端反作弊保护
EOS_AntiCheatClient_EndSession()
作用: 结束客户端反作弊会话
时机: 游戏退出或切换模式时
7. 客户端消息处理
EOS_AntiCheatClient_AddNotifyMessageToServer()
作用: 注册“发送给服务器”的消息回调
用途: 当客户端需要向服务器发送反作弊数据时触发
EOS_AntiCheatClient_RemoveNotifyMessageToServer()
作用: 移除消息回调注册
用途: 清理资源,防止重复注册
EOS_AntiCheatClient_ReceiveMessageFromServer()
作用: 处理来自服务器的反作弊消息
参数: 服务器发送的二进制数据
重要性: 验证服务器反作弊指令
8. 客户端违规检测
EOS_AntiCheatClient_AddNotifyClientIntegrityViolated()
作用: 注册客户端完整性违规通知
用途: 检测到作弊行为时触发回调
EOS_AntiCheatClient_RemoveNotifyClientIntegrityViolated()
作用: 移除违规通知注册
时机: 系统关闭时清理
服务端反作弊流程
9. 服务端会话管理
EOS_AntiCheatServer_BeginSession()
作用: 开始服务端反作弊会话
参数: 服务器名称、注册超时时间、是否启用游戏数据上传
重要性: 启动服务端反作弊监控
EOS_AntiCheatServer_EndSession()
作用: 结束服务端反作弊会话
时机: 服务器关闭时
10. 服务端客户端管理
EOS_AntiCheatServer_RegisterClient()
作用: 向反作弊系统注册客户端
参数: 客户端用户ID、IP地址等信息
时机: 玩家连接服务器时
EOS_AntiCheatServer_UnregisterClient()
作用: 从反作弊系统注销客户端
时机: 玩家断开连接时
11. 服务端消息处理
EOS_AntiCheatServer_AddNotifyMessageToClient()
作用: 注册“发送给客户端”的消息回调
用途: 当服务器需要向客户端发送反作弊数据时触发
EOS_AntiCheatServer_RemoveNotifyMessageToClient()
作用: 移除消息回调注册
用途: 清理资源
EOS_AntiCheatServer_ReceiveMessageFromClient()
作用: 处理来自客户端的反作弊消息
参数: 客户端句柄、消息数据
重要性: 验证客户端反作弊数据
12. 服务端监控回调
EOS_AntiCheatServer_AddNotifyClientActionRequired()
作用: 注册“客户端需要执行动作”通知
用途: 当检测到作弊需要踢出玩家时触发
动作类型: 踢出玩家、临时封禁、永久封禁等
EOS_AntiCheatServer_RemoveNotifyClientActionRequired()
作用: 移除动作要求通知
用途: 清理资源
EOS_AntiCheatServer_AddNotifyClientAuthStatusChanged()
作用: 注册“客户端认证状态变化”通知
用途: 监控客户端反作弊认证状态
状态: 认证中、认证成功、认证失败等
EOS_AntiCheatServer_RemoveNotifyClientAuthStatusChanged()
作用: 移除认证状态通知
用途: 清理资源
系统维护流程
13. 系统心跳
EOS_Platform_Tick()
作用: EOS系统心跳更新
频率: 每帧调用
重要性: 保持EOS系统正常运行
14. 错误处理
EOS_EResult_ToString()
作用: 将错误代码转换为可读字符串
用途: 错误日志记录和调试
15. 系统关闭
EOS_Shutdown()
作用: 关闭整个EOS SDK
时机: 程序退出时最后调用
重要性: 释放所有EOS资源
完整调用时序
启动阶段:
EOS_Initialize()→ 初始化SDKEOS_Platform_Create()→ 创建平台实例EOS_Platform_GetAntiCheatServerInterface/ClientInterface()→ 获取反作弊接口EOS_Connect_Login()→ 用户登录
游戏运行阶段:
客户端:
EOS_AntiCheatClient_BeginSession()→ 开始反作弊会话服务端:
EOS_AntiCheatServer_BeginSession()→ 开始反作弊会话服务端:
EOS_AntiCheatServer_RegisterClient()→ 注册客户端持续:
EOS_Platform_Tick()→ 系统心跳消息流: 双向反作弊消息传递和验证
关闭阶段:
EOS_AntiCheatServer_UnregisterClient()→ 注销客户端EOS_AntiCheatClient/Server_EndSession()→ 结束反作弊会话移除所有通知回调
EOS_Shutdown()→ 关闭SDK
注意: 这里只实现了反作弊功能,另外还有其他接口,比如举报接口,请自行查阅开发文档。
这个流程确保了完整的反作弊保护,从用户认证到实时监控,再到违规处理,形成了一个闭环的安全体系。
反作弊开发文档:https://dev.epicgames.com/docs/zh-Hans/game-services/anti-cheat/anti-cheat-interfaces