Package-level declarations
Types
A Transformer that performs copy propagation of assignments of one variable to another.
A Transformer responsible for removing ZKM's exception obfuscation, which inserts exception handlers that catch any type of exception and immediately re-throw them. The exception handlers are inserted in locations where there is no Java source code equivalent, confusing decompilers.
A Transformer responsible for removing Jagex's exception tracing. Jagex inserts a try/catch block around every method that catches RuntimeExceptions, wraps them with a custom RuntimeException implementation and re-throws them. The wrapped exception's message contains the values of the method's arguments. While this is for debugging and not obfuscation, it is clearly automatically-generated and thus we remove these exception handlers too.
A Transformer that replaces INVOKESPECIAL
instructions in static methods with INVOKEVIRTUAL
equivalents.
A Transformer that rewrites synchronized
blocks produced by older versions of the Java compiler (1.3 and older) into a more modern format. This is required for compatibility with Fernflower, which does not understand the older format.
A Transformer that splits multiple assignments to static fields in a single expression in <clinit>
methods. For example, a = b = new X()
is translated to b = new X(); a = b
. This allows StaticFieldUnscrambler to move the fields independently.