Features
Implemented obfuscation features
Features
Only documented features are implemented and functional.
Name Obfuscation
Class Renaming
Classes get short or random names (e.g. a, b, c or xk9m2p). Length configurable (1–32 characters).
Method Renaming
Method names are obfuscated. Not renamed:
main(String[])- Constructors (
<init>,<clinit>) - Native methods
- Enum methods (
valueOf,values) toString(),equals(Object),hashCode()– for JDK compatibility
Override chains are detected; overridden methods get the same new name.
Field Renaming
Field names are obfuscated. Not renamed: serialVersionUID, enum constants.
Homoglyph and Invisible Characters
- Homoglyph: Unicode lookalikes (e.g. Cyrillic
аinstead of Latina) – copy-paste fails - Invisible characters: Zero-width chars in names – safe for JVM, hard to detect
Data Obfuscation
Number Obfuscation
- int: Math expressions (e.g.
123→(50*3)-27); decompilers show the expression, not the literal - long, float, double: XOR
Array Obfuscation
Array dimensions are hidden via XOR (new int[8] → new int[(8 ^ key) ^ key]).
Boolean Obfuscation
true and false are hidden via XOR ((value ^ key) ^ key).
String Obfuscation
- XOR encryption
- Inline decryption at each use site (no central decoder)
- Key per class and per string/field
- Static
final Stringfields:ConstantValueis removed; initialization happens in<clinit>with obfuscated code – API keys and secrets never appear readable in bytecode or tostrings-style tools
Debug Info Stripping
Removes file names, line numbers, and local variable names. Decompilers show e.g. var0, var1 instead of meaningful names.
Exclude Patterns
Classes/packages can be excluded from renaming:
*excludes all classes- Prefix match (e.g.
com.exampleexcludescom.example.*) - Built-in:
java.*,javax.*, Bukkit, Minecraft, etc.
Random Options
classNamesRandom,methodNamesRandom,fieldNamesRandom– random names per buildnumberKeyRandom,arrayKeyRandom,booleanKeyRandom,stringKeyRandom– random keys per build