天天酷跑后台反作弊方案

发表于2015-09-17
评论1 5.5k浏览

天天酷跑后台反作弊系统

         《天天酷跑》在20139月正式公测,同时接入公司的微信和手Q手机游戏平台。经过平台和游戏的共同努力,游戏持续受到玩家的喜爱,DAU也不断攀升。随之而来的,外挂也开始泛滥,特别是PK系统上线之后,使用外挂可以获得钻石收益,进一步推动了外挂的使用。

1.客户端数据上报

后台反作弊的基础,是客户端在结算协议中上报的数百项数据。这些数据之间的关系错综复杂,简单的修改一项或某几项数据,很难完全模拟出完全正常的客户端数据。下图是部分上报的数据定义。

1.部分结算统计数据 

结算协议使用《天天酷跑》自定义的属性系统来上报数据,既可以基本上避免协议升级,也能够利用属性系统的随机成员读写功能,完成类似脚本的反作弊计算。关于属性系统的内容,可以参考相应的介绍文章。

2是客户端上报的结算协议示例,其中的dwAttributeID 字段唯一标识了上报的数据,dwValue表示上报数据的具体值。图1定义了客户端上报的dwAttributeID列表。

2.结算协议示例

         

客户端上报的数百项数据,为游戏后台提供了反作弊的基础,那如何利用好这些数据呢?

2.代码级反作弊

对于逻辑比较复杂的反作弊策略,会通过硬写代码的方式来实现。在具体实现时,基于属性系统的分层设计,将每项需要检测的数据交由一个函数来处理,好处是代码相对独立、清晰,便于理解。结算系统初始化时会注册结算上报属性与处理函数的映射,运行时结算系统会查找每个属性是否对应有处理函数,有的话就执行相应代码。

3.注册处理函数

 

属性处理函数可以比较简单,也可以非常复杂。以游戏中的表现分校验为例,看下具体的校验逻辑:

1)         基本得分的计算,包括踩怪、吃金币等相关得分。

2)         额外得分的计算,包括糖果类道具相关得分。

3)         神偷萌萌得分。

4)         穿越关卡得分。

5)         恐龙蛋得分。

6)         动物头得分。

7)         奖励关得分。

8)         精灵加分。

9)         宠物、坐骑相关加分。

10)     得分buff

 

代码级反作弊是个繁琐的逻辑计算过程,需要充分了解游戏得分相关的方方面面,需要有良好的编码能力、足够的耐心和反复与策划、客户端同学沟通的能力。而且一旦有修改就涉及到服务器程序发布版本,整个过程比较容易出错和出现误杀,为了尽量减少对现网用户的影响,酷跑对这块代码有一些要求:

1)         总体的游戏结算结果监控,能够看到结算总量和异常总量。

2)         结算异常需要有error级别日志,线上发布时能立即看到错误信息。

3)         每项检测需增加开关,随时可以通过改配置并reload来关闭和打开检测。

4)         数值比较类检测需增加buff,通过调整buff值可以控制检测的宽严程度。

3.      反作弊公式

基于属性系统的动态反作弊动态公式,可以根据数据之间的逻辑关系,配置出简单、有效的公式,用于检测玩家是否作弊。

反作弊公式规则如下:

1)         公式原型

a)         X  {|||}  Y  {大于|小于|等于}  Z

b)         XYZ是公式中的核心变量,具体的值通过计算得出

2)         变量数值

a)         X = Attr(a) {|||} FaFaAttr(a)的固定系数因子

b)         Y = Attr(b) {|||} FbFbAttr(b)的固定系数因子

c)         Z = Attr(c) {|||} FcFcAttr(c)的固定系数因子

3)         属性获取

a)         Attr(a)Attr(b)Attr(c)是客户端上报给后台的属性值

b)         公式解析器根据配置中的属性堆ID和属性ID获取属性值

4)         公式逻辑

a)         单条公式计算结果为TRUE时,表示该公式命中

b)         规则由一条或者多条公式组成,当包含多条公式时,所有公式命中才表示规则命中,因此规则内部属于“与”的逻辑关系

c)         规则列表的任何一个命中,都会判定结算作弊,因此规则之间是“或”的逻辑关系

 

反作弊公式是一套由配置表驱动的逻辑规则,公式解析器会动态执行这些规则,根据规则的需要取出客户端上报的结算数据,进行计算并给出作弊判断。图4是反作弊配置表的示例。

4.反作弊配置表

 

          表中的“描述”字段用于作弊判断为TRUE时,打出比较好理解的日志,可以知道具体的原因。例如里面的日志表示用户数据触发105号规则,原因是实际产生的无敌时间大于应该的无敌时间的1.2倍(公式两边乘以10)。

do NOT pass safe rule check[id=105,rule=TotalGiantTime*10[262490] > RealGiantCount*12[257556]|]

4.      CS协议反作弊

《天天酷跑》早期的C/S交互协议没有加密,只是简单的TDR打包后明文传输,导致后期出现请求包的重放和伪造类作弊,获取非法收益。此类作弊通过增加协议加密和请求唯一序列号,可以有效地防治。

5.      安全组数据分析

互娱研发部业务安全中心的小伙伴们,通过接入客户端的SDK和游戏后台上报的各项数据,进行分析和建模来发现作弊玩家,发现后通过游戏测提供的idip接口修改玩家的数据进行打击,例如清除排行榜分数和结算收益、封号等。

小结

国内独特的游戏环境,产生了游戏火爆程度和外挂(包括各种作弊器、修改版)数量成正比的局面,所以反作弊的工作会是长期、艰苦的。建议项目组在早期建立反作弊系统并投入相应人力,积极、主动地与作弊进行对抗,才能有效防止大规模的作弊泛滥。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

0个评论