<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    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 余款。
    一顆小胡椒
    暫無描述
      亚洲 欧美 自拍 唯美 另类