
作弊者与对等网络(P2P)编程:新手指南

简短回答:在点对点(P2P)游戏中,一名玩家的机器拥有比赛的所有权,因此该玩家可以重写游戏数据。而专用服务器则将所有权从玩家手中收回,从而杜绝了这些作弊行为。在任何架构中,自瞄(Aimbot)和透视(Wallhack)都是在作弊者自己的机器上运行的,因此它们仍然需要反作弊系统。
每个作弊手段都涉及三个问题:谁拥有比赛所有权、作弊程序在哪里运行,以及什么系统能够检测到它。
在点对点模式中,主机是薄弱环节:主持比赛的玩家可以编辑游戏状态、报告虚假结果或运行修改后的版本,而其他玩家无法推翻他们的操作。
服务器自主权杜绝了主机端作弊:一旦由非玩家控制的机器拥有比赛所有权,就不会再有主机能够对其进行篡改。
客户端作弊需要独立的防护层:自瞄、透视和自动开枪(Triggerbot)会读取或驱动玩家自己的游戏程序,因此无论游戏是否是点对点模式,它们都需要反作弊系统。
中继服务器不会改变比赛的所有权归属:它们可以隐藏 IP 地址并阻止玩家之间的拒绝服务(DoS)攻击,但主机仍然在运行游戏。
多人游戏中的作弊行为往往给人感觉是一个巨大的单一难题。但实际上,它是由几个分布在不同层面的较小问题组成的。
有些作弊手段取决于谁掌握着比赛的主导权。另一些则完全在作弊者自己的机器上运行。如果把这两者混为一谈,就会导致游戏工作室寄希望于服务器来阻止自瞄挂(aimbot),或是指望反作弊系统来阻止房主虚报胜利。本指南将理清这些问题。关于点对点(P2P)的成本问题,包括中继服务器能解决和不能解决的问题,请参阅 Edgegap 的配套文章:P2P 网络的隐性成本。
在点对点游戏中,谁拥有比赛的主导权?
大多数点对点(P2P)游戏并非没有服务器。而是在某个玩家进行游戏时,该玩家的游戏客户端充当了服务器。时任 Highwire Games 首席网络工程师的 Michal Buras 在其 2024 年 9 月实时服务型游戏峰会(Live Service Game Summit)的演讲中描述了这种常见的架构:“游戏创建一个监听服务器(listen server),并通过公网 IP 将所有玩家连接到该服务器。”
该玩家就是房主(Host)。房主保存着比赛状态,检查其他玩家发送的数据,并裁定发生了什么。
Edgegap 的术语表用一句话总结了其后果:“谁掌握了比赛状态,谁就能修改它。”
还有一小部分游戏完全没有房主。在确定性锁步(deterministic lockstep)和回滚(rollback)游戏中,每个节点都运行完整的模拟,且只交换输入操作。在这种情况下,每个客户端仅对其自身的输入具有受信任权。这是一种专业化的设计,主要用于策略游戏和格斗游戏,通常并不是团队所说的普通 P2P。
哪些作弊行为源自掌握比赛主导权?
这些是点对点模式所导致的作弊行为,因为它们都必须经过房主。
内存修改:房主可以修改自身进程中的数值,例如生命值、弹药、冷却时间或位置。其他所有玩家都会把修改后的状态当作真实情况接收。
虚假战果:房主上报比赛结果。其他任何人的机器都不负责计分。
经济系统篡改:如果游戏包含游戏内经济系统,房主的机器就是决定购买、掉落物和价格的地方。控制这一环节的房主可以随意凭空生成物品或更改其价格。
修改版客户端:权威逻辑内置在每个玩家下载的游戏内部。任何人都可以对其进行反编译,了解房主是如何验证比赛的,然后修改这些规则并使用修改后的版本进行建房托管。
延迟开关(Lag Switching):房主可以瞬间切断自身连接,以便在自己行动时让其他人全部定格。非房主玩家也可以尝试这样做,但比赛能容忍多大延迟是由房主决定的。
在主客机(host-client)架构的游戏中,其他玩家将其操作发送给房主,房主像服务器一样对其进行检查。问题并不在于缺少验证,而在于验证是由其中一名竞争对手执行的。
哪些作弊是在玩家自己的机器上运行的?
第二类作弊完全不涉及比赛的主导权。它们读取或驱动的是作弊者自己的游戏客户端副本。
自瞄(Aimbot)和自动开火(Triggerbot):读取对手的位置,替玩家移动准星或开火。
透视挂(Wallhack)和 ESP:利用游戏客户端已经接收到的位置数据,绘制出玩家本不应该看到的对手。
输入自动化:例如宏和脚本化移动,发送看似来自真实玩家的完美输入指令。
这些作弊手段完全不在乎谁是比赛的房主。它们对点对点房主有效,对专用服务器(Dedicated Server)也同样有效,因为游戏始终需要在玩家的 PC 上运行才能玩。
服务器可以限制其中的一部分。透视挂只能显示客户端接收到的内容,因此如果服务器不向客户端发送视线之外的玩家位置,透视挂能显示的内容就会减少。这样可以降低危害,但并不能检测出作弊者。
用什么来防范各类作弊行为?
两个防御层承担着两项不同的工作。
作弊类型 | 运行位置 | 点对点(P2P) | 专用服务器 | 反作弊系统 |
|---|---|---|---|---|
内存修改、虚假战果、经济系统篡改 | 房主的机器 | 房主可轻易实施 | 杜绝:没有玩家掌握状态 | 对此不需要 |
使用修改版客户端托管比赛 | 房主的机器 | 房主可轻易实施 | 杜绝:由工作室运行服务器版本 | 对此不需要 |
延迟开关 | 作弊者的网络连接 | 房主设定限制 | 缓解:服务器设定限制 | 可标记异常模式 |
自瞄、自动开火、输入自动化 | 作弊者的机器 | 有效 | 有效 | 必需 |
透视挂与 ESP | 作弊者的机器 | 有效 | 若服务器不发送隐蔽位置则可缓解 | 必需 |
服务器权威是第一道防线。将比赛转移到不受任何玩家控制的服务器上,就能封堵所有依赖于掌控游戏状态的作弊手段。这也是竞技型和经济驱动型游戏摆脱点对点架构的原因。
反作弊系统是第二道防线。客户端反作弊负责在玩家机器上搜寻作弊软件。服务器端检测则从玩家发送的数据中寻找不可能的输入或异常统计数据。第二种方法首先需要有一台服务器,因为绝不能相信点对点房主会如实举报自己。
服务器还必须契合游戏的类型。术语表中直截了当地指出:“如果像卡牌游戏那样去托管一款射击游戏,根本无法阻止对该游戏至关重要的作弊行为。”
IP 地址和拒绝服务(DoS)攻击又是怎么回事?
直接的点对点连接还有一个根本不算作弊的弱点。为了建立连接,节点之间会获知彼此的 IP 地址,这使得大厅中的任何玩家都可以对另一名玩家发起拒绝服务攻击,将其踢出比赛。
平台方在设计时会规避这一点。Valve 的 GameNetworkingSockets 文档指出:“在 Steam 上,我们通常不会在不受信任的节点之间共享公网 IP 地址,以防恶意玩家发起 DoS 攻击。”
专用服务器在玩家之间解决了这个问题,因为所有人都连接到服务器,没有人能看到其他人的地址。服务器本身仍然是一个公网端点,因此其托管提供商的网络防护能力至关重要。
中继服务器能解决作弊问题吗?
不能。中继服务器仅负责在玩家之间转发流量。它可以隐藏 IP 地址并让处于严格 NAT 后的玩家建立连接,但根据 Edgegap 术语表的说法,它“不运行任何游戏逻辑,因此游戏仍然是玩家托管的点对点模式:某一位玩家的机器依然掌握着比赛的主导权”。
上述所有房主端作弊在中继服务器背后依然可行。向中继服务器添加检查逻辑也不会让它继续单纯作为中继存在。“一旦引入了计算,它就不再是中继服务器了,”Buras 表示,“它就变成了专用服务器的一种形式。”配套文章中对中继进行了详细探讨。
当服务器掌握比赛主导权时会发生什么改变?
《血腥混蛋》(Bloody Bastards)是 Tibith Games 推出的一款下载量超过 4000 万次的移动格斗游戏,其多人模式最初采用点对点架构,完全信任房主上报的比赛结果。
比赛结果“可以在该客户端上被伪造,多人游戏中的作弊行为一度极其猖獗。”
Tibith Games 联席总监兼开发者 Tibi Tircomnicu,《血腥混蛋》案例研究
该工作室将多人游戏迁移到了无头(headless)、具备权威性的专用服务器上。据该工作室称,自 5.0.0 版本以来,再没有黑客能够成功作弊。
这就是第一道防线发挥的作用。伪造战果的前提是玩家拥有比赛的主导权,而一旦由工作室的服务器接管主导权,这条作弊途径便不复存在。
服务器需要多大的规模?
专用服务器并不一定需要运行整个游戏。对于卡牌游戏或休闲合作类游戏,它可以只转发消息并检查少数几条规则,或者在客户端进行模拟的同时验证结果和购买行为。Edgegap 的专用服务器术语表描述了从类中继型到完全模拟型的四种不同规模,配套文章中对它们进行了横向对比。
过去人们反对的理由主要是成本和运营负担:按区域预留算力容量,无论是否有玩家游玩都必须付费。而按需编排技术可以在匹配成功时启动服务器,平均只需约 3 秒,覆盖 615 多个地区。在 Edgegap 的 AAA 工作室案例研究中,正是将服务器部署在如此靠近玩家的地方,才使得延迟相比公共云平均降低了 58%。
点对点模式目前仍然适用于极少数游戏:没有排位模式、没有游戏内经济系统、大厅中没有陌生人的仅好友联机,以及每个节点本就运行完整模拟的确定性锁步游戏。
结语
每种作弊手段都对应着相同的三个问题:谁拥有比赛决定了房主是否能篡改比赛;作弊在哪里运行决定了服务器是否能察觉;而防范手段要么是服务器权威,要么是反作弊系统,或者是两者兼具。
点对点模式将第一个问题的答案交给了玩家。专用服务器则收回了这一控制权,这正是终结《血腥混蛋》战果造假的关键所在。如需了解 Tibith 是如何完成这一转变的,请阅读《血腥混蛋》案例研究。
书写者
雅库布·莫蒂尔(产品总监),马修·杜佩雷(创始人兼首席执行官)








