Minecraft(我的世界)中文论坛
标题: [开源]authlib-agent 游戏外登录及皮肤解决方案
作者: yushijinhun 时间: 2016-2-14 21:41
标题: [开源]authlib-agent 游戏外登录及皮肤解决方案
本帖最后由 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.
作者: mikexu1998 时间: 2016-2-17 10:51
然而我们服务器的游戏外认证已经做出来了,登录内核用的是ymccc,验证用的是java内置的post请求,验证端为了安全(不暴露数据库密码)全部用php放在网上
作者: 0x3B800001 时间: 2016-2-21 19:41
ymccc是什么鬼
作者: mikexu1998 时间: 2016-2-21 21:37
jmccc,是jmccc,,我的锅,最近忙昏头了
作者: 0x3B800001 时间: 2016-2-21 22:17
。。。。你知道这帖子作者谁吗
作者: DarcJC 时间: 2016-8-11 16:15
jmccc作者......谁tm不知道.....{:10_492:} 话说akir到底怎么用.......
作者: yushijinhun 时间: 2016-8-12 02:29
z25096708 发表于 2016-8-11 16:15
jmccc作者......谁tm不知道..... 话说akir到底怎么用.......
本来想暑假填那个坑的,但弃了。现在在搞启动器
作者: 土球球 时间: 2017-1-31 21:31
话说yushi考虑过用LaunchWrapper启动嘛(还是说已经可以了),感觉。。。可能要比JavaAgent方便些?
作者: yushijinhun 时间: 2017-1-31 21:57
ustc_zzzz 发表于 2017-1-31 21:31
话说yushi考虑过用LaunchWrapper启动嘛(还是说已经可以了),感觉。。。可能要比JavaAgent方便些? ...
服务端怎么办?以及艹不是服务端或客户端的,比如官方启动器怎么办?
作者: qplqpl10 时间: 2017-3-21 03:36
感谢作者的方案 java界面太臭 我为了用你这个 就使用了C# WPF 先验证一遍然后选取角色 然后启动java的启动核心并把参数传输进去用的JMCCC 这样= =虽然麻烦了点最起码不丑了2333
作者: tallmoon 时间: 2017-3-21 13:31
dalao这只能用mac来编译么
作者: yushijinhun 时间: 2017-3-22 17:59
tallmoon 发表于 2017-3-21 13:31
dalao这只能用mac来编译么
我用的是ubuntu,其它平台不清楚。理论上只要有openssl, maven就好了。如果你是win可以试试win的ubuntu子系统。
作者: tallmoon 时间: 2017-3-22 20:02
好的兄弟
作者: 2435932516 时间: 2017-8-18 13:19
编译出现
- [ERROR] COMPILATION ERROR :
- [INFO] -------------------------------------------------------------
- [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
- [INFO] 1 error
- [INFO] -------------------------------------------------------------
- [INFO] ------------------------------------------------------------------------
- [INFO] Reactor Summary:
- [INFO]
- [INFO] authlib-agent-parent ............................... SUCCESS [ 5.930 s]
- [INFO] authlib-javaagent .................................. FAILURE [ 1.591 s]
- [INFO] yggdrasil-backend .................................. SKIPPED
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD FAILURE
- [INFO] ------------------------------------------------------------------------
- [INFO] Total time: 7.913 s
- [INFO] Finished at: 2017-08-18T21:11:07+08:00
- [INFO] Final Memory: 11M/28M
- [INFO] ------------------------------------------------------------------------
- [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project authlib-javaagent: Compilation failure
- [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
- [ERROR]
- [ERROR] -> [Help 1]
- [ERROR]
- [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
- [ERROR] Re-run Maven using the -X switch to enable full debug logging.
- [ERROR]
- [ERROR] For more information about the errors and possible solutions, please read the following articles:
- [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
- [ERROR]
- [ERROR] After correcting the problems, you can resume the build with the command
- [ERROR] mvn <goals> -rf :authlib-javaagent
- cp: 无法获取"./authlib-javaagent/target/authlib-javaagent-*-jar-with-dependencies.jar" 的文件状态(stat): 没有那个文件或目录
- ./authlib-javaagent/target/authlib-javaagent-*-jar-with-dependencies.jar is saved to authlibagent.jar
- cp: 无法获取"./yggdrasil-backend/target/yggdrasil-backend-*.war" 的文件状态(stat): 没有那个文件或目录
- ./yggdrasil-backend/target/yggdrasil-backend-*.war is saved to yggdrasil-backend.war
复制代码
作者: 122474363 时间: 2017-11-28 03:05
为什么服务器有一个玩家,在登录另一个玩家的时候都会掉线。不会超过3个玩家。。因为2个玩家都全部掉线了。
作者: xingyu 时间: 2017-12-7 17:09
编译之后不支持forge,有什么办法可以解决吗?