java-deobfuscator / deobfuscator

The real deal
https://javadeobfuscator.com
Apache License 2.0
1.56k stars 290 forks source link

ArrayIndexOutOfBoundsException at "Loading input" stage #876

Closed magakis closed 2 years ago

magakis commented 2 years ago

The error:

Deobfuscation failed. Please open a ticket on GitHub and provide the following error:
java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
        at org.objectweb.asm.AnnotationWriter.computeParameterAnnotationsSize(AnnotationWriter.java:498)
        at org.objectweb.asm.MethodWriter.computeMethodInfoSize(MethodWriter.java:2143)
        at org.objectweb.asm.ClassWriter.toByteArray(ClassWriter.java:489)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.toByteArray(Deobfuscator.java:654)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.lambda$start$9(Deobfuscator.java:458)
        at java.base/java.util.HashMap$Values.forEach(HashMap.java:1065)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.start(Deobfuscator.java:456)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.run(DeobfuscatorMain.java:106)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.run(DeobfuscatorMain.java:99)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.main(DeobfuscatorMain.java:36)

This error occurs during the "Loading input" stage even when I'm simply using the detect feature exactly as described in the README.md

Multiple files in the jar I'm deobfuscating throw this error and some of them I have included in this zip file: errorclasses.zip

The error thrown by these classes is the following:

[main] INFO com.javadeobfuscator.deobfuscator.Deobfuscator - Loading classpath
[main] INFO com.javadeobfuscator.deobfuscator.Deobfuscator - Loading input
[main] ERROR com.javadeobfuscator.deobfuscator.Deobfuscator - Could not parse org/0A.class (is it a class file?)
java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 1
        at org.objectweb.asm.tree.MethodNode.visitParameterAnnotation(MethodNode.java:302)
        at org.objectweb.asm.ClassReader.readParameterAnnotations(ClassReader.java:2934)
        at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1466)
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:721)
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:401)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.loadInput(Deobfuscator.java:300)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.loadInput(Deobfuscator.java:266)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.start(Deobfuscator.java:379)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.run(DeobfuscatorMain.java:106)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.run(DeobfuscatorMain.java:78)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.main(DeobfuscatorMain.java:36)
[main] ERROR com.javadeobfuscator.deobfuscator.Deobfuscator - Could not parse org/0j.class (is it a class file?)
java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
        at org.objectweb.asm.tree.MethodNode.visitParameterAnnotation(MethodNode.java:302)
        at org.objectweb.asm.ClassReader.readParameterAnnotations(ClassReader.java:2934)
        at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1466)
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:721)
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:401)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.loadInput(Deobfuscator.java:300)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.loadInput(Deobfuscator.java:266)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.start(Deobfuscator.java:379)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.run(DeobfuscatorMain.java:106)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.run(DeobfuscatorMain.java:78)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.main(DeobfuscatorMain.java:36)
[main] ERROR com.javadeobfuscator.deobfuscator.Deobfuscator - Could not parse org/0X.class (is it a class file?)
java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 1
        at org.objectweb.asm.tree.MethodNode.visitParameterAnnotation(MethodNode.java:302)
        at org.objectweb.asm.ClassReader.readParameterAnnotations(ClassReader.java:2934)
        at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1466)
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:721)
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:401)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.loadInput(Deobfuscator.java:300)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.loadInput(Deobfuscator.java:266)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.start(Deobfuscator.java:379)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.run(DeobfuscatorMain.java:106)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.run(DeobfuscatorMain.java:78)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.main(DeobfuscatorMain.java:36)
[main] ERROR com.javadeobfuscator.deobfuscator.Deobfuscator - Could not parse org/0Z.class (is it a class file?)
java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 1
        at org.objectweb.asm.tree.MethodNode.visitParameterAnnotation(MethodNode.java:302)
        at org.objectweb.asm.ClassReader.readParameterAnnotations(ClassReader.java:2934)
        at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1466)
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:721)
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:401)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.loadInput(Deobfuscator.java:300)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.loadInput(Deobfuscator.java:266)
        at com.javadeobfuscator.deobfuscator.Deobfuscator.start(Deobfuscator.java:379)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.run(DeobfuscatorMain.java:106)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.run(DeobfuscatorMain.java:78)
        at com.javadeobfuscator.deobfuscator.DeobfuscatorMain.main(DeobfuscatorMain.java:36)

Let me know if there is any other information I can provide you with and thanks for taking the time!

Janmm14 commented 2 years ago

@Col-E

Col-E commented 2 years ago

@Janmm14 CAFED00D in the pom is 1.3.0 and latest is 1.8.1 so we could try bumping it. If its a case CAFED00D handle I'll take a more in-detail look at it later today.

Col-E commented 2 years ago

Oh I see. The parameter annotation attribute has X elements but the actual method has X-1 parameters. ASM allocates a sized array based on the method parameter count, and when it tries accessing X with an X-1 sized array it crashes.

Simple fix, will be doing some refactoring along the way as well. I can open a PR when I'm done.