本帖最后由 xenoxue 于 2014-2-4 23:30 编辑

本人技术基本为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文件。该文件会反馈回来的参数格式为:
  1. 未知用途的数字:deprecated:用户名:accessToken:uuid
复制代码
而服务器端会访问其余2个文件。
当./game/joinserver.jsp返回
  1. OK
复制代码
的时候表示用户成功加入服务器。
./game/checkserver.jsp则会返回
  1. YES
复制代码
那么我们只要将那3个文件都设置成以上数据,那么所有用户就都可以通过验证了。

是不是觉得非常简单啊?那就赶紧先试试吧!随便开一个1.5.2的服务器,开启正版验证,然后再按照上面3个步骤,你就会发现已经可以随意登录这个服务器了。

不对啊。如果按照上面几个步骤,直接关闭正版验证不就行了嘛。没有任何区别啊。。
呵呵。上面只是基础,下面才是进阶操作。

第一步我们先来做个简单的验证,我们把joinserver.jsp的内容改为:(使用ANSI编码)
  1. <% request.setCharacterEncoding("utf8");
  2. String user = request.getParameter("user");
  3. if(user.equals("111") )
  4. {
  5. out.println("OK");
  6. }
  7. else
  8. {
  9. out.println("不是正版无法登录哦!");
  10. }%>
复制代码
然后再登录服务器。 你会发现只有ID为:111 的人才可以通过正版验证了。

根据上面的实验表明,其实整个验证过程基本上都是在joinserver.jsp这里来完成的。
那么我们来看看每次服务器发送了哪些信息到这个页面。
  1. http://session.minecraft.net/game/joinserver.jsp?user=用户名ID&sessionId=验证码&serverId=1
复制代码
看到上面这段我们就很轻易的明白,joinserver.jsp的全部用处了。。
服务器会根据用户的信息,发送用户的ID和验证码还有服务器ID到这个页面。然后由这个页面的java脚本进行判断。如果合法则返回OK。如果非法则返回错误信息。
用户ID 这个很简单,就是玩家使用的ID, 验证码 其实就是一个很神奇的东西了。有自己写过启动器的朋友估计都知道那里有一个参数叫做auth_session。 这个就是所谓的验证码了。事实上服务器也只验证这2个参数,如果符合就代表验证通过了。 最后的服务器ID比较复杂些,个人是觉得基本也用不到,就不细说了。

好了。到现在我们已经完整的了解了整个验证过程,懂java的朋友应该可以很轻易的搞定接下来的步骤了把!
那么为了避免一些误会,完整的验证代码我就不写出来了。大家自己搞定吧!

最后附上1.7的验证机制简介: