Reference
Transformers
Every transformer token, grouped by family, with the option that enables it.
Each protection is a transformer. Its token is the name used in exclusion rules and in @ExcludeTransformers through the Transformers constants. Its option is the key that turns it on in the configuration; when the two differ, both are given.
Pipeline order
Transformers run phase by phase, in a fixed order inside each phase:
PRE_RENAME → RENAME → PROTECT_EARLY → STRING → CONTROL_FLOW → STRUCTURE → DYNAMIC_LAST PRE_RENAME holds only sensitiveVm, which virtualises the methods you list before anything is renamed.
Renaming
| Token | Option | Effect |
|---|---|---|
rename | rename | Classes, fields and methods, in a configurable style (Alphabet, Invisible, IlIlIlIlIl), with optional package, class prefix and suffix, member prefix and random salt. |
Control flow
| Token | Option | Effect |
|---|---|---|
controlFlow | controlFlowObfuscation | Opaque predicates, Light (cheap arithmetic) or Heavy (LDIV-based). |
flatten | controlFlowFlattening | Loop-aware control-flow flattening: the method becomes a switch-dispatched state machine. |
flowShuffle | controlFlowShuffling | Reorders basic blocks within methods. |
gotoObfuscation | gotoObfuscation | Replaces GOTO with opaque conditional jumps across 13 IF_xxx variants. |
cffStateMasking | cffStateMasking | XOR-masks the flattening state with ThreadLocalRandom at every dispatch. |
Constants
| Token | Option | Effect |
|---|---|---|
constant | constantObfuscation | Polymorphic number obfuscation, Light (arithmetic chain) or Flow (predicate branching). |
numberSpeck | numberSpeck | Integer, long, float and double constants go through a per-class SPECK32/64 decryptor. |
integerTable | integerTable | BIPUSH, SIPUSH and ICONST_n become reads from a per-class static int[] table. |
staticFieldInit | staticFieldInit | Static String and Integer constant values move to PUTSTATIC in the static initialiser. |
comparisonObfuscation | comparisonObfuscation | String.equals() becomes a hashCode comparison through a proxy, with a fallback on collisions. |
Strings
| Token | Option | Effect |
|---|---|---|
string | stringEncryptMode | Pool-sharded string encryption: several algorithms, optional per-call-site contextual key, AES-CTR with zlib shards, and an invokedynamic fallback that Java 8 accepts. |
polyString | polyString | Per-class XOR-chain polymorphic string decryptor. |
jntPolyString | jntPolyString | Per-call-site XOR and key polymorphic string decryptor. |
Indirection
| Token | Option | Effect |
|---|---|---|
reference | referenceObfuscation | INVOKE* instructions become invokedynamic call sites resolved through a sharded, encrypted blob (AES-CTR with zlib, one IV per call site). |
parameterPacking | parameterPacking | Repacks the parameters of private methods into long[], Object[] and float[] carriers, with a single-slot ThreadLocal pool to avoid allocations. |
methodHandleIndirection | methodHandleIndirection | Owned INVOKESTATIC calls go through a cached MethodHandle.invokeExact() held in a synthetic field. |
invokeDispatcher | invokeDispatcher | Owned static, virtual and interface calls go through a per-class TABLESWITCH dispatcher. |
methodSalt | methodSalt | Appends a dead int parameter to private method descriptors. |
fieldProxy | fieldProxy | Private field reads and writes go through synthetic static proxy methods. |
fieldDescriptorMutation | fieldDescriptorMutation | Private fields are declared as Object, with a CHECKCAST at every access. |
Structure
| Token | Option | Effect |
|---|---|---|
ghostMembers | ghostMembers | Injects synthetic phantom fields and methods to defeat structural fingerprinting. ghostMembersIntense uses a heavier profile. |
blockBreak | blockBreak | Inserts labels at control-flow boundaries to fragment decompiler output. |
trapEdge | trapEdge | Turns GOTO into fake try/catch blocks for dead exception edges. |
annotationConfuser | annotationConfuser | Injects phantom annotations on fields and method parameters. |
access | access | Sets ACC_SYNTHETIC on classes and on fields not annotated @SerializedName, so Gson keeps working. Methods are left untouched. |
Anti-tamper and integrity
| Token | Option | Effect |
|---|---|---|
antiTamper | antiTamper | Detects attached agents and debuggers at runtime and halts the JVM. |
integrity | integrityCheck | Self-checksum guards: runtime CRC verification of class bytes. |
crasher | crasher | Injects constructs that crash common decompilers (CFR, Procyon, Fernflower). |
salt | salt | Per-class salt masking. |
sensitiveVm | sensitiveVm | Virtualises the methods listed in sensitiveVmMethods. |
Strip and watermark
| Token | Option | Effect |
|---|---|---|
lineNumbers | lineNumbers | Strips or randomises LineNumberTable attributes. |
localVariables | localVariables | Strips LocalVariableTable and LocalVariableTypeTable. |
methodParameters | methodParameters | Strips or obfuscates the runtime MethodParameters names. |
innerClasses | removeInnerClasses | Removes the InnerClasses attribute. |
sourceFile | removeSourceFile | Removes the SourceFile attribute. |
watermark | watermarkOptions | Embeds a custom mark: dummy class, text constant, LDC/POP pair or ZIP comment. |
shuffle | shuffle, shuffleOptions | Randomises member order within classes, with one switch per shuffled list. |
Encryption
| Token | Option | Effect |
|---|---|---|
magicCrypter | magicCrypter | Replaces CAFEBABE and encrypts every class with AES-128-CTR and zlib. Part of the hardened runtime. |
Everything at once
The global token, or Transformers.GLOBAL, matches every transformer.