diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/cuchaz/enigma/Deobfuscator.java | 4 | ||||
| -rw-r--r-- | src/main/java/oml/ast/transformers/RemoveObjectCasts.java | 39 |
2 files changed, 42 insertions, 1 deletions
diff --git a/src/main/java/cuchaz/enigma/Deobfuscator.java b/src/main/java/cuchaz/enigma/Deobfuscator.java index 6ea1c40b..5b210110 100644 --- a/src/main/java/cuchaz/enigma/Deobfuscator.java +++ b/src/main/java/cuchaz/enigma/Deobfuscator.java | |||
| @@ -34,6 +34,7 @@ import cuchaz.enigma.mapping.entry.*; | |||
| 34 | import cuchaz.enigma.throwables.IllegalNameException; | 34 | import cuchaz.enigma.throwables.IllegalNameException; |
| 35 | import cuchaz.enigma.utils.Utils; | 35 | import cuchaz.enigma.utils.Utils; |
| 36 | import oml.ast.transformers.ObfuscatedEnumSwitchRewriterTransform; | 36 | import oml.ast.transformers.ObfuscatedEnumSwitchRewriterTransform; |
| 37 | import oml.ast.transformers.RemoveObjectCasts; | ||
| 37 | import org.objectweb.asm.ClassWriter; | 38 | import org.objectweb.asm.ClassWriter; |
| 38 | import org.objectweb.asm.Opcodes; | 39 | import org.objectweb.asm.Opcodes; |
| 39 | import org.objectweb.asm.tree.ClassNode; | 40 | import org.objectweb.asm.tree.ClassNode; |
| @@ -661,7 +662,8 @@ public class Deobfuscator { | |||
| 661 | 662 | ||
| 662 | public static void runCustomTransforms(AstBuilder builder, DecompilerContext context){ | 663 | public static void runCustomTransforms(AstBuilder builder, DecompilerContext context){ |
| 663 | List<IAstTransform> transformers = Arrays.asList( | 664 | List<IAstTransform> transformers = Arrays.asList( |
| 664 | new ObfuscatedEnumSwitchRewriterTransform(context) | 665 | new ObfuscatedEnumSwitchRewriterTransform(context), |
| 666 | new RemoveObjectCasts(context) | ||
| 665 | ); | 667 | ); |
| 666 | for (IAstTransform transform : transformers){ | 668 | for (IAstTransform transform : transformers){ |
| 667 | transform.run(builder.getCompilationUnit()); | 669 | transform.run(builder.getCompilationUnit()); |
diff --git a/src/main/java/oml/ast/transformers/RemoveObjectCasts.java b/src/main/java/oml/ast/transformers/RemoveObjectCasts.java new file mode 100644 index 00000000..d7c3c4a6 --- /dev/null +++ b/src/main/java/oml/ast/transformers/RemoveObjectCasts.java | |||
| @@ -0,0 +1,39 @@ | |||
| 1 | package oml.ast.transformers; | ||
| 2 | |||
| 3 | import com.strobel.assembler.metadata.BuiltinTypes; | ||
| 4 | import com.strobel.decompiler.DecompilerContext; | ||
| 5 | import com.strobel.decompiler.languages.java.ast.AstNode; | ||
| 6 | import com.strobel.decompiler.languages.java.ast.CastExpression; | ||
| 7 | import com.strobel.decompiler.languages.java.ast.ContextTrackingVisitor; | ||
| 8 | import com.strobel.decompiler.languages.java.ast.transforms.IAstTransform; | ||
| 9 | |||
| 10 | /** | ||
| 11 | * Created by Thiakil on 11/07/2018. | ||
| 12 | */ | ||
| 13 | public class RemoveObjectCasts implements IAstTransform { | ||
| 14 | private final DecompilerContext _context; | ||
| 15 | |||
| 16 | public RemoveObjectCasts(DecompilerContext context) { | ||
| 17 | _context = context; | ||
| 18 | } | ||
| 19 | |||
| 20 | @Override | ||
| 21 | public void run(AstNode compilationUnit) { | ||
| 22 | compilationUnit.acceptVisitor(new Visitor(_context), null); | ||
| 23 | } | ||
| 24 | |||
| 25 | private final static class Visitor extends ContextTrackingVisitor<Void>{ | ||
| 26 | |||
| 27 | protected Visitor(DecompilerContext context) { | ||
| 28 | super(context); | ||
| 29 | } | ||
| 30 | |||
| 31 | @Override | ||
| 32 | public Void visitCastExpression(CastExpression node, Void data) { | ||
| 33 | if (node.getType().toTypeReference().equals(BuiltinTypes.Object)){ | ||
| 34 | node.replaceWith(node.getExpression()); | ||
| 35 | } | ||
| 36 | return super.visitCastExpression(node, data); | ||
| 37 | } | ||
| 38 | } | ||
| 39 | } | ||