Secure
Protect your Java application with state-of-the-art obfuscation and encryption
Research-Backed
Backed by academic, proven and peer-reviewed theoretical concepts.
Rigorously Tested
Backed by a 50+ complete unit testing suite. Odds are, Skidfuscator will work out-of-the-box for you.
Fast Support
Weekly bug-fixes with nightly releases. Skidfuscator has unbeatable support.
String Encryption
Hide your Strings in your java application. Hide your endpoints and keep yourself secure.
Flow Obfuscation
Prevent reverse-engineers from understanding your software.
Renamer Obfuscation
Hide the name of your classes and prevent hackers from comprehending your jar
Native Obfuscation (Soon)
Translate your Java code into native JNI, adding a layer of protection.
Why Skidfuscator?
Skidfuscator is a java obfuscator for software developers and companies seeking to protect their Java-based applications from reverse engineering, tampering, and intellectual property theft. Skidfuscator employs a variety of advanced obfuscation techniques, such as control flow obfuscation, string encryption, and class and method renaming, which render the decompiled code significantly harder to understand and analyze. By utilizing these techniques, Skidfuscator increases the effort required to reverse engineer the application, effectively deterring potential attackers and preserving your competitive edge in the market.
How to use
Skidfuscator seeks to be a drag and drop experience, all you need to do is execute the following command to run obfuscation on your project:
java -jar Skidfuscator.jar obfuscate <path to jar>
Features
We currently are working on a variety of ways to approach this system using various lightweight obfuscation methods.
Skidfuscator is backed by research
Inspired by the greats, such as Christian Collberg's Taxonomy of Obfuscation, and many more academic papers, Skidfuscator is the implementation in which theory meets real-world use.
Skidfuscator is not just-another-obfuscator
By leveraging the fact that your program is a culmination of many classes and methods, Skidfuscator is the second obfuscator to introduce interprocedural obfuscation. This makes reverse-engineering exponentially more complex and thwarts most if not all currently available deobfuscation tools.
Skidfuscator is compatible
With the optic of stability, Skidfuscator is compatible from Java 1.8 to Java 18. In addition, Skidfuscator offers pre-existing configurations for popular tools, such as Spigot, Forge, and Sponge for Minecraft, JDA for Discord, and various other toolset commonly prevalent in the Java community.
Learn more about Skidfuscator
Do not hesitate to ask all sales questions to [email protected]
or to join our discord
Transformers
As of right now, the following transformers are available in Skidfuscator:
Obfuscation Strategy | JObfuscator | Zelix KlassMaster | Skidfuscator Community | Skidfuscator Enterprise |
---|---|---|---|---|
Third Generation Flow | ❌ | ❌ | ✅ | ✅ |
Bogus Jump Obfuscation | ✅ | ✅ | ✅ | ✅ |
Bogus Exception Obfuscation | ❌ | ✅ | ✅ | ✅ |
Mangled Jump Obfuscation | ❌ | ❌ | ❌ | ✅ |
Exception Jump Obfuscation | ❌ | ✅ | ✅ | ✅ |
String Encryption | ✅ | ✅ | ✅ | ✅ |
Polymorphic String Encryption | ❌ | ❌ | ❌ | ✅ |
Constant Encryption | ✅ | ✅ | ✅ | ✅ |
Method Inlining | ❌ | ❌ | ❌ | SoonTM |
Method Outlining | ❌ | ❌ | ❌ | ✅ |
Initialisation Outlining | ❌ | ❌ | ❌ | ✅ |
Annotation Encryption | ❌ | ❌ | ❌ | ✅ |
Reference Encryption | ❌ | ✅ | ❌ | ✅ |
Renaming Obfuscation | ✅ | ✅ | ❌ | ✅ |
Return Obfuscation | ❌ | ❌ | ❌ | ✅ |
Method Parameter Obfuscation | ❌ | ✅ | ✅ | ✅ |
Native Driver Obfuscation | ❌ | ❌ | ❌ | ✅ |
Crasher Obfuscation | ❌ | ❌ | ❌ | ✅ |
Examples
Unobfuscated
public void exportLog() throws IOException {
File output = new File("calculations.txt");
try (BufferedWriter writer = new BufferedWriter(new FileWriter(output))) {
logs.forEach(log - > {
try {
boolean shouldPrintNewLine = !log.contains("\n");
if (shouldPrintNewLine)
writer.write("\n");
writer.write(log);
} catch (IOException e) {
e.printStackTrace();
}
});
writer.flush();
}
}
Obfuscated
public void KK0oK0o$KK0oKOo$KK0oKK(int var1_1) throws IOException {
/*
* This method has failed to decompile. When submitting a bug report, please provide this stack trace, and (if you hold appropriate legal rights) the relevant class file.
*
* org.benf.cfr.reader.util.ConfusedCFRException: Extractable last case doesn't follow previous, and can't clone.
* at org.benf.cfr.reader.bytecode.analysis.opgraph.op3rewriters.SwitchReplacer.examineSwitchContiguity(SwitchReplacer.java:611)
* at org.benf.cfr.reader.bytecode.analysis.opgraph.op3rewriters.SwitchReplacer.replaceRawSwitches(SwitchReplacer.java:94)
* at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisInner(CodeAnalyser.java:517)
* at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisOrWrapFail(CodeAnalyser.java:278)
* at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysis(CodeAnalyser.java:201)
* at org.benf.cfr.reader.entities.attributes.AttributeCode.analyse(AttributeCode.java:94)
* at org.benf.cfr.reader.entities.Method.analyse(Method.java:531)
* at org.benf.cfr.reader.entities.ClassFile.analyseMid(ClassFile.java:1055)
* at org.benf.cfr.reader.entities.ClassFile.analyseTop(ClassFile.java:942)
* at org.benf.cfr.reader.Driver.doClass(Driver.java:84)
* at org.benf.cfr.reader.CfrDriverImpl.analyse(CfrDriverImpl.java:78)
*/
throw new IllegalStateException("Decompilation failed");
}
Samples
Don't believe us? Try it yourself! Here below are some samples providing examples of the security we bring.
Sample name | Unobfuscated | Obfuscated | Info |
---|---|---|---|
Evaluator | Download | Download | Prints out various debugging informations and unit tests |