St3ix Obfuscator

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 Latin a) – 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 String fields: ConstantValue is removed; initialization happens in <clinit> with obfuscated code – API keys and secrets never appear readable in bytecode or to strings-style tools

Flow Obfuscation

Linear methods are flattened into a switch-dispatcher pattern. The original execution order is obscured: decompilers show a state machine (switch over opaque keys) instead of straightforward sequential code. Control flow becomes harder to follow for reverse engineering.

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.example excludes com.example.*)
  • Built-in: java.*, javax.*, Bukkit, Minecraft, etc.

Random Options

  • classNamesRandom, methodNamesRandom, fieldNamesRandom – random names per build
  • numberKeyRandom, arrayKeyRandom, booleanKeyRandom, stringKeyRandom, flowKeyRandom – random keys per build

On this page