通过前两篇文章,我们了解了外挂实现的基本原理,在这一篇文章中,我们尝试换个角度,站在游戏开发者的角度,思考如何防御外挂。

首先声明,我没打过外挂,以下内容都是站在游戏开发商的角度尝试性的一些思考,如果有理解思考不对的地方还请指出。

一、原因

在考虑对付外挂之前,首先想一下,为什么需要对付外挂?一般来说,有对付外挂动机的有两种人,一种是游戏玩家,另一种是游戏开发商。

对于游戏玩家来说,对付外挂的主要原因是开挂者使得游戏不公平,需要消灭外挂保证游戏的公平。

我一直有这样的观点,对于确实可以保证公平的竞技类的游戏来说,比如Dota、LOL,那么使用外挂确实是可耻的,因为这确实在一个公平的对局中作弊了。

而对于本身就不公平的游戏来说,比如一些角色扮演游戏,就是谁花的钱多谁牛逼。如果有人开挂虐别人,那么我会认为这是一种bug级别的手段(类似现实生活中,人家后台就是硬,比你还要硬,想干啥干啥),反正对于玩家来说,大家都是花钱(用钱买装备,用钱买外挂),只是花钱的方式不同罢了。

而对于游戏开发商来说,游戏外挂破坏了游戏的整体环境,毕竟外挂的功能是逆天bug级别的,会让正常玩耍的玩家不爽、退游,退游的后果就是游戏没有人气,导致游戏死掉,因此,为了保证游戏的人气,开发商必须对付外挂。当然,换种角度来想,如果把游戏外挂者控制在一个合理的量级,既让正常玩家整体感知不是那么明显,同时又能够让这部分外挂使用者留存产生活跃,那么这对开发商来说也是喜闻乐见的,只是这种难度就特别大了。

二、对付目标

明确了原因,我们也要仔细考虑我们要对付的目标。

从根源上来说,我们需要对付的外挂作者,如果没有他们实现游戏外挂,那么也就不会有人使用外挂。外挂作者实现外挂的动机一般是钱,当然也有为爱发电的,我记得早些年,还是有好些免费外挂的,现在已经不多了。

对付外挂作者大概有两种方式,

  1. 让他写的外挂的口碑坏掉,大体也就这两种,
    1. 外挂功能不可用,时间长了自然就没人买了,这个一般通过技术手段对抗掉。
    2. 玩家使用外挂后果很严重,比如直接被封号了10年。
  2. 直接逮住人,抓到牢里,我们解决不了你的外挂,但我们可以解决你这个人😁。

使用外挂的是游戏内的玩家,因此我们也要对付这部分玩家,不能让他们在游戏中为非作歹,对付开挂玩家大体也就这几种方式,

  1. 正向思想引导,让其主动不再开挂。或是了解这些玩家的核心诉求,是不是游戏有某些痛点,使得玩家不得不开挂?比如某些游戏有太多重复性的工作,玩家需要一直肝,因此要借助自动化的外挂自动操作?
  2. 不让开挂玩家玩,不让玩也分几个等级。
    1. 直接把你踢出游戏,作为警告。
    2. 再严重点的,就把你封号处理,可以根据严重程度,分不同的封号时间,比如永久封号等。不过封号这里会有一个问题,即某些玩家可能也是游戏的核心玩家,只是一时想不开开了挂,对于这种玩家你把他永封后,他大概率就再也不会玩游戏了,因此可以适当惩罚,让其回归游戏,从长远来看,可以为游戏带来更大的收益。

要对付开挂玩家和开挂作者,自然得能够检测到外挂,这样我们才能够对付开挂玩家,对付外挂作者。因此,检测外挂便是防御外挂的根本。

三、对抗

对抗外挂之前,我们首先了解下整个外挂的生命周期。

  1. 外挂作者逆向分析游戏逻辑,实现外挂功能。
  2. 外挂作者或是代理人通过Q群或其他平台售卖外挂。
  3. 作弊玩家花钱买到外挂,在游戏中虐人。
  4. 被杀的玩家明显感知到哪个玩家开挂,心中愤愤不平。

在第一阶段,游戏开发商需要尽可能的提升外挂实现的门槛,尽可能多的阻止外挂作者实现外挂,常见的一些手段大概这些。

  1. 游戏代码层面混淆,增加外挂作者反编译层面的成本。
  2. 使用反调手段,增加外挂作者调试的成本。
  3. 调整游戏架构,尽可能的将游戏的逻辑实现在服务端,而不是客户端。

在第二阶段,即外挂销售阶段,游戏开发商可以通过社工等手段,潜入外挂销售群,通过外挂作者或是外挂销售人员的联系方式顺藤摸瓜,在现实中将人抓到。

在第三阶段,则是对抗外挂的主战场了,开挂玩家在游戏中为所欲为,是正常玩家感知最明显的阶段,如果这一阶段处理不好,那么将会直接导致正常玩家流失,游戏死亡。因此在这一阶段,需要尽快的发现开挂玩家,并让他们无法再继续游戏,从而保证干净的游戏环境。

游戏中检测外挂大体有这几种方式,

  1. 基于样本的方式,这种方式和传统的杀毒软件类似,可以把外挂也当作一种病毒。首先收集一些比较知名外挂的样本,分析其的特征,比如有哪些特定的进程,会修改哪些注册表信息或是在磁盘哪些目录遗留了哪些文件等。当玩家玩耍时,如果检测到了这些特征便说明检测到了外挂。
  2. 通过前两篇文章我们知道,如果外挂要能够使用,那么大概率要读、写游戏内存,调用、改写游戏函数,那么也可以在这一维度使力,比如使用驱动,禁止第三方进程读取游戏内存;扫描游戏代码内存,检测游戏内存完整性等。
  3. 前两种对付外挂的方式比较有效,但也比较单一,还是有些外挂可以绕过这些检测方案。我们知道,无论是什么外挂,最终要有效果,那么一定会在玩家的行为上反映出来。比如有了透视功能后,玩家可以预先知道敌人的位置,那么其瞄准行为一定与不开挂时是有区别的。所以在这种方式中,就可以收集玩家的游戏行为,使用一些机器学习的手段进行分析判断。通过这种方式,理论上无论是哪种外挂,都是可以对付的。

在第四阶段,如果到了这一阶段,说明第三阶段我们对抗外挂失败,还是让正常的玩家感知到了开挂玩家的存在,这个时候我们就需要一些补救措施。最为常见的就是投诉举报,如果游戏中有多个玩家同时举报某个玩家开挂,这个时候游戏开发商就需要介入进行分析,要分析必须得有当时的场景,因此,这里就需要结合游戏中的对局视频来进行分析了。现在一些游戏支持录制一段视频并上报,那么游戏开发商就可以基于这些视频做一些人工或是自动化的分析,来判断玩家到底有没有开挂。

四、小结

游戏就是个程序,只要是程序那么便会有漏洞,因此无论怎么对抗,游戏外挂必然是会存在的,所以游戏攻防将会是一个长期不断的过程。

近几年,随着云游戏的发展,游戏开发商似乎看到了对付外挂的曙光,外挂的一般原理都是读取游戏内存或是修改游戏数据实现的,在云游戏中,在玩家客户端本地的只是一个视频流,外挂根本无法读取游戏的内存代码等数据,自然也就没有外挂了。

不过道高一尺魔高一丈,印象中也有看到新闻说,已经有基于图像识别的外挂产生了,可以通过识别游戏中敌人的位置自动开枪。因此,在有了云游戏后,有没有外挂还不好说,毕竟只要有足够的利益,技术根本不是问题。

五、最后

这三篇文章整理了自己对外挂的一些认知和理解,以后估计也不会再去深入了解这方面内容了,毕竟还有其他很多更有意思的事情等着自己去折腾😁。