@@ -11,6 +11,7 @@ A powerful and flexible Java bytecode obfuscator built with ASM that provides co
11
11
- ** Local Variable Renaming** - Obfuscate local variable names for additional protection
12
12
- ** Reference Updating** - Automatically updates all references to renamed elements throughout the codebase
13
13
- ** Inheritance-Aware Renaming** - Properly handles interface implementations and method overrides
14
+ - ** Multiple Naming Modes** - Choose from sequential, alphabetic, random short/long, or single character naming schemes
14
15
15
16
### 🎯 Advanced Configuration
16
17
- ** Keep Rules System** - Sophisticated rules for preserving specific classes, methods, and fields
@@ -68,6 +69,14 @@ java -jar java-bytecode-obfuscator-1.0-SNAPSHOT.jar input.jar output.jar \
68
69
java -jar java-bytecode-obfuscator-1.0-SNAPSHOT.jar input.jar output.jar \
69
70
--mappings mappings.txt --verbose \
70
71
--rename-classes --rename-methods --rename-fields --rename-local-variables
72
+
73
+ # Use different naming modes
74
+ java -jar java-bytecode-obfuscator-1.0-SNAPSHOT.jar input.jar output.jar \
75
+ --naming-mode RANDOM_SHORT --rename-classes --rename-methods --rename-fields
76
+
77
+ java -jar java-bytecode-obfuscator-1.0-SNAPSHOT.jar input.jar output.jar \
78
+ --naming-mode SEQUENTIAL_ALPHA --verbose \
79
+ --rename-classes --rename-methods --rename-fields --rename-local-variables
71
80
```
72
81
73
82
### Configuration File
@@ -80,6 +89,7 @@ Create a JSON configuration file for complex scenarios:
80
89
"renameClasses" : true ,
81
90
"renameFields" : true ,
82
91
"renameMethods" : true ,
92
+ "namingMode" : " RANDOM_SHORT" ,
83
93
"verbose" : true ,
84
94
"keepRules" : {
85
95
"keepMainClass" : true ,
@@ -107,6 +117,7 @@ ObfuscationConfig config = new ObfuscationConfig.Builder()
107
117
.renameClasses(true )
108
118
.renameFields(true )
109
119
.renameMethods(true )
120
+ .namingMode(NamingMode . RANDOM_SHORT )
110
121
.verbose(true )
111
122
112
123
// Keep specific classes
@@ -132,6 +143,57 @@ Obfuscator obfuscator = new Obfuscator();
132
143
obfuscator. obfuscate(inputJar, outputJar, config, mappingsFile);
133
144
```
134
145
146
+ ## Naming Modes
147
+
148
+ The obfuscator supports multiple naming modes to generate obfuscated names:
149
+
150
+ ### Available Modes
151
+
152
+ | Mode | Description | Example Output |
153
+ | ------| -------------| ----------------|
154
+ | ` SEQUENTIAL_PREFIX ` | Sequential with prefix (default) | ` a1 ` , ` a2 ` , ` a3 ` , ` m1 ` , ` m2 ` , ` f1 ` , ` f2 ` |
155
+ | ` SEQUENTIAL_ALPHA ` | Sequential alphabetic | ` a ` , ` b ` , ` c ` , ` aa ` , ` ab ` , ` ac ` |
156
+ | ` RANDOM_SHORT ` | Random short names (4 characters) | ` abcd ` , ` xyzk ` , ` mnop ` , ` qrst ` |
157
+ | ` RANDOM_LONG ` | Random long names (8-16 characters) | ` abcdefgh ` , ` xyzklmnopqrs ` |
158
+ | ` SINGLE_CHAR ` | Single character names | ` a ` , ` b ` , ` c ` , then falls back to ` a1 ` , ` a2 ` |
159
+
160
+ ### Usage Examples
161
+
162
+ ``` bash
163
+ # Use random short names for maximum obfuscation
164
+ java -jar obfuscator.jar input.jar output.jar --naming-mode RANDOM_SHORT
165
+
166
+ # Use single character names for minimal size
167
+ java -jar obfuscator.jar input.jar output.jar --naming-mode SINGLE_CHAR
168
+
169
+ # Use alphabetic sequence for readability in testing
170
+ java -jar obfuscator.jar input.jar output.jar --naming-mode SEQUENTIAL_ALPHA
171
+ ```
172
+
173
+ ### Configuration File
174
+
175
+ ``` json
176
+ {
177
+ "namingMode" : " RANDOM_SHORT" ,
178
+ "renameClasses" : true ,
179
+ "renameFields" : true ,
180
+ "renameMethods" : true
181
+ }
182
+ ```
183
+
184
+ ### Programmatic Usage
185
+
186
+ ``` java
187
+ import net.cvs0.config.NamingMode ;
188
+
189
+ ObfuscationConfig config = new ObfuscationConfig .Builder ()
190
+ .namingMode(NamingMode . RANDOM_LONG )
191
+ .renameClasses(true )
192
+ .renameFields(true )
193
+ .renameMethods(true )
194
+ .build();
195
+ ```
196
+
135
197
## CLI Reference
136
198
137
199
### Command Line Options
@@ -149,6 +211,9 @@ Options:
149
211
--rename-classes Enable class renaming
150
212
--rename-fields Enable field renaming
151
213
--rename-methods Enable method renaming
214
+ --rename-local-variables Enable local variable renaming
215
+ -n, --naming-mode <mode> Name generation mode (SEQUENTIAL_PREFIX, SEQUENTIAL_ALPHA,
216
+ RANDOM_SHORT, RANDOM_LONG, SINGLE_CHAR)
152
217
--mappings <file> Output mappings file
153
218
-v, --verbose Enable verbose output
154
219
--keep-class <class> Keep specific class (repeatable)
@@ -184,9 +249,19 @@ java -jar obfuscator.jar input.jar output.jar \
184
249
# Generate mappings
185
250
java -jar obfuscator.jar input.jar output.jar --mappings mappings.txt
186
251
252
+ # Use different naming modes
253
+ java -jar obfuscator.jar input.jar output.jar \
254
+ --naming-mode RANDOM_LONG \
255
+ --rename-classes --rename-methods --rename-fields
256
+
257
+ java -jar obfuscator.jar input.jar output.jar \
258
+ --naming-mode SINGLE_CHAR \
259
+ --verbose
260
+
187
261
# Override config file settings
188
262
java -jar obfuscator.jar -c config.json input.jar output.jar \
189
263
--rename-classes false \
264
+ --naming-mode SEQUENTIAL_ALPHA \
190
265
--verbose
191
266
```
192
267
@@ -199,6 +274,7 @@ java -jar obfuscator.jar -c config.json input.jar output.jar \
199
274
"renameClasses" : true ,
200
275
"renameFields" : true ,
201
276
"renameMethods" : true ,
277
+ "namingMode" : " SEQUENTIAL_PREFIX" ,
202
278
"verbose" : true ,
203
279
"keepRules" : {
204
280
"keepMainClass" : true ,
@@ -214,6 +290,7 @@ java -jar obfuscator.jar -c config.json input.jar output.jar \
214
290
"renameClasses" : true ,
215
291
"renameFields" : true ,
216
292
"renameMethods" : true ,
293
+ "namingMode" : " RANDOM_SHORT" ,
217
294
"verbose" : false ,
218
295
"keepRules" : {
219
296
"keepMainClass" : true ,
@@ -241,6 +318,7 @@ java -jar obfuscator.jar -c config.json input.jar output.jar \
241
318
"renameClasses" : false ,
242
319
"renameFields" : true ,
243
320
"renameMethods" : false ,
321
+ "namingMode" : " SINGLE_CHAR" ,
244
322
"verbose" : false ,
245
323
"keepRules" : {
246
324
"keepStandardEntryPoints" : true ,
@@ -264,6 +342,7 @@ java -jar obfuscator.jar -c config.json input.jar output.jar \
264
342
"renameClasses" : true ,
265
343
"renameFields" : true ,
266
344
"renameMethods" : true ,
345
+ "namingMode" : " RANDOM_LONG" ,
267
346
"verbose" : true ,
268
347
"keepRules" : {
269
348
"keepMainClass" : true ,
@@ -402,14 +481,42 @@ ObfuscationConfig config = new ObfuscationConfig.Builder()
402
481
.renameClasses(false )
403
482
.renameFields(true ) // Only obfuscate fields
404
483
.renameMethods(false )
484
+ .namingMode(NamingMode . SINGLE_CHAR )
405
485
.keepStandardEntryPoints()
406
486
.build();
407
487
```
408
488
409
489
### Aggressive Obfuscation
410
490
``` java
411
- ObfuscationConfig config = ConfigPresets . createAggressiveObfuscation()
412
- .build(); // Minimal keep rules for maximum obfuscation
491
+ ObfuscationConfig config = new ObfuscationConfig .Builder ()
492
+ .renameClasses(true )
493
+ .renameFields(true )
494
+ .renameMethods(true )
495
+ .renameLocalVariables(true )
496
+ .namingMode(NamingMode . RANDOM_LONG )
497
+ .keepStandardEntryPoints() // Minimal keep rules for maximum obfuscation
498
+ .build();
499
+ ```
500
+
501
+ ### Different Naming Modes
502
+ ``` java
503
+ // Sequential with prefix (default)
504
+ ObfuscationConfig config1 = new ObfuscationConfig .Builder ()
505
+ .namingMode(NamingMode . SEQUENTIAL_PREFIX )
506
+ .renameClasses(true )
507
+ .build();
508
+
509
+ // Random short names for good obfuscation
510
+ ObfuscationConfig config2 = new ObfuscationConfig .Builder ()
511
+ .namingMode(NamingMode . RANDOM_SHORT )
512
+ .renameClasses(true )
513
+ .build();
514
+
515
+ // Single character for minimal size
516
+ ObfuscationConfig config3 = new ObfuscationConfig .Builder ()
517
+ .namingMode(NamingMode . SINGLE_CHAR )
518
+ .renameClasses(true )
519
+ .build();
413
520
```
414
521
415
522
### Framework-Specific Configurations
@@ -420,6 +527,7 @@ ObfuscationConfig config = new ObfuscationConfig.Builder()
420
527
.renameClasses(true )
421
528
.renameFields(true )
422
529
.renameMethods(true )
530
+ .namingMode(NamingMode . RANDOM_SHORT )
423
531
.keepClassPattern(" .*Configuration" )
424
532
.keepClassPattern(" .*Controller" )
425
533
.keepClassMethodPattern(" .*Component" , " .*" )
@@ -434,6 +542,7 @@ ObfuscationConfig config = new ObfuscationConfig.Builder()
434
542
.renameClasses(true )
435
543
.renameFields(true )
436
544
.renameMethods(true )
545
+ .namingMode(NamingMode . SEQUENTIAL_ALPHA )
437
546
.keepClassPattern(" .*Activity" )
438
547
.keepClassPattern(" .*Service" )
439
548
.keepClassPattern(" .*BroadcastReceiver" )
@@ -550,6 +659,12 @@ This project is licensed under the MIT License - see the LICENSE file for detail
550
659
551
660
## Changelog
552
661
662
+ ### Version 1.1.0
663
+ - Added multiple naming modes (SEQUENTIAL_PREFIX, SEQUENTIAL_ALPHA, RANDOM_SHORT, RANDOM_LONG, SINGLE_CHAR)
664
+ - Enhanced CLI with naming mode selection
665
+ - Updated configuration file format to support naming modes
666
+ - Improved local variable renaming with configurable naming modes
667
+
553
668
### Version 1.0.0
554
669
- Initial release with class, method, and field renaming
555
670
- Advanced keep rules system
0 commit comments