hua818 发表于 2024-11-27 11:47:52

2015年问道一线品牌沙龙:艾格拉斯CTO张鹏分享游戏防外挂及安全策略

张鹏:重度手游的防作弊与安全

图文游戏茶馆

前言

2015年1月10日,【文翁仙】品牌沙龙第一期,创始人兼CTO张鹏先生有幸受邀围绕“游戏反游戏”主题进行近60场讨论。 -检查和安全”。离线分享的分钟数。在写这篇文章之前,我再次向艾格拉斯和张鹏先生本人表示诚挚的谢意。

张鹏使用的是自主研发、自营的,该产品于2012年7月上线,目前支持重磅手游《战争英雄》八种语言。他分享了以下五类游戏安全:游戏服务器防御外挂、游戏服务器黑客入侵防范、网页平台API安全、客户端插件防范与备份。

(注:【问一线】是由游戏茶馆和CSDN联合主办,属于开发者专属的纯技术小型手游分享会,每期都有一个主题,根据主题邀请一线人物参与潜心讲述案例,讲述开发、运营、跳过的那些“坑”(俗称纯干货)。

1.游戏服务器防外挂

1、客户端安全和网络连接 在做ARPG的时候,一定要非常注意通讯的安全。我们曾经遇到过一个用户,用数据包拦截器拦截了数据包,然后改变了数据,然后发送了过来。事实上,现在的手机游戏中,你可能会遇到以前游戏中的作弊和黑客。

我们的沟通是一个强有力的纽带。在加密方面,您的密钥无法修复。我们使用有序的密钥。比如这次我们是“1”,下次是“2”,下次是“3”……当然,这只是一个例子。

这样做的好处是,一旦你的游戏包被用户截获,他就没有办法通过包的秘钥或者固定的方法来破解。当然,如果他看到了你游戏的原始代码或者分析了代码的工作原理,他就无能为力了。因为这是在客户端完成的事情。

更完善的加密方法需要非对称加密。服务器和客户端约定一个密钥,需要公钥和辅助密钥匹配,双方通过约定的密钥进行通信。在发送每个数据包之前,都会使用不同的密钥对其进行加密。每次加密都是通过错位等方式进行加密,同样的数据每次加密的结果都不一样,给他们分析带来了困难。

以往活跃于PC的外挂开发商,在制作手游外挂时,基本上会无所不用其极。我们遇到的最严重的问题是直接破解包中的SO文件并反编译。其中一项说明已更改。

首先,比赛时必须看守大门。

2、反加速 加速是最影响用户体验的行为。这也是对比赛最直接的影响。 《战争英雄》之前也遇到过这样的问题。有一位玩家非常频繁地释放某个技能。游戏每10秒释放一次,而他每秒释放一次。另外,对于其他用户来说,在两人PK中,用户比对手花了更多的钱,却被秒杀。

怎么解决这个问题呢?客户端定期向服务器发送一个数据包,该数据包的内容是当前时间。这样可以做两件事:一方面,服务器可以根据数据包接收到这个数据包的频率,并发送这个数据包来监听客户端。如果提速的话,客户端频率就会增加(当然会有一个误差值),如果太高,我们会偷偷标记下来。如果继续增加,则表明用户在作弊。另一种加速是在不改变发包频率的情况下改变客户端某项操作的频率。如果服务器无法解决频率,可以通过客户端的时间来监控。

一般来说,加速插件并不是针对特定游戏而设计的,而是通用的,提高整个系统或进程的速度。将客户端第一个数据包和最后一个数据包之间的时间差与服务器第一个数据包和最后一个接收到的数据包之间的时间进行比较。如果时间差越来越大,那么玩家就作弊了。

3.账户登录验证账户登录系统,防止用户被黑客攻击。有时,游戏设计者会将用户名和密码放在客户端。如果某些用户安装恶意程序,其帐户可能会被盗。所以验证部分主要是为了防止用户的密码在传输过程中被窃取。例如,HTTP传输过程中,密码传输和简单加密很容易被破解。

一种方法是使用 HTTPS。现在大部分大型网站以及安全性比较高的网站,如淘宝、支付宝等,都使用HTTPS进行登录。另一种是利用服务器之间的通信。这个是值得信赖的。为了防止密码在传输过程中泄露,采用了MD5加密(这种加密是单向加密,只能加不能减)。最后对两个MD5字符串密码进行匹配,看是否相同。

我有一个经验跟大家分享:如果你用它的密码生成一个MD5字符串,那么这个字符串就永远有效,用户也可以用它来登录。这是不允许的,所以我们在这里执行的时候进行加密MD5,添加时间戳。这个时间戳不应该太准确。太准确会导致问题。比如你精确到秒级,服务器也精确到秒级,那么这两个字符串的验证就不会通过。比如那个是3秒加密的,这里也需要3秒加密。事实上,服务器端随着时间的增加而变化,所以将时间精确到10分钟以内比较合适。设置时,更改时间单位。精确到毫秒,但是将最后6位数字填入0,那么它的时间应该是17分钟左右。向前推 17 分钟,向后推 17 分钟。这样就会生成一个MD码,这个MD码就是加密方和匹配方。只要这两者相差在正负17分钟之内,就可以验证。 ,这将阻止用户使用 MD5 代码登录。

4.关键数据服务器验证关键数据(如技能CD、行走速度、距离)服务器验证,防止技能加速、瞬移、穿墙。部分依赖于客户端,关键数据基于服务器。战斗值以服务器为准。

在游戏过程中,如果用户加速或者修改客户端,使得一些关键数据,比如走棋的频率发生变化,你就不能再什么都不做了。这个时候你需要做一个验证,让这个大招每10秒只能发送一次,那么我会记住,考虑这个大招上次发生的时间和它发生的时间差这次(需要允许有一定的误差)。比如你在7秒、8秒内发送,我就允许,但是如果你在5秒或更短的时间内发送,我就不允许。你可以发送,但是不会生效,就像有人打了你一拳,但是没有失血一样。

https://img2.baidu.com/it/u=840883545,1790466513&fm=253&fmt=JPEG&app=120&f=JPEG?w=888&h=500

有时候,如果你的判断太严格,用户可能会因为网络传输速度问题而被踢掉线路,用户可能会打电话询问客服。以前客服都是被骂、被哭的。其实我们在验证的时候不能太严格。如果多次记录违规行为,我们将对其进行进一步处理。

主要是服务器需要对一些关键的东西做一些验证,这个在计算过程中是受服务器的影响。目前,我们公司的大部分游戏都有战斗、伤害等相关数值。它是由服务器生成的。很多时候服务器会说我打到了谁,服务器会验证是否不可能打到。战斗中的伤害全部由服务器计算。客户端作为代表向用户提供反馈。

5、发送监控指令的频率。发送监控指令的频率和刚才的有关。如果过于频繁地发送某些指令,会导致游戏变得不平衡。只要对他有利,用户就会做任何事情。他可能可以使用任何方法,所以他需要监控发送某些指令的频率。

之所以列出这一点,是因为有些指令实际上发送的频率非常高。有些每秒甚至每 500 毫秒发送一次。因此,你在验证的时候,很难判断这两条指令是否正确。满足条件,因为如果网络稍微卡一下,200毫秒就过去了。如果这个技能是500毫秒的话,就已经过半了,所以难度很大。因此,通过统计一段时间内的平均发送频率,我们可以最终判断用户是否真的作弊。如果一段时间内平均发送时间超过一半,就有问题了。

然后,当我们检测到某个用户可能作弊时,我们就要求客户端发回该用户的进程列表,然后通过这些进程列表来配置已知插件的进程名,因为世界上的插件有很多,而有些用户可能自己开发了插件,所以我们只能对已知的进行比较和监控。如果有很多用户反馈某个用户在作弊,那么我们就会调出他的进程列表,看看是否有可疑之处。比如说,如果一个人每次被举报作弊都有一个进程,而这个进程是未知的,不知道它是做什么的,那么就会更加可疑。那么,这件事就变得人为了。

2、游戏服务器黑客攻击防范 当一款游戏的用户数量超过市场规模时,黑客就会获利。

1.最小化操作系统安装。首先,很多公司都使用Linux,但很少使用。安装时尽量最小化安装,打开最少的服务和端口,只打开我们需要的应用程序,关闭其他端口。因为有些应用程序存在漏洞。如果你没有专业的技能来处理这些问题,他们很有可能会通过某个漏洞钻进来。

2.远程操作限制然后,我们通常使用SSH来登录远程计算机,以及我们的mysql端口。如果这些都向公共网络开放的话,是非常不安全的。后来我们使用ss5代理登录ssh和mysql。所有游戏服务器均使用远程终端管理系统进行管理。服务器上架后,所有管理操作均由本系统完成。管理系统单点登录,仅开放一个服务端口,有效防止黑客入侵。对于运营商来说也是一样的。当然,如果公司比较有钱的话,可以搭建硬件防火墙。

ss5代理服务器安全,启用SSH证书登录验证,禁止root密码登录。如果您的密码泄露,这将防止您被黑客攻击。

3.GM远程操作限制还有一个,远程操作限制。最早有一个用户进入系统,拿到了我们的GM工具,是给客服用户用的。拿到这个工具后,就开始给别人加钱,在淘宝上卖,卖砖,卖代币。该表单用于修改游戏数据。后来,我们以服务器到服务器通信的形式在这里添加了用户身份验证消息。用户现在登录是否合法?

4、应用启动权限在服务器上。启动应用程序时,不得使用 root。当我们第一次被入侵时,是因为我们的java应用程序或服务是用root启动的。然后黑客一进来,我就看到了一切,最后整理完所有系统后,我无法以root身份启动它。我必须为它创建一个新用户,然后使用该用户来启动它,并且该用户只会对该文件夹或某个应用程序生效。否则的话就非常危险了。

5、数据库管理MySQL用户权限分离:root、操作用户、游戏用户。数据库的密码文件经过多次加密,系统中不存在明文密码。并且数据库密码会定期更新。防止入侵后数据库密码泄露。

分离出操作用户就相当于创建一个新的用户来运行系统。只是无法为游戏或很多人打开root。最后,系统内核、数据库、jdk都要及时升级或打补丁。

案例一:早期,由于没有启用单点登录服务器,服务应用是由root启动的,仅受到使用限制。黑客利用服务漏洞入侵我司服务器,安装木马代码块,并利用“中文菜刀”远程登录入侵。 。

这个名为“ ”的黑客工具在入侵后挂在了我们的一台HTTP服务器上。这其实是一个非常简单的PHP/JSP网页,但是通过这个网页可以做很多事情。获取GM工具后,获取权限较高的用户密码,盗取账号。

案例二:早期,黑客利用专有工具入侵游戏服务器并修改数据。

解决方案是启用认证服务器,对服务器应用https服务,使用s2s通信,避免入侵和损失。

3、Web平台的API安全 通常Web平台的安全主要指通证验证系统、充值系统服务器、通道sdk服务器。

https://img0.baidu.com/it/u=1917566786,2769224027&fm=253&fmt=JPEG&app=138&f=JPEG?w=750&h=500

1、应用服务器管理功能限制应用服务器的管理端口()只允许ss5代理服务器的IP访问;应用服务器以非root用户启动,防止黑客入侵成功后获取操作系统的控制权限,并通过端口转发功能,将80端口的请求转发到应用服务器提供服务的端口;

游戏服务器或渠道方访问的API接口(如充值回调)设置IP白名单;我们公司使用的是集群提供的一些充值等服务,其管理端口不能对外开放,必须采用单点登录。访问时,采用非root启动,少开端口,对于一些特殊的IP,比如充值回调等,使用白名单和IP白名单。百度、360等渠道告诉我们,游戏充值成功后,只允许其个人IP访问,不允许公众访问。

2、密码别名:在应用服务器中配置需要密码的资源(如数据库连接池)时,使用应用服务器提供的密码别名功能来隐藏数据库帐户的明文密码。

当部署的应用程序需要使用数据库资源时,只需将别名注入到应用程序中即可。应用程序只能获取数据库连接,无法获取数据库帐户。

这样可以防止在开发过程中泄露其他数据库密码。解决方案密码以明文形式显示。

3、当数据库给应用程序分配一个账户时,会创建一个独立的表空间,并且仅对该账户可见。同时撤销该账户对表、表索引、存储过程、函数的删除权限。

4.客户端防外挂

1、资源检测机制限制了其他作弊手段。玩家修改客户端的资源来改变某些数值,例如速度值、技能CD等。

检测客户端资源文件md5,上报给服务器验证。

2、内存数据混淆和关键数据修改。内存混淆进行了修改和检测,玩家位移、玩家位置检测,结合客户端的关键数据进行内存混淆。关键数据传输到服务器进行验证和位移位置数据,有效防止玩家穿墙。 、加速、瞬移等作弊手段。

一些用户使用Mad Dog和其他内存修改器来更改游戏运行过程中的数字。当然怎么改就是用不同的匹配号,改匹配,改匹配,最后发现这个位置是血,然后就锁定到10万,永不死。换了之后,你去和别人PK,锁血,就永远不会死。怎么解决呢?一种是在服务器端验证,另一种是在客户端验证。生产过程中,内存中的关键数据是混乱的。

它不是作为普通数字放置在内存中,而是被加密。用户无法找到这个数字,普通用户也无法通过内存修复工具更改这个数据。

3、文本资源加密采用可逆加密算法对敏感文本资源进行加密,使用户无法通过简单的二进制查看获取特定内容。

这通常不会影响游戏平衡,但也不好。用户不得修改公司发布的内容。如果格式是自定义的,用户就无法通过普通方式对其进行篡改。

数据库、主从必须分开。当你有大量用户时,主库写入,从库读取。主数据库不应执行统计功能。比如你想看每天有多少用户,三天有多少登录次数,不要在主库上做,而是在从库上做。这不会影响主数据库对用户的服务。过去我们尝试在半夜3点做这些统计,但用户还是有一段时间无法登录。

然后打开二进制LOG,防止极端情况下回滚。有时候,硬件坏了,数据配置错误,换了钱,换了物品等等,只要你把这些事情做好,你就可以恢复到你想要的任何点。我们通常保留10天。

每天都有备份。这个东西是实时的,这是冷备份。我可以从某一天开始备份时间并编译LOG。每次更新前,一定要做好备份,防止一些规划和流程上的bug,导致用户上传后数据乱七八糟。

服务器最好使用RAID,这是我们主要的数据库使用的。一是速度快,二是安全性高。

我把这个分享在后记,是希望大家能给大家一个概念性的想法,知道哪里有陷阱,因为我们做的每一件事都需要时间、人力和金钱。如果遇到安全问题,必须立即解决,因为用户信心非常重要。如果用户信心崩溃,你的游戏基本上走不远。今天,我将在这里分享我们遇到的陷阱以及如何解决它们。谢谢。
页: [1]
查看完整版本: 2015年问道一线品牌沙龙:艾格拉斯CTO张鹏分享游戏防外挂及安全策略