MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    ASM obfuscation et class NetHandlerLoginServer

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    2 Messages 1 Publieurs 593 Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • MasterCatM Hors-ligne
      MasterCat
      dernière édition par

      Bonjour,

      De retour avec un nouveau problème obscure ;…;

      Contexte:

      • Toujours un coremod avec de l’ASM
      • Minecraft version: 1.7.10
      • Forge build: 1.7.10-10.13.4.1614-1.7.10
      • Java: 1.8.0_66
      • Le mod est server side only

      Je suis confronté à un autre problème qui m’échappe, je ne sais pas trop comment l’expliquer, j’ai donc fait un code minimaliste qui illustre le problème.
      Je précise que bien évidement ce code est inutile, mais c’est sur cette partie la que je bloque, bien sure dans le code réel la fonction ne fait pas juste ceci:

      Donc voici la method “tranform” dans ma ClassTransformer:

      @Override
      public byte[] transform(String name, String transformedName, byte[] bytes) {
      
          if (bytes == null)
              return (null);
      
          if (transformedName.equals("net.minecraft.server.network.NetHandlerLoginServer")) {
              ClassNode        classNode        = new ClassNode();
              ClassReader        classReader        = new ClassReader(bytes);
              classReader.accept(classNode, 0);
      
              System.out.println("Track 1");
              ClassWriter        classWriter        = new ClassWriter(classReader, ClassWriter.COMPUTE_FRAMES);
              System.out.println("Track 2");
              classNode.accept(classWriter);
              System.out.println("Track 3");
              classWriter.toByteArray();
              System.out.println("Track 4");
          }
      
          return (bytes);
      }
      

      Donc en théorie, je visite le bytcode de la class “net.minecraft.server.network.NetHandlerLoginServer”, je ne le modifie pas, et je return les bytescodes d’orrigine.
      En environnement de dev, cela fonctionne bien sure, mais on version de production la fonction stop son exécution au niveaux de la method accept de mon classWriter:

      En gros dans la console j’ai juste ceci:

      [15:02:42] [Netty IO #2/INFO] [STDOUT]: [fr.littlebigcraft.asm.MasterClassTransformer:transform:67]: Track 1
      [15:02:42] [Netty IO #2/INFO] [STDOUT]: [fr.littlebigcraft.asm.MasterClassTransformer:transform:69]: Track 2
      
      

      Une idée ? 😄

      Édit: Je précise que ce problème surviens uniquement avec la class “net.minecraft.server.network.NetHandlerLoginServer”. J’utilise ce code un bon nombre de fois sur d’autres class sans aucun soucis.

      Edit2: J’ai un peu plus d’informations:

      [20:04:18] [Netty IO #2/INFO] [STDOUT]: [fr.littlebigcraft.asm.MasterClassTransformer:transform:68]: Track 1
      [20:04:18] [Netty IO #2/INFO] [STDOUT]: [fr.littlebigcraft.asm.MasterClassTransformer:transform:70]: Track 2
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]: java.lang.RuntimeException: java.lang.ClassNotFoundException: fq
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at org.objectweb.asm.ClassWriter.getCommonSuperClass(Unknown Source)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at org.objectweb.asm.ClassWriter.a(Unknown Source)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at org.objectweb.asm.Frame.a(Unknown Source)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at org.objectweb.asm.Frame.a(Unknown Source)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at org.objectweb.asm.MethodWriter.visitMaxs(Unknown Source)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at org.objectweb.asm.tree.MethodNode.accept(Unknown Source)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at org.objectweb.asm.tree.MethodNode.accept(Unknown Source)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at org.objectweb.asm.tree.ClassNode.accept(Unknown Source)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at fr.littlebigcraft.asm.MasterClassTransformer.transform(MasterClassTransformer.java:71)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at java.lang.ClassLoader.loadClass(Unknown Source)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at java.lang.ClassLoader.loadClass(Unknown Source)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at net.minecraft.server.network.NetHandlerHandshakeTCP.func_147383_a(NetHandlerHandshakeTCP.java:56)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at net.minecraft.network.handshake.client.C00Handshake.func_148833_a(SourceFile:48)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at net.minecraft.network.handshake.client.C00Handshake.func_148833_a(SourceFile:9)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:113)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:317)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:98)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at net.minecraft.network.PingResponseHandler.channelRead(SourceFile:94)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.handler.timeout.ReadTimeoutHandler.channelRead(ReadTimeoutHandler.java:149)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:100)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:480)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:447)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:341)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101)
      [20:04:18] [Netty IO #2/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:-1]:    at java.lang.Thread.run(Unknown Source)
      

      En sachant que la class “fq” correspond à ***** ***** ***** ChatComponentText -_-

      1 réponse Dernière réponse Répondre Citer 0
      • MasterCatM Hors-ligne
        MasterCat
        dernière édition par

        Après de longues recherches j’ai résolu le problème;
        Pour ceux qui rencontrerai le même genre de problème, je me suis inspiré de ce qui est dit sur le lien suivant pour le régler:

        J’ai donc sur-définit la class ClassWriter, et surtout la méthode “getCommonSuperClass” et j’ai remplacé les Class.forName() par la méthode “findClass” de la class “LaunchClassLoader” de minecraft.

        https://github.com/MinecraftForge/FML/issues/655

        1 réponse Dernière réponse Répondre Citer 0
        • 1 / 1
        • Premier message
          Dernier message
        Design by Woryk
        ContactMentions Légales

        MINECRAFT FORGE FRANCE © 2024

        Powered by NodeBB