radioegor146 / native-obfuscator

Java .class to .cpp converter for use with JNI
GNU General Public License v3.0
499 stars 67 forks source link

What about LDC's for method handles? #66

Closed mdxd44 closed 12 months ago

mdxd44 commented 1 year ago

Are there any plans to support method handles for ldc nodes? For example sample, it's enough to take the obfuscation of references from zkm

java.lang.UnsupportedOperationException
        at by.radioegor146.instructions.LdcHandler.process(LdcHandler.java:75)
        at by.radioegor146.instructions.LdcHandler.process(LdcHandler.java:8)
        at by.radioegor146.instructions.GenericInstructionHandler.accept(GenericInstructionHandler.java:58)
        at by.radioegor146.instructions.InstructionHandlerContainer.accept(InstructionHandlerContainer.java:17)
        at by.radioegor146.MethodProcessor.processMethod(MethodProcessor.java:256)
        at by.radioegor146.NativeObfuscator.lambda$process$8(NativeObfuscator.java:246)
        at java.base/java.util.zip.ZipFile$EntrySpliterator.tryAdvance(ZipFile.java:559)
        at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332)
        at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
        at by.radioegor146.NativeObfuscator.process(NativeObfuscator.java:148)
        at by.radioegor146.Main$NativeObfuscatorRunner.call(Main.java:71)
        at by.radioegor146.Main$NativeObfuscatorRunner.call(Main.java:20)
        at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
        at picocli.CommandLine.access$1300(CommandLine.java:145)
        at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2352)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2314)
        at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
        at picocli.CommandLine$RunLast.execute(CommandLine.java:2316)
        at picocli.CommandLine.execute(CommandLine.java:2078)
        at by.radioegor146.Main.main(Main.java:80)

System.out.println("Handle: \"" + cst + "\""); output:

Handle: "ru/mdxd44/packagehere/?.a(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/invoke/MutableCallSite;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/Object; (6)"

(this is a generated bridge method by zkm for calling methods i guess) изображение

radioegor146 commented 1 year ago

Will work on it, now it seams feasible

radioegor146 commented 1 year ago

Can you provide sample jar to test it?

radioegor146 commented 1 year ago

So it looks like that this stuff was implemented but still not used. Try with the new release.

mdxd44 commented 12 months ago

I'm sorry for late answer. example.zip

mdxd44 commented 12 months ago

Apparently it works изображение