You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Random vs sequential** – Optional random names per build for stronger obfuscation
9
11
-**Exclude patterns** – Skip classes/packages from renaming. Use `*` to exclude all classes; prefix matches (e.g. `com.example` excludes `com.example.*`). Built-in: java.*, javax.*, Bukkit, Minecraft, etc.
10
12
-**Package flattening** – Inner classes get short names; outer package hierarchy preserved
11
-
-**Homoglyph obfuscation** – Use Unicode lookalikes (e.g. Cyrillic а instead of Latin a). Names appear familiar but copy-paste and search fail. Sequential: fixed mapping; random: varies per char.
13
+
-**Homoglyph obfuscation** – Use Unicode lookalikes (e.g. Cyrillic а instead of Latin a) for class/method/field names. Sequential: fixed mapping; random: varies per char.
12
14
-**Invisible character injection** – Zero-width chars (U+200B, etc.) in names. Safe for JVM; harder to detect and remove.
13
15
14
16
### Data Obfuscation
@@ -21,10 +23,11 @@
21
23
22
24
### Configuration
23
25
-**YAML config** – `config.yml` next to JAR
24
-
-**Per-feature toggles** – Enable/disable class renaming, number, array, boolean, and string obfuscation
25
-
-**Random options** – Toggle randomness for class names and obfuscation keys
26
+
-**Per-feature toggles** – Enable/disable class, method, field renaming; number, array, boolean, and string obfuscation; debug stripping
27
+
-**Random options** – Toggle randomness for class/method/field names and obfuscation keys
| String obfuscation | Inline XOR decrypt at each use; no central decoder → no dump point |
187
+
| String obfuscation | Inline XOR decrypt at each use; key per class and per string; no central decoder → no dump point |
186
188
| Debug stripping | Local vars become `var0`, `var1`; line numbers removed |
187
189
188
190
### Strength
189
191
190
-
Obfuscation raises the bar for casual and automated reverse engineering. Numbers are hidden as expressions instead of trivial XOR; strings are decrypted inline with no single hook point. Realistic caveats: determined reversers can still analyze the code; obfuscation is a deterrent, not unbreakable protection.
192
+
Obfuscation raises the bar for casual and automated reverse engineering. Numbers are hidden as math expressions at compile time; decompilers show the expression, not the literal. Strings use **runtime-computed keys** (`key ^ class.hashCode() ^ index` per string), decrypted inline at each use site—no central decoder, no single breakpoint to dump all strings.
193
+
194
+
We chose XOR over AES for string encryption: AES would be overkill for typical JAR obfuscation and adds complexity (IV handling, block size). XOR with per-class/per-string keys is lightweight and effective against `strings`-tools and casual inspection. **Issues and PRs are open**—if you want AES or stronger encryption, contributions are welcome.
195
+
196
+
Realistic caveats: determined reversers can still trace decryption logic; obfuscation is a deterrent, not unbreakable protection.
0 commit comments