MC禁止多人游戏引发的破解

一颗小胡椒2023-06-26 09:58:23

问题起因

朋友玩服务器,发现从6.8日9:00开始1.16.5客户端无法进入多人模式。

搜索发现好像是当天8号才出现这个问题。

摸索

对mc不太熟,觉得是微软搞了什么动作,抓包啥的,没抓到。

在语言资源里找到这串字符串:

简单说就是玩的离dao线ban模式,没权限给你多人模式。那为啥以前离线模式可以玩呢?不懂,研究一下Minecraft源代码。

Minecraft逆向

一开始我是直接jadx打开主程序,发现没什么东西。通过上面字符串引用的签名,直接搜索,发现有个引用的地方调用了账号验证方法,然后抛出异常:

找到jar包:

发现有个传统验证方法,但是应该已经弃用了:

源码分析

一开始找到了一个项目:yushijinhun/authlib-injector: Build your own Minecraft authentication system.

(https://github.com/yushijinhun/authlib-injector)

但是我试了,不行,可能是版本啥的问题。

于是尝试去找反混淆的项目,比如MCP啥的,看MC的源码。

这里用了forge的开发环境,反混淆映射表是mapped_official频道的,可以看authlib包的源代码:

找来找去找到了mc主类和主界面类:

感觉不远了,继续找:

检查是否多人模式。跟进去,调用了authlib。

socialInteractionsService是一个接口,通过工厂方法创建一个com.mojang.authlib.yggdrasil.YggdrasilSocialInteractionsService实例。发现这里就是判断是否允许多人登录的地方:

修改方法逻辑

本来想用forge写一个mod修改,但是好像不行,或者我没找到文档。然后想着mod里写一个动态hook,尝试了一下没成功。最后想着用javaagent动态修改方法字节码。

找了一些教程,研究了一下,踩了很多坑,找了很多bug。

具体解决的问题:

1.ClassPool.getDefault()报错java.lang.NoClassDefFoundError,因为依赖冲突,加上shade插件。

2.javassist.NotFoundException:classname传进去的是左斜杠分隔路径的类名,跟了下javassist源码才知道类池用点分隔的类名查。

3.转换成字节码时找不到类:应该是javassist编译的时候没有引入这个包,后来直接删掉了,因为这个检测的方法功能单一,全部置true。

步骤如下:

创建一个maven项目(java8),编辑配置:

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.0.0
    org.example
    agnet
    1.0-SNAPSHOT
    jar
    agnet
    http://maven.apache.org
    
        UTF-8
    
    
        
            
                org.apache.maven.plugins
                maven-jar-plugin
                2.4
                
                    
                        
                        
                            org.example.PremainTest
                            true
                            true
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    8
                    8
                
            
            
                
                maven-shade-plugin
                3.1.0
                
                    
                        package
                        
                            shade
                        
                        
                            true
                            
                                
                                    javassist
                                    org.example.javassist
                                
                            
                        
                    
                
            
        
    
    
        
            junit
            junit
            3.8.1
            test
        
        
            org.javassist
            javassist
            3.27.0-GA
        
    

创建一个org.example.PremainTest类:

package org.example;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
import java.lang.instrument.UnmodifiableClassException;
import java.security.ProtectionDomain;
public class PremainTest {
    public static void premain(String agentArgs, Instrumentation inst) {
        System.out.println("agent跑起来啦!=====================================");
        inst.addTransformer(new JavassistTransformer(), true);
    }
    public static void agentmain(String agentArgs, Instrumentation inst) throws UnmodifiableClassException {
        inst.addTransformer(new JavassistTransformer(), true);
        Class classes[] = inst.getAllLoadedClasses();
        for (int i = 0; i < classes.length; i++) {
            if (classes[i].getName().equals("YggdrasilSocialInteractionsService")) {
                System.out.println("成功转换类:" + classes[i].getName());
                inst.retransformClasses(classes[i]);
                break;
            }
        }
    }
    static class JavassistTransformer implements ClassFileTransformer {
        @Override
        public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) {
            if ("com/mojang/authlib/yggdrasil/YggdrasilSocialInteractionsService".equals(className)) {
                try {
                    System.out.println("正在转换类名:" + className);
                    ClassPool classPool = ClassPool.getDefault();
                    CtClass clazz = classPool.get("com.mojang.authlib.yggdrasil.YggdrasilSocialInteractionsService");
                    CtMethod method = clazz.getDeclaredMethod("checkPrivileges");
                    // 修改方法
                    method.setBody("{" +
                            "        chatAllowed = true;" +
                            "        serversAllowed = true;" +
                            "        realmsAllowed = true;" +
                            "    }");
                    System.out.println("成功修改checkPrivileges方法!方法签名:" + method.getLongName());
                    byte[] bytes = clazz.toBytecode();
                    clazz.detach();
                    return bytes;
                } catch (Throwable e) {
                    e.printStackTrace();
                }
            }
            return classfileBuffer;
        }
    }
}

mvn package编译,生成jar包。

回到forge项目(或者启动器),运行参数加上-javaagent

修改方法成功:

多人游戏也开放了:

启动器命令行参数里加上这行:

完美:

本作品采用《CC 协议》,转载必须注明作者和本文链接
import javassist.CtClass;import javassist.CtMethod;
Gartner建议将帮助安全和风险管理领导者不断完善他们战略,以应对最严重威胁、高势头威胁和新出现威胁。勒索软件、账户接管和数据窃取多年来一直高居榜首。Gartner收到客户询问,要求我们预测未来威胁。网络犯罪在疫情期间加速行动,推动网络犯罪组织采取更小、更短、更隐秘行动。攻击关键网络物理系统,特别是由于地缘政治紧张局势推动和结盟勒索软件团伙。勒索软件已经超越了IT范畴。
乌克兰计算机应急响应小组(CERT-UA)25日警告称,针对乌克兰武装部队人员私人电子邮件帐户鱼叉式网络钓鱼活动。在这些攻击中失陷帐户被用来向受害者通讯录中联系人发送额外网络钓鱼消息。网络钓鱼电子邮件是从两个域名(i[.]ua-passport[.]space和id[.]bigmir[.]space)发送,前者试图冒充i.ua免费互联网门户,这个网站自2008年以来为乌克兰人提供电子邮
逆向角度看C++部分特性
同时例如 jstack、jmap 等工具也是不囿于一个方面问题,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。CPU 异常往往还是比较好定位
红蓝对抗—蓝队手册
2022-03-18 14:22:22
红蓝对抗主要目的在于,提高公司安全成熟度及其检测和响应攻击能力。
源码分析1、LLVM编译器简介LLVM 命名最早源自于底层虚拟机缩写,由于命名带来混乱,LLVM就是该项目的全称。LLVM 核心库提供了与编译器相关支持,可以作为多种语言编译器后台来使用。自那时以来,已经成长为LLVM主干项目,由不同子项目组成,其中许多是正在生产中使用各种 商业和开源项目,以及被广泛用于学术研究。
Log4Shell漏洞一出现就立即对MC服务器下手,尽管官方紧急发布更新,但很多自建服务器还是没有察觉危险。
正文首先使用amass 和subfinder 枚举子域,并借助 tomnomnom 制作工具,即anew 。amass enum -d site.com -passive | anew subs.txt && subfinder -d site.com -silent | anew subs.txt. 之后,我使用httpx来过滤活动域,使用以下命令cat subs.txt | httpx -mc 200 -o 200-subs.txt. 我尝试输入 ' 并显示一条错误消息。我很快继续上传一个 shell,它成功了。一切运行完毕后,就可以使用 webshell 上传之前创建 payload 了,然后使用命令执行功能来执行刚上传这个 Payload。我立即报告了我发现,并且由于我发现错误,我收到了几个确认和奖励,因为它们包含多个网站。
IT 之家 6 月 12 日消息,《我世界》第三方开源启动器 Prism Launcher 在日前发出警告,称此前有黑客入侵《我世界》第三方论坛 Bukkit 及 CurseForge ,使用几个知名 Mod 创作者账号分发一系列带有恶意木马 Mod,受影响 Mod 达 20 余款。
一颗小胡椒
暂无描述