Minecraft(我的世界)中文论坛

标题: 关于防止作弊的可行性方法讨论

作者: xenoxue    时间: 2014-1-18 12:36
标题: 关于防止作弊的可行性方法讨论
LZ以前开过几个服务器。后来因为各种原因都关闭了。。
其中最大的问题就是各种作弊了。
相信很多玩家对各种作弊手段都表示十分厌恶。

后来LZ就想要不自己做个可以防止作弊的服务器吧。虽然LZ的水平很差,但是在强大的baidu的帮助下进度还不错。
在这里和大家讨论下防作弊的几种方法。看看还有没有什么bug会被利用到。

首先想要防止作弊需要具备以下几个条件:
1、专用启动器
2、自有服务器

为什么需要以上2个条件呢?
原因在这里!

专用启动器:
专用启动器主要用于检测游戏文件的合法性,说的简单点就是屏蔽一切可以作弊的文件。比如修改过的jar文件,透视材质,找矿mod等等。防作弊的登陆器需要有以下几个功能:
1、启动检测。必备功能!需要检测游戏文件是否可以作弊,如果可以作弊的话就自动关闭游戏。LZ建议采用hash值对比手段来实现这个功能。
2、文件夹监控。必备功能!用于监控启动游戏后材质包和mod文件夹下的文件变化。如果是被添加了用于作弊的程序则自动关闭游戏。
3、进程保护。用于保护启动器进程,防止玩家启动游戏后强行结束登陆器或文件夹监控进程,然后就可以放透视材质包啦。保护的方法有2种,一种是本地保护,检测到启动器被关闭的话自动关闭游戏。另外一种是远程保护,服务器检测到玩家的启动器被关闭就自动将该玩家踢下线。

自有服务器
自有服务器主要用于建立验证服务器。用于验证玩家账号和游戏文件的合法性。
1、hash值验证。主要用于保存文件hash值,用于玩家启动时对比文件合法性。
2、账号验证。很简单的服务,主要是强迫玩家注册。可有可无的功能。


防作弊的核心手段就是以上几点了。
后来LZ想了下发现有一个更好的防作弊手段了。
相信这里所有人都玩过网络游戏。而网络游戏的防作弊手段LZ觉得可以拿来参考。
同样都是专用启动器,强制玩家使用规定的游戏文件,已防止作弊。唯一存在差异只是在服务器端不同而已。
网络游戏有登录服务器,可以检测玩家的数据封包来确定数据的合法性,而MC则没有办法做到。
因为我们无法去修改MC的核心文件,来改变数据封包,无法让指定服务器的数据封包有独特性。
后来LZ查询相关资料后发现还是有办法解决的!
那就是利用MC原有的正版验证程序来实现这个功能。玩家通过正版验证后MC的正版服务器会给玩家一个随机代码(--accessToken 这个变量,有兴趣的朋友可以去baidu看看就明白了),然后玩家登录的时候会附上这个代码,而服务器端则会通过随机代码和玩家id来判断该玩家是否是正版的,从而给予登录权限。
我们要做的就是自建一个验证系统。

那么接下来就简单多了。我们在启动器内设置账号系统,强制玩家注册登录。登录后服务器给该id分配一组随机代码,并发回到玩家客户端。玩家在启动的时候附上该代码。然后我们在服务器上搭建一个网关转发程序。所有连接服务器的数据在这里需要经过验证ID和代码,符合的话转发到真正的服务器端口上。不符合的话断开。

这样一个完美的防作弊服务器就算搭建完毕了!!!


PS:以上只是思路,LZ也写的差不多了。仅供有一定功底的朋友参考。
PS2:对于不懂编程的朋友可以发表各种意见,看看LZ是否还有遗漏。上面的方法是否还会被突破作弊。

作者: Forsworn_    时间: 2014-1-18 12:49
专用启动器的话= =这个倒是我在的那个服务器就搞的这个东西  随便改个什么MOD都不让进= =
作者: ChengziHtc    时间: 2014-1-18 12:53
不错不错 赞一个 谢谢分享= V=
作者: xenoxue    时间: 2014-1-18 16:07
xinxin2459 发表于 2014-1-18 12:49
专用启动器的话= =这个倒是我在的那个服务器就搞的这个东西  随便改个什么MOD都不让进= =

专用启动器 我看到有很多的。。 但是如果你的玩家用其他的启动器你就没办法阻止他作弊啦。。
作者: Forsworn_    时间: 2014-1-18 16:09
xenoxue 发表于 2014-1-18 16:07
专用启动器 我看到有很多的。。 但是如果你的玩家用其他的启动器你就没办法阻止他作弊啦。。

那边设置的就是其他启动器无法登陆= =
虽然很想截图不过腐竹说开服之前不能外漏= =

作者: sobeit    时间: 2014-1-18 19:05
玩家不会这么聪明 问问你hook掉游戏怎么办
作者: 小孩不乖    时间: 2014-1-18 19:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: xenoxue    时间: 2014-1-19 07:51
小孩不乖 发表于 2014-1-18 19:22
无视任何保护的突破方法:
将java主程序改名,用自己的程序来代替,然后在自己的程序里修改启动参数来动态加载 ...

啧啧。。从来没想到这里还可以刷花招。。。。
不过解决方法也很简单啊。
只要启动前验证下java主程序的合法性就好了。
作者: xenoxue    时间: 2014-1-19 07:54
sobeit 发表于 2014-1-18 19:05
玩家不会这么聪明 问问你hook掉游戏怎么办

我试过hook。。后来发现64位的win7系统会出现各种问题。。
后来选择用2个程序互相监控的方式来实现进程保护。。
我是在启动器启动的时候后台运行一个程序,然后tcp连接到后台的程序。
后台程序发现连接被断开就自动关闭一切minecraft的窗口。
启动器无法连接到后台程序的时候就再启动一个。相对简单的多。
作者: xenoxue    时间: 2014-1-19 07:56
xinxin2459 发表于 2014-1-18 16:09
那边设置的就是其他启动器无法登陆= =
虽然很想截图不过腐竹说开服之前不能外漏= =

{:10_503:} 能问下你是怎么禁止其他启动器登录吗。。
我就是在这里烦恼了很久。。以至于现在要准备利用网关服务器来验证合法性了。
作者: 小孩不乖    时间: 2014-1-19 09:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: 小孩不乖    时间: 2014-1-19 09:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: 小孩不乖    时间: 2014-1-19 09:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: sobeit    时间: 2014-1-19 09:55
xenoxue 发表于 2014-1-19 07:54
我试过hook。。后来发现64位的win7系统会出现各种问题。。
后来选择用2个程序互相监控的方式来实现进程保 ...

=  =
不可行

你考虑过玩家流失率吗

这些都是服务端该做的事
作者: sobeit    时间: 2014-1-19 09:57
而且我觉得你为他定制一个操作系统最安全
作者: [蕾米]leimi    时间: 2014-1-19 10:02
装矿物警报, ,
作者: xenoxue    时间: 2014-1-19 16:31
小孩不乖 发表于 2014-1-19 09:36
禁止其他启动器很简单,把mc的文件改得一塌糊涂(比如把"1.6.2.jar"改成"1.6.2.dll"),让其他启动器认不出就 ...

那玩家使用其他的mc文件不就好了嘛。。
作者: xenoxue    时间: 2014-1-19 16:34
sobeit 发表于 2014-1-19 09:55
=  =
不可行

我是这样想的。。 国内大部分MC玩家年龄都比较小。。。 一般都是直接下载的整合包和启动器。

而且国内服务器一般不会有 千人服务器。所以玩家流失的问题不是太大。


作者: sobeit    时间: 2014-1-19 16:38
xenoxue 发表于 2014-1-19 16:34
我是这样想的。。 国内大部分MC玩家年龄都比较小。。。 一般都是直接下载的整合包和启动器。

而且国内 ...

你正好说错了
具体参考mc正版启动器= =

如果你没有正版(也不要妄自菲薄)那就算了
作者: xenoxue    时间: 2014-1-19 16:41
sobeit 发表于 2014-1-19 16:38
你正好说错了
具体参考mc正版启动器= =

呵呵。 不巧我就是有正版。。

但是国内很多玩家都没有的。所以不是太担心这一点。

而且如果是一个可以杜绝作弊的服务器。我相信玩家还是愿意下载一个2M大小的专用启动器来玩这个服务器的。

何况这个启动器还可以拿来玩其他服务器。
作者: sobeit    时间: 2014-1-19 16:42
xenoxue 发表于 2014-1-19 16:41
呵呵。 不巧我就是有正版。。

但是国内很多玩家都没有的。所以不是太担心这一点。

那你讲讲用什么类实现
作者: xenoxue    时间: 2014-1-21 18:29
[蕾米]leimi 发表于 2014-1-19 10:02
装矿物警报, ,

矿物警报吃服务器内存,还需要手动查。
而且如果玩家什么都挖的话你也没什么办法的。
作者: xenoxue    时间: 2014-1-21 18:34
sobeit 发表于 2014-1-19 16:42
那你讲讲用什么类实现

我是半吊子。
是利用运行一个后台程序。然后用启动器用tcp协议连接后台程序。
并启动一个线程检测后台程序是否存在,不存在的话就再开启一个。这样避免后台程序被强制关闭。
而后台程序只要检测到启动器断开连接就开始检测所有minecraft游戏窗口,并关闭。
虽然比较简单,也没办法避免被破解。但是对一般玩家来说这个方法差不多够。
对那些“专业人士” 再厉害的方法他也可以突破。
作者: Tony🐴    时间: 2014-1-24 20:17
专用服务器吗 我整个bbs的服转了一大圈貌似没见过几个
资源够就开假矿 一了百了 哪那么多事
作者: xenoxue    时间: 2014-1-24 21:55
tony990412 发表于 2014-1-24 20:17
专用服务器吗 我整个bbs的服转了一大圈貌似没见过几个
资源够就开假矿 一了百了 哪那么多事 ...

呵呵。 国内的专业服务器是比较少的。
我是希望可以做一个不需要OP一直在线管理的服务器。 所以必须杜绝作弊。
这样才会公平。
作者: vicrydai    时间: 2014-2-6 16:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: xenoxue    时间: 2014-2-6 17:13
vicrydai 发表于 2014-2-6 16:52
话是这么说没错啦~比如创世神服务器~必须要专用的启动器啦~嘻嘻~

专用的启动器太容易被绕过去了。。 你不用的话其实也有办法登录的。
作者: xunyanglin    时间: 2014-4-15 21:35
sobeit 发表于 2014-1-19 09:57
而且我觉得你为他定制一个操作系统最安全

或者开发一个虚拟机,然后在里面运行mc。。。。。(更扯淡了)
作者: 1277832129    时间: 2014-4-15 23:06
客户端封装
作者: Lucky777777    时间: 2014-8-25 07:10
  个人使用的是插件。插件监测作弊的方式主要是监测异常行为,目前效果还行。
  楼主这里讨论的是客户端验证文件合法性的问题,个人认为也是可行的。不过自建验证系统,首先你得有公信力,不然谁会愿意将自己用户绑定在你的服务器上进行验证,一般的话,有能力的服务器会自建。
  总而言之,防作弊有两种方法:一种是强制封锁客户端;第二种则是插件配合监测异常行为。
  后者更有利于客户端使用的便利性。
  至于你提到的,“用户愿意为防作弊下载专用启动器”、“国内用户正版很少”和“一般用户年龄较小,技术不佳,难以破解”三个观点。
  那么你的假设就是“国内用户盗版居多,年龄普遍较低,无法破解该验证系统。他们中的部分想要作弊,但发现有防作弊启动器,仍愿意下载并入服”
  是否有些奇怪?那么对于另一些不想作弊的人,则无疑平添了许多麻烦。除非你的服务器很受欢迎。
  鄙人语死早,以上言论如有不妥之处,纯属意外加脑抽。
作者: 堕星辰    时间: 2014-8-25 13:45
咦...我见过好多服务器都是各种防作弊的,防飞行,假矿,什么什么的,各种无效
作者: cz126146    时间: 2014-10-3 22:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: 略懂一点    时间: 2014-10-3 22:05
堕星辰 发表于 2014-8-25 13:45
咦...我见过好多服务器都是各种防作弊的,防飞行,假矿,什么什么的,各种无效

他们要是会点命令方块就不用这么狼狈了
作者: 350246356    时间: 2014-11-12 09:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: 15088305060    时间: 2015-2-25 08:33
xenoxue 发表于 2014-1-19 16:34
我是这样想的。。 国内大部分MC玩家年龄都比较小。。。 一般都是直接下载的整合包和启动器。

而且国内服 ...

MC部落路过
作者: Lucency    时间: 2015-2-26 14:31
很棒的作品!