本帖最后由 yushijinhun 于 2017-12-16 20:51 编辑

update: 本项目已停止开发,请使用authlib-injector作为替代。
另见http://www.mcbbs.net/thread-772051-1-1.html





Github项目: yushijinhun/authlib-agent.

authlib-agent通过对mojang的yggdrasil验证服务的url进行修改, 实现了和正版验证类似的功能, 包括:
  • 游戏外登录验证
  • 对皮肤及披风的支持
  • 对绝大多数客户端, 服务端, 启动器的支持 (要求jvm语言编写, mc1.7+)
  • 跨平台

效果截图

阅读下面的内容可能需要一定的java开发经验
因此对一些基本而笼统的问题一概不予回答, 如"怎么安装?" "怎么配置?". 相关资料可以见wiki(见下).

在客户端, 服务端和启动器, 本项目使用javaagent监控类加载, 对所有出现在字符串常量中的yggdrasil api的url进行替换, 使原来发向mojang服务器的验证请求被重定向, 同时这个javaagent也提供了对皮肤域名白名单, session公钥的hack功能.
同时, 本项目实现了一个yggdrasil后端, 用来处理被重定向的验证请求.

详细的介绍和相关文档可以见wiki.

本项目实现的yggdrasil后端只提供了一组Manager API用来进行账户操作, 该账户系统也不是一个完整的账户系统. 因此真正使用可能需要进行二次开发, 因为部署和调用比较复杂, 所以目前定位给中型/大型服务器使用, 下面给出一个思路:
假设我的服务器原有一游戏外账号系统, 如果我要使用authlib-agent, 那么在玩家注册/改密码/新建删除角色/被封禁(等)时, 我就通过Manager API通知yggdrasil后端, 要求更新对应的账户数据. 假如我要使用专用的启动器(或编写专用的验证模块), 那么只需参照正版的API文档即可, 只是请求url发生改变, 格式不变.

技术明细:
javaagent部分使用asm对字节码进行分析和修复.
yggdrasil后端使用Spring, Hibernate, JAX-RS, 使用redis存储token.