Framework
skidfuscatordev/skidfuscator-java-obfuscator avatar
skidfuscatordev/skidfuscator-java-obfuscator

Skidfuscator obfuscates Java bytecode through SSA derived control flow

Public production-ready obfuscator using the MapleIR framework designed by cts

773 stars89 forksJavaMIT

At a glance

What is it?
Skidfuscator is an open source Java bytecode obfuscator built on the MapleIR framework, with a CLI, a GUI, configurable transformers and a Gradle plugin. Its selling point is flow obfuscation that reshapes method logic while trying to hold on to execution time.
Who is it for?
Skidfuscator fits a developer who wants control flow obfuscation on a Java jar, can accept a project whose own README calls it non commercial and unsupported, and wants a CLI rather than a licence server. It is a poor fit for a production application that needs vendor support, a signed guarantee, or an obfuscator with a documented deobfuscation path.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 30 days ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Reshaping method logic instead of renaming symbols

Most Java obfuscation that people describe in one sentence is renaming. Skidfuscator takes a different route, and the README is explicit that the tool is designed to take advantage of SSA form in order to optimize and obfuscate Java bytecode code flow. The transformations are intra-procedural passes, each one intended to mingle the code into a shape where neither time complexity nor space complexity suffers a large loss. In practice that means the work happens on the control flow graph of a method rather than on its names. The flow generation, described in the README as third generation, introduces opaque predicates and complex flow redirections, which the documentation says hinder both static and dynamic analysis. A decompiler that expects a normal loop or a normal branch still has to deal with a structure that no longer resembles the source. The project credits the MapleIR framework, designed by cts, as the foundation.

Obfuscating a jar takes a single command

The tool ships as a jar and is driven from the command line. The README links to the releases page for downloads and gives the core invocation, where the argument is the path to the jar you want obfuscated:

bash
java -jar skidfuscator.jar obfuscate <path to your jar>

That is the whole happy path. The configuration is handled by a config system that lets you customise the obfuscation, and the project also ships built-in presets for common configurations so that a first run does not require hand tuning every option, while keeping all settings available for those who want them. The automatic dependency downloader identifies and fetches missing dependencies for your project, and the README names Bukkit as a framework that is handled automatically. It also admits that some dependencies slip through, which is why a second form of the command accepts a folder of libraries directly:

bash
java -jar skidfuscator.jar obfuscate <path to your jar> -li=<path to folder with all libs>

If the automatic download misses something, that flag is the fallback, and the README suggests using it while the Gradle plugin matures.

Three install routes, two of them remote scripts

For macOS there is a Homebrew tap, and the README gives both lines:

bash
brew tap skidfuscatordev/skidfuscator
brew install skidfuscator

Linux and macOS users are pointed at a bash installer that pipes a script straight from the repository into a shell:

bash
curl -sL https://raw.githubusercontent.com/skidfuscatordev/skidfuscator-java-obfuscator/refs/heads/master/scripts/install.sh | bash

Windows has a PowerShell equivalent, and the README marks it as requiring administrator rights:

bash
iex "& { $(iwr -useb https://raw.githubusercontent.com/skidfuscatordev/skidfuscator-java-obfuscator/refs/heads/master/scripts/install.ps1) }"

Both of the latter two execute code downloaded at the moment you run them from the master branch, with no version pin and no checksum shown. That is a normal convenience pattern for developer tooling, but it is worth reading the script first in a company environment where the fetching machine cannot reach the internet anyway. The repository also carries those scripts in a scripts directory, so the content is inspectable before it runs.

The Gradle plugin exists but is labelled work in progress

For Gradle users the README suggests a dedicated plugin, and shows a short configuration block. The plugin coordinates itself with a version string, and a separate property selects which Skidfuscator version to run, with the documented value being the latest release:

java
plugins {
     id("dev.skidfuscator") version "0.1.4"
}

skidfuscator {
  // Configure the plugin here
  skidfuscatorVersion = "latest"
}

The plugin version in the snippet is 0.1.4, and the README states plainly that the plugin is a work in progress. Combined with the fact that the plugin is a separate repository from the obfuscator itself, a team pinning builds should be prepared to track two moving parts. The CLI jar remains the more predictable surface for a build pipeline, since it takes a file path and produces an obfuscated artifact without needing a plugin resolution step.

Presets and a recovery path for failed runs

Two features target the reality that obfuscation runs are automated and failures are expensive. Auto Configuration provides presets for common setups so the common case needs no manual tuning, and the documentation is careful to say that advanced users can still change every setting. Smart Recovery is the more interesting one: when an error or a failed obfuscation occurs, the tool implements a recovery system that resolves conflicts intelligently and offers suggestions for fixing the problem, with the stated goal of minimal disruption to a development workflow. The project also points out that it provides a GUI alongside more than ten configurable transformers, and frames the goal as one click protection. When you are running the tool inside a release pipeline, that recovery layer is the difference between a failed build and a build that tells you which library to supply.

Separate analyzer modules mirror the pipeline stages

The repository layout makes the internals easier to read than a single fat module would. At the top level sit dev.skidfuscator.obfuscator, dev.skidfuscator.obfuscator.dependanalysis, dev.skidfuscator.obfuscator.pureanalysis, dev.skidfuscator.commons, dev.skidfuscator.sdk, dev.skidfuscator.client.standalone, dev.skidfuscator.annotations and dev.skidfuscator.parent, alongside the upstream org.mapleir.parent, a dev.xdark.ssvm directory and the usual build files including build.gradle, settings.gradle, gradle.properties, gradlew and jitpack.yml. The dependanalysis and pureanalysis modules line up with the two phases the README describes, dependency handling and class analysis, while the sdk and the standalone client suggest the same code can run as a library or as the desktop application. There are also example configurations under examples, including default-exemption, default-no-config and default-with-config, which is the fastest way to see what a configuration file changes.

MIT licensed, self declared non commercial, and unbacked by releases

The licence is MIT, which is permissive, but the README attaches a warning to it: the product is provided as is, no support is offered, and the authors take no liability for any reversal, deobfuscation, or impact the tool may have on your software. It also says the project is not commercial in purpose and exists to inspire cleverer approaches to code flow obfuscation, and points commercial users with sensitive applications toward the author's own commercial offering. The release history shows a gap: 2.0.11 in December 2024, a 2.0.11-EMERGENCY build in April 2025 for CVE-2025-0104, and a 2.0.10-SNAPSHOT before that. The last push was on 2026-09-24, so the code is moving, but the tagged releases have not followed at the same pace. A security patch arriving in a differently named artifact is a detail to check against your own build, not a reason to ignore the project.

Editorial conclusion

Skidfuscator fits a developer who wants control flow obfuscation on a Java jar, can accept a project whose own README calls it non commercial and unsupported, and wants a CLI rather than a licence server. It is a poor fit for a production application that needs vendor support, a signed guarantee, or an obfuscator with a documented deobfuscation path. Before running it over real code, obfuscate a small jar with the default config, keep the unobfuscated build as the reference artifact, and check the recovery suggestions the tool prints when a dependency is missing rather than assuming the automatic downloader found it.

Frequently asked questions

How do I obfuscate a jar with Skidfuscator?

Download the jar from the releases page and run java -jar skidfuscator.jar obfuscate with the path to your jar. A config system controls the transformations, and built-in presets are available so a first run needs no manual tuning.

What happens if Skidfuscator cannot find a dependency?

The tool tries to download missing dependencies automatically and handles known frameworks such as Bukkit, but the README says some may be missed. In that case you can pass a folder of libraries with the -li flag on the obfuscate command.

Is Skidfuscator supported for commercial applications?

The README states the product is provided as is under the MIT licence, that no support is offered and that no liability is taken for reversal or deobfuscation, and it describes the project as not commercial in purpose. It points commercial users toward the author's separate enterprise offering.

Does the Skidfuscator Gradle plugin work in production builds?

The README describes the Gradle plugin as a work in progress, and the configuration example uses version 0.1.4 with skidfuscatorVersion set to latest. The CLI jar invocation is the more stable route for a release pipeline.

Official sources

  1. Issues
  2. License: MIT
  3. README
  4. Releases
  5. skidfuscatordev/skidfuscator-java-obfuscator on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/skidfuscatordev-skidfuscator-java-obfuscator.svg)](https://hysenlabs.com/projects/skidfuscatordev-skidfuscator-java-obfuscator)

Was this useful?