xenoxue
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_
专用启动器的话= =这个倒是我在的那个服务器就搞的这个东西  随便改个什么MOD都不让进= =

ChengziHtc
不错不错 赞一个 谢谢分享= V=

xenoxue
xinxin2459 发表于 2014-1-18 12:49
专用启动器的话= =这个倒是我在的那个服务器就搞的这个东西  随便改个什么MOD都不让进= =

专用启动器 我看到有很多的。。 但是如果你的玩家用其他的启动器你就没办法阻止他作弊啦。。

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

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

sobeit
玩家不会这么聪明 问问你hook掉游戏怎么办

无视任何保护的突破方法:
将java主程序改名,用自己的程序来代替,然后在自己的程序里修改启动参数来动态加载MOD(试过可行)

xenoxue
小孩不乖 发表于 2014-1-18 19:22
无视任何保护的突破方法:
将java主程序改名,用自己的程序来代替,然后在自己的程序里修改启动参数来动态加载 ...

啧啧。。从来没想到这里还可以刷花招。。。。
不过解决方法也很简单啊。
只要启动前验证下java主程序的合法性就好了。

xenoxue
sobeit 发表于 2014-1-18 19:05
玩家不会这么聪明 问问你hook掉游戏怎么办

我试过hook。。后来发现64位的win7系统会出现各种问题。。
后来选择用2个程序互相监控的方式来实现进程保护。。
我是在启动器启动的时候后台运行一个程序,然后tcp连接到后台的程序。
后台程序发现连接被断开就自动关闭一切minecraft的窗口。
启动器无法连接到后台程序的时候就再启动一个。相对简单的多。

xenoxue
xinxin2459 发表于 2014-1-18 16:09
那边设置的就是其他启动器无法登陆= =
虽然很想截图不过腐竹说开服之前不能外漏= =

{:10_503:} 能问下你是怎么禁止其他启动器登录吗。。
我就是在这里烦恼了很久。。以至于现在要准备利用网关服务器来验证合法性了。

xenoxue 发表于 2014-1-19 07:51
啧啧。。从来没想到这里还可以刷花招。。。。
不过解决方法也很简单啊。
只要启动前验证下java主程序的 ...

java有很多版本,很难收集全部的hash,况且还可以本地伪造数字签名..

xenoxue 发表于 2014-1-19 07:56
能问下你是怎么禁止其他启动器登录吗。。
我就是在这里烦恼了很久。。以至于现在要准备利用网 ...

禁止其他启动器很简单,把mc的文件改得一塌糊涂(比如把"1.6.2.jar"改成"1.6.2.dll"),让其他启动器认不出就行了

防止关闭监视进程的方法:
把java的进程当作子程序来进行调试,这样的话监视进程挂了的话,java也会挂掉

sobeit
xenoxue 发表于 2014-1-19 07:54
我试过hook。。后来发现64位的win7系统会出现各种问题。。
后来选择用2个程序互相监控的方式来实现进程保 ...

=  =
不可行

你考虑过玩家流失率吗

这些都是服务端该做的事

sobeit
而且我觉得你为他定制一个操作系统最安全

秋田小町
装矿物警报, ,

xenoxue
小孩不乖 发表于 2014-1-19 09:36
禁止其他启动器很简单,把mc的文件改得一塌糊涂(比如把"1.6.2.jar"改成"1.6.2.dll"),让其他启动器认不出就 ...

那玩家使用其他的mc文件不就好了嘛。。

xenoxue
sobeit 发表于 2014-1-19 09:55
=  =
不可行

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

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


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

而且国内 ...

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

如果你没有正版(也不要妄自菲薄)那就算了

xenoxue
sobeit 发表于 2014-1-19 16:38
你正好说错了
具体参考mc正版启动器= =

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

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

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

何况这个启动器还可以拿来玩其他服务器。

sobeit
xenoxue 发表于 2014-1-19 16:41
呵呵。 不巧我就是有正版。。

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

那你讲讲用什么类实现

xenoxue
[蕾米]leimi 发表于 2014-1-19 10:02
装矿物警报, ,

矿物警报吃服务器内存,还需要手动查。
而且如果玩家什么都挖的话你也没什么办法的。

xenoxue
sobeit 发表于 2014-1-19 16:42
那你讲讲用什么类实现

我是半吊子。
是利用运行一个后台程序。然后用启动器用tcp协议连接后台程序。
并启动一个线程检测后台程序是否存在,不存在的话就再开启一个。这样避免后台程序被强制关闭。
而后台程序只要检测到启动器断开连接就开始检测所有minecraft游戏窗口,并关闭。
虽然比较简单,也没办法避免被破解。但是对一般玩家来说这个方法差不多够。
对那些“专业人士” 再厉害的方法他也可以突破。

Gesshoku_Rin
专用服务器吗 我整个bbs的服转了一大圈貌似没见过几个
资源够就开假矿 一了百了 哪那么多事

下一页 最后一页