Lightweight Java obfuscator by ItzSomebody. He tried to include as much attribution as possible, so if he missed you just open a pull-request and he will approve it because unlike some, he actually credits my sources (jk lol but I'll still credit sources).
Licenses get to go with the manifest in src/META-INF (yay!)
Usage: java -jar Radon.jar --config exampleconfig.yml
Alternatively, you can also use java -jar Radon.jar --help
for help.
Example config:
Input: ClearChat.jar
Output: ClearChat-OBF.jar
StringEncryption: Light
InvokeDynamic: Normal
FlowObfuscation: Normal
LocalVariableObfuscation: Remove
LineNumberObfuscation: Remove
SourceNameObfuscation: Obfuscate
HideCode: True
Crasher: True
StringPool: True
NumberObfuscation: True
TrashClasses: 50
Renamer: True
WatermarkType: ConstantPool
WatermarkMessage: ItzSomebody
WatermarkKey: PASSWORD
ExpiryTime: 1/18/2018
ExpiryMessage: "YOUR SOFTWARE TRIAL HAS ENDED!!! YOU MUST NOW PAY $100000000 FOR THE FULL VERSION LULZ"
Libraries:
- "C:/Program Files/Java/jdk1.8.0_131/jre/lib/rt.jar"
Exempt:
- "me/itzsomebody/clearchat/ClearChat"
- "me/itzsomebody/clearchat/config/Config"
Valid config options you can use:
Option | Expected Value(s) | Desc |
---|---|---|
Input | String | Input file to obfuscate |
Output | String | Output file to dump result of obfuscation |
Libraries | String List | Libraries used to compile the input |
Exempts | String List | Exempted classes, methods, or fields from obfuscation |
StringEncryption | String (Light/Normal) | Type of string encryption to apply |
FlowObfuscation | String (Light/Normal) | Type of flow obfuscation to apply |
InvokeDynamic | String (Light/Normal) | Type of invokedynamic obfuscation to apply |
LocalVariableObfuscation | String (Obfuscate/Remove) | Type of local variable obfuscation to apply |
Crasher | Boolean | Determines if the decompiler crasher should be applied |
HideCode | Boolean | Determines if synthetic modifiers should be applied |
StringPool | Boolean | Determines if strings should be pooled |
LineNumberObfuscation | String (Obfuscate/Remove) | Type of line number obfuscation to apply |
NumberObfuscation | Boolean | Determines if integers should be split into simple math expressions |
SourceNameObfuscation | String (Obfuscate/Remove) | Type of source name obfuscation to apply |
TrashClasses | Integer | Number of trash classes to generate |
WatermarkMessage | String | Message to watermark into the output |
WatermarkType | String (ConstantPool/Signature) | Type of watermark to apply |
WatermarkKey | String | Key used to encrypt watermarks |
SpigotPlugin | String | Determines if input should be treated as a spigot/bungee plugin |
Renamer | Boolean | Determines if obfuscator should rename classes and methods |
ExpiryTime | String | Determines if obfuscator insert expiry obfuscation (useful for trialware) |
ExpiryMessage | String | Message to show when set your trialware goes past expiration date (rip) |
- OW2 ASM - Refactored as me/itzsomebody/radon/asm.
- SnakeYaml - Refactored as me/itzsomebody/radon/yaml.
- LordPancake - Maker of SkidSuite
- samczsun - Author of Java-Deobfuscator and the 20 (or so) ways to crash the various decompilers which is no longer open-source.
- VincBreaker - Author of Smoke obfuscator which I stole some stuff from xD.
- Coolman - I stole his Zip-writing algorithm xD.
- WindowBuilder by Eclipse - Used to make GUI (yes I know it's Java Swing, I didn't feel like remaking it in JavaFX)
- Licel - Makers of Stringer Java Obfuscator.
- Allatori Dev Team - Makers of Allatori Java Obfuscator.
- Caleb Whiting - Author of Java ASM Obfuscator.
GNU General Public License v3.0