本人技术基本为0。。 各位高手少喷。
提示:本教材仅限1.7以下版本。因为1.7以上版本采用了新的验证机制。所以破解难度也比较高。目前本人还在慢慢研究中。
最近本人正在研究如何搭建一个反作弊服务器。。到后来觉得可以利用minecraft自带的正版验证机制来判断用户是否正在使用指定的客户端。
然后就发现在不知不觉中1.7以下的正版验证机制已经可以被我利用了。。
首先这里提供一个可行的反作弊验证思路:http://www.mcbbs.net/thread-220983-1-1.html
简单的说就是自己做一个启动器,然后建立文件白名单/黑名单,每次启动前验证一下文件,如果发现有可以作弊的文件就删除/无法启动。 比如透明材质,寻矿mod等等。
然后在这里我教你们怎么搭建一个自己的正版验证服务器。。
1、修改服务器上的hosts文件(请百度如何修改)将以下2个域名指向到本地127.0.0.1
login.minecraft.net
session.minecraft.net
2、在本地架设一个jsp的http+https网页服务(具体方法请百度)。本人建议使用tomcat。简单易用,tomcat的https开启方法也比较简单,还是自行百度吧。
3、建立3个文件分别在 ./index.jsp,./game/joinserver.jsp和,./game/checkserver.jsp
4、当有用户登录服务器的时候他们的客户端会访问index.jsp文件。该文件会反馈回来的参数格式为:
- 未知用途的数字:deprecated:用户名:accessToken:uuid
当./game/joinserver.jsp返回
- OK
./game/checkserver.jsp则会返回
- YES
是不是觉得非常简单啊?那就赶紧先试试吧!随便开一个1.5.2的服务器,开启正版验证,然后再按照上面3个步骤,你就会发现已经可以随意登录这个服务器了。
不对啊。如果按照上面几个步骤,直接关闭正版验证不就行了嘛。没有任何区别啊。。
呵呵。上面只是基础,下面才是进阶操作。
第一步我们先来做个简单的验证,我们把joinserver.jsp的内容改为:(使用ANSI编码)
- <% request.setCharacterEncoding("utf8");
- String user = request.getParameter("user");
- if(user.equals("111") )
- {
- out.println("OK");
- }
- else
- {
- out.println("不是正版无法登录哦!");
- }%>
根据上面的实验表明,其实整个验证过程基本上都是在joinserver.jsp这里来完成的。
那么我们来看看每次服务器发送了哪些信息到这个页面。
- http://session.minecraft.net/game/joinserver.jsp?user=用户名ID&sessionId=验证码&serverId=1
服务器会根据用户的信息,发送用户的ID和验证码还有服务器ID到这个页面。然后由这个页面的java脚本进行判断。如果合法则返回OK。如果非法则返回错误信息。
用户ID 这个很简单,就是玩家使用的ID, 验证码 其实就是一个很神奇的东西了。有自己写过启动器的朋友估计都知道那里有一个参数叫做auth_session。 这个就是所谓的验证码了。事实上服务器也只验证这2个参数,如果符合就代表验证通过了。 最后的服务器ID比较复杂些,个人是觉得基本也用不到,就不细说了。
好了。到现在我们已经完整的了解了整个验证过程,懂java的朋友应该可以很轻易的搞定接下来的步骤了把!
那么为了避免一些误会,完整的验证代码我就不写出来了。大家自己搞定吧!
最后附上1.7的验证机制简介: